【问题标题】:Inserting multiple rows from a php form into the database将php表单中的多行插入数据库
【发布时间】:2013-10-05 08:13:20
【问题描述】:

我的表格如下表(textfeild)。我将这些值输入到这些文本字段中。如何将这些值输入我的数据库?请帮忙。

表格代码:-

    $rows=$_POST["rows"];       
          echo "
        <table align=\"center\" border=\"1\" width=\"70%\">
        <tr>
        <td><b>Roll No.</b></td> <td><b>Full Name</b></td> <td><b>Unit_test</b>       </td><td><b>Prelims</b></td> 
        <td><b>Attendance</b></td> <td><b>File</b></td> 
        </tr>";

    for($n=0;$n<$rows;$n++)
    { 
    echo "<tr>
    <td><input type=\"text\" name=\"roll\" /></td><td><input type=\"text\"                 name=\"name\" /></td><td><input type=\"text\" name=\"unit_test\" /></td>
    <td><input type=\"text\" name=\"prelims\" /></td><td><input type=\"text\"  name=\"attendance\" /></td><td><input type=\"text\" name=\"file\" /></td>
    </tr>";
    }
     echo "</table>";
     echo "<form action=\"feed2.php\" method=\"post\">
    <br>
     <input type=\"submit\" name=\"\" value=\"Submit\" />
   </form>";

用于插入数据库的代码:-

for($n=0;$n<3;$n++)
{
  if(isset($_POST['roll']))
  {
    echo "<br>Updating";

    $roll=$_POST['roll'];
    $name=$_POST['name'];
    $unit_test=$_POST['unit_test'];
    $prelims=$_POST['prelims'];
    $attendance=$_POST['attendance'];
    $file=$_POST['file'];

    $sql="Insert into students (roll,name,unit_test,prelims,average,attendance,file,interm) 
    VALUES ('$roll','$name','$unit_test','$prelims','$average'=(('$unit_test' + '$prelims')/125) *10,'$attendance','$file','$average'+'$attendance'+'$file')";
    $res=mysql_query($sql);
    header("Location:./view.php");
  } 

【问题讨论】:

  • 我什至不明白这段代码是如何工作的。您在哪里以表格形式将值发布到表格中?插入 db 中的 for 循环什么也不做。它只是使用相同的值循环 3 次。
  • 我的表格是由 textfeilds 组成的,所以我认为点击提交按钮时它应该插入,但由于显而易见的原因,它甚至没有插入任何值。

标签: php mysql


【解决方案1】:

最简单的方法可能是将roll等的$_POST值做成一个数组(这样$_POST就变成了一个多维数组)。

有关如何完成此操作的示例,请参阅上一个问题:

Submitting a multidimensional array via POST with php

然后您可以在数据库插入代码中循环遍历数组值。

【讨论】:

    【解决方案2】:

    每行中每个字段的名称必须不同,才能成功地将数据从浏览器发送到服务器。在您的情况下,所有列的名称在所有行中都保持不变。您可以使用 $n 为它们添加后缀

    解决方案:

    将生成字段的代码替换为以下内容:

     for($n=0;$n<$rows;$n++)
        { 
        echo "<tr>
        <td><input type=\"text\" name=\"roll_$n\" /></td><td><input type=\"text\"                     name=\"name_$n\" /></td><td><input type=\"text\" name=\"unit_test_$n\" /></td>
        <td><input type=\"text\" name=\"prelims_$n\" /></td><td><input type=\"text\"  name=\"attendance_$n\" /></td><td><input type=\"text\" name=\"file_$n\" /></td>
        </tr>";
        }
    

    在上面的代码中,我们为每个字段添加了 _$n 后缀

    其次,将insert的代码改成如下:

    $roll=$_POST['roll_'.$n];
    $name=$_POST['name_'.$n];
    $unit_test=$_POST['unit_test_'.$n];
    $prelims=$_POST['prelims_'.$n];
    $attendance=$_POST['attendance_'.$n];
    $file=$_POST['file_'.$n];
    

    第三,我认为sql查询需要改变。在查询之前计算平均值并将其值存储在变量中。然后在查询中引用此变量,就像使用 $roll 和 $name 等其他变量一样。

    $average=(($unit_test + $prelims)/125) *10;
    

    现在使用此代码,所有三行都将保存在数据库中。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      SQL中的多行插入只是用逗号多括号,(), (), ();

      你也逃避你的数据!无论是文本还是二进制,您都必须转义 ALL 您的数据。这很简单,您一定不能逃避数据。即使数据直接来自我的数据库,我也会转义数据,黑客可以在博客评论中发布代码,它会被注释掉,但由于某种原因,如果我处理了该评论,它可能会在以后执行。

      $roll = mysql_real_escape_string($_POST['roll');
      

      所以就这样吧……

      INSERT INTO table (roll, name, unit_test, prelims, average, attendance, file, interm) VALUES 
      ('$roll','$name','$unit_test','$prelims','$average'=(('$unit_test' + '$prelims')/125) *10,'$attendance','$file','$average'+'$attendance'+'$file'),
      ('$roll','$name','$unit_test','$prelims','$average'=(('$unit_test' + '$prelims')/125) *10,'$attendance','$file','$average'+'$attendance'+'$file'),
      ('$roll','$name','$unit_test','$prelims','$average'=(('$unit_test' + '$prelims')/125) *10,'$attendance','$file','$average'+'$attendance'+'$file'),
      ('$roll','$name','$unit_test','$prelims','$average'=(('$unit_test' + '$prelims')/125) *10,'$attendance','$file','$average'+'$attendance'+'$file');
      

      【讨论】:

        猜你喜欢
        • 2015-02-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 2013-11-30
        • 2016-02-17
        相关资源
        最近更新 更多