1

私は少し助けを求めています。ユーザーが最大 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");
?>

コーディングを完成させてくれる人を探しているわけではありませんが、ヒントをいただければ幸いです。:)

4

3 に答える 3

3

複数の行を挿入する 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 ループの外で実行することをお勧めします。

于 2013-09-12T13:43:39.123 に答える
0

$index を使用して while ループを既に設定しています。 name 属性にインデックスを設定しているため、これを使用して POST 値を反復処理できます。検討:

$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 インジェクションについてもお読みください。データベースに挿入する前に、ユーザー入力をサニタイズする必要があります。そうしないと、悪意のあるユーザーがデータベース全体を消去する可能性があります。

于 2013-09-12T13:59:54.590 に答える