Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP控制小型数据库-添加和编辑(查询)_Php_Sql_Post_Mysqli_Radio Button - Fatal编程技术网

PHP控制小型数据库-添加和编辑(查询)

PHP控制小型数据库-添加和编辑(查询),php,sql,post,mysqli,radio-button,Php,Sql,Post,Mysqli,Radio Button,我不熟悉PHP和SQL,所以我为电影创建了一个小数据库,我遇到了一些问题,我还没有解决 如何创建工作编辑功能?为了能够编辑 数据库中的电影 如何将单选按钮中的值转换为类别的SQL值 希望这不是太多的代码 <?php require_once 'login.php'; // Connection to databas $conn = new mysqli($host, $username, $password, $dbname); if ($conn->connect_

我不熟悉PHP和SQL,所以我为电影创建了一个小数据库,我遇到了一些问题,我还没有解决

  • 如何创建工作编辑功能?为了能够编辑 数据库中的电影
  • 如何将单选按钮中的值转换为类别的SQL值
  • 希望这不是太多的代码

    <?php
      require_once 'login.php';
      // Connection to databas
      $conn = new mysqli($host, $username, $password, $dbname);
      if ($conn->connect_error) die($conn->connect_error);
      {   
      echo "Failed to connect to MySQL: (" . $conn->connect_error . ") " . $conn->connect_error;
      }
      // Delete movie from databas
      if (isset($_POST['delete']) && isset($_POST['id']))
      {
        $id = get_post($conn, 'id');
        $query = "DELETE FROM Movies WHERE id='$id'";
        $result = $conn->query($query);
        if (!$result) echo "Delete failed: $query<br>" .
          $conn->error . "<br><br>";
      }
        // Edit movie
    
    
      $title = filter_input(INPUT_POST, "title", FILTER_SANITIZE_SPECIAL_CHARS);
      $director = filter_input(INPUT_POST, "director", FILTER_SANITIZE_SPECIAL_CHARS);
      $year = filter_input(INPUT_POST, "year", FILTER_SANITIZE_NUMBER_INT);
      $category = filter_input(INPUT_POST, "category", FILTER_SANITIZE_SPECIAL_CHARS);
      $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);
    
      if (isset($_POST['title']) &&
          isset($_POST['director']) &&
          isset($_POST['year']) &&
          isset($_POST['radio']) &&
          isset($_POST['id']))
      {
        $title = get_post($conn, 'title');
        $director = get_post($conn, 'director');
        $year = get_post($conn, 'year');
        $category = get_post($conn, 'category');
        $id = get_post($conn, 'id');
        $query = "INSERT INTO Movies VALUES" .
      "('$title', '$director', '$year', '$category', '$id')";
        $result = $conn->query($query);
        if (!$result) echo "INSERT failed: $query<br>" .
          $conn->error . "<br><br>";
      }
      // Form for adding movies and radiobuttons for categories
      echo <<<_END
      <form action="sqltest.php" method="post"><pre>
         Title: <input type="text" name="title">
         Director: <input type="text" name="director">
         Year: <input type="text" name="year">
         Category: 
         <input type="radio" name="query" value="1"> Action
         <input type="radio" name="query" value="2"> Animated
         <input type="radio" name="query" value="3"> Drama
         <input type="radio" name="query" value="4"> Fantasy
         <input type="radio" name="query" value="5"> Sci-Fi
         <input type="radio" name="query" value="6"> Thriller
         <input type="submit" value="Add Movie">
      </pre></form>
    _END;
    
      // List all movies from databas
      $query  = "SELECT * FROM movies";
    
      $result = $conn->query($query);
       if (!$result) die ("Database access failed: " . $conn->error);
      $rows = $result->num_rows;
    
      for ($j = 0 ; $j < $rows ; ++$j)
      {
        $result->data_seek($j);
        $row = $result->fetch_array(MYSQLI_NUM);
    
        echo <<<_END
      <pre>
         Title $row[0]
         Director $row[1]
         Year $row[2]
         Category $row[3]
      </pre>
      <form action="sqltest.php" method="post">
      <input type="hidden" name="edit" value="yes">
      <input type="hidden" name="id" value="$row[4]">
      <input type="submit" value="Edit movie"></form>
      <form action="sqltest.php" method="post">
      <input type="hidden" name="delete" value="yes">
      <input type="hidden" name="id" value="$row[4]">
      <input type="submit" value="Delete movie"></form>
    _END;
      }
    
      $result->close();
      $conn->close();
    
      function get_post($conn, $var)
      {
        return $conn->real_escape_string($_POST[$var]);
      }
    ?>
    
    我重写了您的脚本(没有使用所有表信息)。但你会发现,这很容易。但是,请使用PDO而不是PHP的mysql或mysqli扩展。将来这些扩展将从PHP中删除。PDO是处理db事务的好方法

    我的脚本用于插入、编辑和删除记录,但它应该只表示它一般的工作方式

    请替换mysql连接的数据库凭据(localhost、testdb、root、密码)


    你能再解释一下你到底有什么问题吗?我可以看到你有编辑功能,但你的错误是,你试图插入,但你必须调用更新,因为数据已经在数据库中。对于你的第二个问题,它也是一个数字,你把它转换成sql值是什么意思?
    
    <?php
    
    $pdo = new \PDO('mysql:host=localhost;port=3306;dbname=testdb', 'root', 'password', [
        \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC
    ]);
    
    $categories = [
        'None',
        'Action',
        'Animated',
        'Drama'
    ];
    
    if (array_key_exists('action', $_GET)) {
        switch ($_GET['action']) {
            case 'add':
                $query = 'INSERT INTO Movies SET title = :title, category = :category';
                $handle = $pdo->prepare($query);
                $handle->bindValue(':title', $_POST['title'], PDO::PARAM_STR);
                $handle->bindValue(':category', $_POST['category'], PDO::PARAM_INT);
                $handle->execute();
                header('Location: ' . $_SERVER['PHP_SELF']);
                die;
            case 'edit':
                $query = 'SELECT * FROM Movies WHERE id = :id';
                $handle = $pdo->prepare($query);
                $handle->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
                $handle->execute();
                $record = $handle->fetch();
    
                $categoriesHtml = '';
                foreach ($categories as $catid => $cat) {
                    $selected = $catid == $record['category'] ? 'checked' : '';
                    $categoriesHtml .= '<input type="radio" name="category" value="' . $catid . '" ' . $selected . ' /> ' . $cat . '<br>';
                }
    
                echo <<<HTML
    <form method="post" action="?action=save">
        <input type="hidden" name="id" value="{$_GET['id']}" />
        <input name="title" value="{$record['title']}" /><br/>
        {$categoriesHtml}
        <input type="submit" name="save" value="Save" />
    </form>
    HTML;
                break;
            case 'save':
                $query = 'UPDATE Movies SET title = :title, category = :category WHERE id = :id';
                $handle = $pdo->prepare($query);
                $handle->bindValue(':title', $_POST['title'], PDO::PARAM_STR);
                $handle->bindValue(':category', $_POST['category'], PDO::PARAM_INT);
                $handle->bindValue(':id', $_POST['id'], PDO::PARAM_STR);
                $handle->execute();
                header('Location: ' . $_SERVER['PHP_SELF']);
                die;
            case 'delete':
                $query = 'DELETE FROM Movies WHERE id = :id';
                $handle = $pdo->prepare($query);
                $handle->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
                $handle->execute();
                header('Location: ' . $_SERVER['PHP_SELF']);
                die;
        }
    }
    
    if(isset($_GET['action'])){
        die;
    }
    echo '<ul>';
    // List
    $handle = $pdo->query('SELECT * FROM Movies');
    foreach ($handle->fetchAll() as $row) {
        echo <<<HTML
    <li>
        {$row['title']} - <a href="?action=edit&id={$row['id']}">edit</a> <a href="?action=delete&id={$row['id']}">delete</a>
    </li>
    HTML;
    }
    echo '</ul>';
    
    $categoriesHtml = '';
    foreach ($categories as $catid => $cat) {
        $categoriesHtml .= '<input type="radio" name="category" value="' . $catid . '" /> ' . $cat . '<br>';
    }
    
    echo <<<HTML
    <form method="post" action="?action=add">
        <input name="title" value="" />
        <br/>
        {$categoriesHtml}
        <input type="submit" name="save" value="Save" />
    </form>
    HTML;