【问题标题】:I'm using PHP and need to Insert into sql using a while loop我正在使用 PHP,需要使用 while 循环插入 sql
【发布时间】:2013-09-16 22:28:13
【问题描述】:

我正在寻求一些帮助。我有一个页面供用户输入多达 10 行不同的信息。发货详情。我使用循环创建了一个带有表单的页面..

<?php
  session_start();
  require("config.php");
  require("header.php");
  $db = mysql_connect($dbhost, $dbuser, $dbpassword);
  mysql_select_db($dbdatabase, $db);    
?>
<br><br><br></br>
<form action="insertdispatch.php"  method="post">
  <body>
    <center>
      <table>
        <tr>
          <td><center><b>Ref</td>
          <td><b><center>Date</td>
          <td><b><center>Service</td>
          <td><b>   <center>Tracking</td>
        </tr>
<?php 
  $index = 1;
  $name = 1;
  while($index <= 10){
?>
         <td><input type="text" 
                   name="transno<?php echo $index;?>" 
                   id="transno<?php echo     $index;?>" />
         </td>
     <td><input type="text" name="date<?php echo $index;?>" 
               id="date<?php echo $index;?> "/>
         </td>
     <td><select name = "service<?php echo $index;?>"><?php
    $viewsql = "SELECT * FROM dispatch_service ORDER BY service ASC";
            $viewresult = mysql_query($viewsql);
            while($row = mysql_fetch_assoc($viewresult)){
        ?> <option value=<?php echo $row['service'] ;?>> 
                    <?php echo  $row['service'] ;?></option>
        <?php
            }
              echo "</select>";?>
      <td><input type="text" 
                     name="tracking<?php echo $index;?>" 
                     id="tracking<?php echo  $index;?>"/>
          </td>
      </tr>
      <?php $index ++;
    }?>
         <center>
       <td><input type="submit" value="Add Product" />
     </form>
     </center>
   </td>
 </tr>
 </table>
 </center>
 <center><a href='javascript:history.back(1);'>Back</a>
 </body>
 </html>`

每个文本框我有10个,文本框的名字加上index的值到最后。 (以我有限的编码经验,我对自己很满意)所以我转到 insertdispatch.php 页面,计划将这些值中的每一个插入我的表中......现在......我不知道......和我似乎无法弄清楚我将如何做到这一点......

我想我需要再次使用循环.. 但我似乎无法弄清楚我将如何调用每个 $_POST 值。我真的不想使用 10 种不同的插入语句,因为表单的大小可能会增加。这是我到目前为止所拥有的..

<?php

session_start();
require("config.php");

$db = mysql_connect("localhost","root","");
if (!$db)
{
do_error("Could not connect to the server");
}


mysql_select_db("hbt",$db)or do_error("Could not connect to the database");

$index = 1;
while($index <= 10){

$insertsql = "INSERT into dispatch (trans_no, date, service, tracking) values     ()";
mysql_query($insertsql);

 $index ++;
  }
//header("Location: " . $config_basedir . "home.php");
?>

我不是在寻找任何人为我完成编码,但任何提示将不胜感激! :)

【问题讨论】:

  • mysql_* 函数被废弃,切换到mysqli_* 或PDO
  • 如果您需要提示 - 第二个文件中的 var_dump($_POST) 将向您显示表单发送的所有字段。

标签: php sql loops insert


【解决方案1】:

您可以构建 1 个插入多行的插入语句:

INSERT into dispatch (trans_no, date, service, tracking) values
   (1, '2013-09-12', 'myService1', 'on'),
   (1, '2013-09-12', 'myService2', 'on'),
   (1, '2013-09-12', 'myService3', 'on'),
   (1, '2013-09-12', 'myService4', 'on'),
   (1, '2013-09-12', 'myService5', 'on');

只需在你的 while 中构建它,然后在 while 完成后执行它。

要构建此查询,您需要执行与生成 HTML 时完全相同的循环,但现在只需从 $_POST 获取值,而不是为它们创建一个 html 字段...

注意 在构建 HTML 时,您会在 for 循环中触发静态查询。由于此查询是静态的,因此结果也不会改变,最好在外部 while 循环之外执行该查询。

【讨论】:

    【解决方案2】:

    (在考虑 PHP 代码之前,您确实应该阅读更多关于基本 HTML 的内容 - 那里有很多错误)。

    name="transno<?php echo $index;?>"
    

    这也很麻烦——你为自己创造了额外的工作和复杂性。使用数组:

    name="transno[]"
    

    如果您确实想再次引用该项目,请设置索引:

    id="transno[<?php echo $index; ?>]"
    

    在接收端....使用单个插入语句来添加行 - 而不是 10 个单独的行(它会快得多)。

    【讨论】:

    • 感谢您的意见。我将研究数组,我知道它们使用起来更干净,但对它们了解不多。
    【解决方案3】:

    您已经使用 $index 设置了 while 循环 - 您可以简单地使用它来遍历 POST 值,因为您使用索引设置了它们的 name 属性。考虑:

    $index = 1;
    while($index <= 10){
        $trans_no = $_POST["transno$index"];
        $service = $_POST["service$index"];
        $date = $_POST["date$index"];
        $tracking = $_POST["tracking$index"];
    
        $insertsql = "INSERT into dispatch (trans_no, date, service, tracking)
                      VALUES($trans_no, $date, $service, $tracking)";
        mysql_query($insertsql);
    
     $index++;}
    

    尽管将表单输入设置为数组会更简洁,正如其他人在此处指出的那样。

    另外,请阅读SQL injection. 您需要在将任何用户输入插入数据库之前对其进行清理 - 否则恶意用户可能会擦除您的整个数据库。

    【讨论】:

    • 还有一点:不要使用mysql_connect。自 PHP 5.5 起已弃用。检查the PHP docs site 的文档并改用mysqli_connect。
    • 感谢您的帮助。我听说过 mysqli_connect。我刚刚完成了 php/sql 的一个非常基本的“初学者”课程,所以我希望尽我所能进行改进。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 2019-01-21
    • 2021-04-19
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2014-10-18
    • 2019-02-06
    相关资源
    最近更新 更多