【问题标题】:Inserting select options into database将选择选项插入数据库
【发布时间】:2016-05-02 01:01:39
【问题描述】:

这是我连接到服务器并将每个选择标记的每个选项值插入数据库中的表中的 php 代码

<?php 

$servername = "localhost";
$username = "projectuser";
$password ="";
$dbname = "surveyproject";

//establish connection
$connection = mysqli_connect($servername , $username , $password       ,$dbname);

//check for connection errors
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
echo "connected succesfully";

//inserting answers into db
if (isset($_POST['submit'])) {
# code...
for($i=1; $i<3; $i++){
   if(isset($_POST['select'])){
     $select = $_POST['select']; 
     $query = "INSERT INTO surveyanswers (answer) VALUES     ('$select')";
     mysqli_query($connection,$query);
}
}

echo "<script>alert('succesfully submitted answers , thank you')</script>";

mysqli_close($connection);
}
?>

这是我的 html 代码,带有三个选择标签,我希望在每个选择标签的选项中选择的值更新到数据库中的表中

<select class="form-control" name="select">
  <option value="Very Good">Very Good</option>
  <option value="Good">Good</option>
  <option value="Average">Average</option>
  <option value="Poor">Poor</option>
  <option value="Very Poor">Very Poor</option>
</select>
<select class="form-control" name="select">
  <option value="Very Good">Very Good</option>
  <option value="Good">Good</option>
  <option value="Average">Average</option>
  <option value="Poor">Poor</option>
  <option value="Very Poor">Very Poor</option>
</select>
<select class="form-control" name="select">
  <option value="Very Good">Very Good</option>
  <option value="Good">Good</option>
  <option value="Average">Average</option>
  <option value="Poor">Poor</option>
  <option value="Very Poor">Very Poor</option>
</select>

【问题讨论】:

  • 在您的 php 代码顶部执行 var_dump ($_POST); 并查看输出,您会发现代码存在问题。您需要为每个选择命名不同的东西。
  • 如果某个答案解决了您的问题,请考虑接受该答案。以下是meta.stackexchange.com/questions/5234/… 然后返回此处并对勾号/复选标记执行相同操作直到它变为绿色的方法。这通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,可能想要发布(更多)答案。您将获得积分,并鼓励其他人帮助您。 欢迎来到 Stack!

标签: php mysql


【解决方案1】:

制作selects 数组。

<select class="form-control" name="select[]">
  <option value="Very Good">Very Good</option>
  <option value="Good">Good</option>
  <option value="Average">Average</option>
  <option value="Poor">Poor</option>
  <option value="Very Poor">Very Poor</option>
</select>
<select class="form-control" name="select[]">
 <option value="Very Good">Very Good</option>
  <option value="Good">Good</option>
  <option value="Average">Average</option>
  <option value="Poor">Poor</option>
  <option value="Very Poor">Very Poor</option>
</select>
<select class="form-control" name="select[]">
  <option value="Very Good">Very Good</option>
  <option value="Good">Good</option>
  <option value="Average">Average</option>
  <option value="Poor">Poor</option>
  <option value="Very Poor">Very Poor</option>
  </select>

然后你可以循环遍历数组。因为它们都具有相同的名称,所以只发送最后一个 select

之后,通过使用带有参数化查询的准备好的语句来解决您的 SQL 注入问题。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

那么你的 PHP 可能是:

$query = "INSERT INTO surveyanswers (answer) VALUES (?)";
if ($stmt = mysqli_prepare($connection,$query)) {
     foreach($_POST['select'] as $selectvalue){
          mysqli_stmt_bind_param($stmt, "s", $selectvalue);
          mysqli_stmt_execute($stmt);
     }
} else {
     printf("Error: %s.\n", mysqli_stmt_error($stmt));
}

【讨论】:

  • 我得到了这些错误:mysqli_stmt_bind_param() 期望参数 1 是 mysqli_stmt 而 mysqli_stmt_execute() 期望参数 1 是 mysqli_stmt
  • 那么准备失败,检查原因。 php.net/manual/en/mysqli-stmt.error.php
  • 已修复,谢谢。但我的表仍未更新。我使用了 $select= $_POST;和 var_dump($select) 和所有的值都存储在 select 中。但仍未插入值。
  • 是的,它什么也不返回
  • 它命中了else 块并且什么都不返回?
猜你喜欢
  • 2013-12-25
  • 2019-07-31
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
相关资源
最近更新 更多