php - 如果选中复选框,则将多行插入到表中

标签 php mysql

如果选中复选框,我将尝试将多行插入到数据库表中。但是在我的代码中,当我尝试插入时,新行是根据复选框选择插入的。但没有数据传递。我需要一些关于以下代码的建议来修改:

<?php
  $db=mysql_connect("localhost","root","");
  mysql_select_db("kkk",$db);
  $qry="select * from  pi";
  $result=mysql_query($qry);
?>

<form action="check.php"   method="post">
  <table>
    <tr>
      <th>A</th>
      <th>B</th>
      <th>C</th>
   </tr>

<?php
while($row=mysql_fetch_array($result))
{
  echo "<tr><td><input type=checkbox name=name[] value='".$row['id']."'>".$row['PI_NO']."</td><td>".$row['CUSTOMER_NAME']."</td><td>".$row['PI_ADDRESS']."</td></tr>";
}
?>

<input type="submit" value="save" id="submit">

<?php
  $db=mysql_connect("localhost","root","");
  mysql_select_db("kkk",$db);

  $name=$_POST['name'];
  foreach($_POST['name'] as $x)
  {
    $qry="INSERT INTO pi (PI_NO, CUSTOMER_NAME, PI_ADDRESS)VALUES ('$PI_NO','$CUSTOMER_NAME','$PI_ADDRESS')";
    mysql_query($qry);
  }     
?>

最佳答案

注释:

  • 您忘记绑定(bind)您的姓名checkbox使用单个刻度 ( ' )
  • 您在查询中使用了尚未定义和赋值的变量
  • 您仅传递了 name 的值,并且不包括Pi AddressCustomer name 。我将使用 <input type="hidden"> 通过隐藏输入传递它们.
  • 我将通过循环并使用 for() 检查它们来更改您检查传递的表单的方式。和if()
  • 使用mysql_real_escape_string()在您的查询中使用它们之前,可以防止某些 SQL injections 。但如果您考虑使用 mysqli prepared statement 会更好而不是已弃用的 mysql_* .
  • 您的帖子是单个文件吗?如果是,您必须使用 isset() 括住您的查询。以防止加载页面时出现错误。
  • 您没有关闭 <form>

这是更正后的 while 循环:

<?php
while($row=mysql_fetch_array($result))
{
  ?>
    <tr>
      <td>
        <input type="checkbox" name="name[]" value="<?php echo $row['id']; ?>">
        <?php echo $row["PI_NO"]; ?>
        <!-- HERE IS THE START OF YOUR TWO HIDDEN INPUT -->
        <input type="hidden" name="piaddress[]" value="<?php echo $row["PI_ADDRESS"]; ?>">
        <input type="hidden" name="customer[]" value="<?php echo $row["CUSTOMER_NAME"]; ?>">
      </td>
      <td><?php echo $row['CUSTOMER_NAME']; ?></td>
      <td><?php echo $row['PI_ADDRESS']; ?></td>
    </tr>
  <?php
} /* END OF WHILE LOOP */
?>

<input type="submit" value="save" id="submit">
</form> <!-- YOU DID NOT CLOSE YOUR FORM IN YOUR POST -->

您的查询:

<?php

  $db=mysql_connect("localhost","root","");
  mysql_select_db("kkk",$db);

  $counter = count($_POST["name"]); /* COUNT THE PASSED ON NAME */

  for($x=0; $x<=$counter; $x++){

    if(!empty($_POST["name"][$x])){
      $PI_NO = mysql_real_escape_string($_POST["name"][$x]);
      $CUSTOMER_NAME = mysql_real_escape_string($_POST["customer"][$x]);
      $PI_ADDRESS = mysql_real_escape_string($_POST["piaddress"][$x]);

      $qry="INSERT INTO pi (PI_NO, CUSTOMER_NAME, PI_ADDRESS) VALUES ('$PI_NO','$CUSTOMER_NAME','$PI_ADDRESS')";
      mysql_query($qry);

    } /* END OF CHECKING THE CHECKBOX IF SELECTED */

  } /* END OF FOR LOOP */

?>

关于php - 如果选中复选框,则将多行插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182150/

相关文章:

mysql - SQL多对多查询查找所有多个匹配重复问题

php - mysql php 数据库将共享一个成员表但没有别的吗?

php - Laravel 中的身份验证自定义登录重定向

php - Http 文件上传 - 超过 25mb 的文件失败 - PHP 上传脚本

php - wordpress 迁移后,我的端口被阻止并且站点拒绝连接

php - 当 php 包含 javascript 变量时,我如何在 javascript 文件中使用 php 代码?

php - MySQL:动态确定表的主键

mysql - “找不到兼容的服务器”错误消息

MySQL删除特殊字符的过程,除了字母数字字符和空格M

php - PDO/MySQL/PHP/OS X : MySQL server has gone away on subsequent queries?