从SQL填充select字段,使用select更新数据库

时间:2016-06-21 13:32:07

标签: php html mysql forms

我正在练习一点点发展,但我偶然发现了一个小问题,我无法理解。目标很简单:用户填写表单,然后重定向到结果页面或表单。在结果页面中,用户可以导航到一个页面,在该页面中,用户可以编辑与时间段和输入名称相匹配的任何记录。

示例:用户1添加名为' Banshee'的汽车,重定向到结果页面,看到' Banshee'汽车,但随后决定他希望颜色不同。用户导航到更新页面,并且能够输入' Banshee'或选择' Banshee'从下拉列表中。第一种选择有效,但后者是我正在寻找的解决方案。

目前我有以下表格(这只是重要的部分):

<form method="post" name="input" action="edittest.php" >

    <?php
    include("/var/www/html/includes/sqlconnecttest.php");

    $db=mysqli_select_db($connect,$database)
    or die("Could not connect to the database");

    $query = "SELECT * FROM cars WHERE datetime > DATE_SUB(CURDATE(), INTERVAL 5 DAY);";
    $sql = mysqli_query($connect,$query);
?>

    <p>
    <label>Name</label>
    <select name="name" form="input" required>
    <?php
    echo "<option value=\"\" disabled=\"disabled\" selected=\"selected\" style=\"display\:none\"></option>";
    while ($row = mysqli_fetch_array($sql)){
    echo "<option value=\"name\">" . $row['name'] . "</option>";
    }
    ?>
    </select>
    </p>

通过以下PHP代码完成连接:

<?php
    include("/var/www/html/includes/sqlconnecttest.php");

    $db = new mysqli("$host","$user","$pass","$database");

    $name=$_POST['name'];

    $stmt = $db->prepare("UPDATE cars
                          SET color=?, airco=?, tires=?, rims=?, price=?, engine=?, remarks=?
                          WHERE name='$name' AND datetime > DATE_SUB(CURDATE(), INTERVAL 5 DAY);");
    $stmt->bind_param('ssssiss', $ccolor, $cairco, $ctires, $crims, $cprice, $cengine, $cremarks);

    $color=$_POST['color'];
    $airco=$_POST['airco'];
    $tires=$_POST['tires'];
    $rims=$_POST['rims'];
    $price=$_POST['price'];
    $engine=$_POST['engine'];
    $remarks=$_POST['remarks'];

    $ccolor=htmlspecialchars($color,ENT_QUOTES);
    $cairco=htmlspecialchars($airco,ENT_QUOTES);
    $ctires=htmlspecialchars($tires,ENT_QUOTES);
    $crims=htmlspecialchars($rims,ENT_QUOTES);
    $cprice=htmlspecialchars($price,ENT_QUOTES);
    $cengine=htmlspecialchars($engine,ENT_QUOTES);
    $cremarks=htmlspecialchars($remarks,ENT_QUOTES);

    if ($stmt->execute()) {

    header("Location: redtest.php");
 }
 ?>

问题如下:当我使用上面发布的HTML表单和while循环填充选项时,更新页面没有做任何事情。没有错误,没有更新只是执行操作(打开edittest.php)。

然而,当我用这个简单的文本字段替换上面发布的下拉菜单时,它工作正常。无论我在文本字段中输入什么,它都会在更新查询中使用它。

    <p>
    <label>Name</label>
    <input type="text" maxlength="50" name="name" required />
    </p>

我感觉PHP代码破坏了select-field和表单其余部分之间的联系。

1 个答案:

答案 0 :(得分:0)

我看到你的选择有两个问题。首先,您将看到一个默认值,然后使用display:none隐藏它。您还为每个选项设置了相同的值。我相信这是你正在尝试做的事情。

<select name="name" form="input" required>
  <option value=""></option>
<?php
  while ($row = mysqli_fetch_array($sql)){
     echo "<option value=\"". $row['name'] ."\">" . $row['name'] . "</option>";
  }
?>
</select>