0

ユーザーが必要に応じてフィールドを追加できるフォームがあります...

彼は 1、2、3、.... フィールドの行を追加できます..

私が使用するコードはここにあります、

<?php
echo '
<form method="post" action="">
   <input type="hidden" name="mod" value="'.$mod.'" />
   <table style="width: 700px">
   <tr>
       <th>Description</th>
       <th>Quantity</th>
       <th>Price</th>
   </tr>';

// Loop to prepare the display of 100 product lines
for ($i=0; $i<100; $i++) {

   if ($text['quantity'][$i] == "") $text['quantity'][$i] = 1;
   if ($text['unit'][$i] == "") $text['unit'][$i] = "0.00";
   // Display only the first line
   if ($nbr_ligne == 0) $nbr_ligne = 1;
   if ($i >= $nbr_ligne) $display = 'style="display:none"';
   echo '
   <tr id="cell'.$i.'" '.$display.'>
       <td>
           <textarea name="text[detail]['.$i.']">'.stripslashes($text['detail'][$i]).'</textarea>
           <br />
           <a href="javascript:void(0)" onclick="javascript:document.getElementById(\'cell'.($i+1).'\').style.display=\'table-row\'; this.style.display=\'none\'">[+]</a>
       </td>
       <td>
           <input name="text[quantity]['.$i.']" id="q'.$i.'" value="" size="4" />
       </td>
       <td>
           <input name="text[unit]['.$i.']" id="u'.$i.'" value="" size="7" /> USD
       </td>
   </tr>';
}

echo '
   </table>
   <input type="submit" name="save" value="Save" />
</form>
';
?>

フィールドは正常に追加されています。

これらのフィールドの値をデータベースに保存したいと思います。

これに使用するコードは次のとおりです。

if(isset($_POST['save']))
{
    echo mysql_error($db);


       extract($_POST);
       $insert=mysql_query(" insert into add (description, quantity, price) values ('{$text['detail'][$i]}','{$text['quantity'][$i]}','{$text['unit'][$i]}')") or die("unable to insert"); 
}

しかし、それは機能しません。みんな助けてください。とても必要です。

4

2 に答える 2

0

$i が追加された行の数と等しい場合、mysql クエリをループに入れる必要があります。

if(isset($_POST['save']))
{
for ($e = 1; $e <= $i; $e++) {
$insert=mysql_query(" insert into add (description, quantity, price) values ('".$text['detail'][$e]."','".$text['quantity'][$e]."','".$text['unit'][$e]."')") or die("unable to insert"); 
}
}
于 2012-09-24T11:04:10.257 に答える
0

ここでの問題は、データベースへの保存に使用しているスクリプトで $i が初期化されていないことです。0 から 100 までループし、番号が存在しない場合は BREAK する必要があります。予約済みのキーワードaddも使用しています。予約済みキーワードにはバッククォート ` を使用します。

extract($_POST);

foreach(range(0,100) as $i){
    if(isset($text['detail'][$i]) && isset(isset($text['quantity'][$i]) && isset(isset($text['unit'][$i])){
         $insert= mysql_query(" INSERT INTO `add` (`description`, `quantity`, `price`) VALUES ('".$text['detail'][$i]."','".$text['quantity'][$i]."','".$text['unit'][$i]."')") or die(mysql_error());
    }
    else{
        break;
    }
}

挿入をループする方法はあまり好きではありませんが、明らかに最善の解決策ではありませんが、上記のコードは機能するはずです。より良い方法は、複数の行を挿入する単一の INSERT クエリを作成することです。

INSERT INTO example (name, age)
VALUES   ('John', 24),   ('Katrina', 21),   ('Michael', 22),   ('Hui Ling', 25),   ('Catherine', 29)

個別のクエリでループする必要がある場合は、パフォーマンス上の理由から、準備済みステートメントを使用する必要があります。

その他の問題:

  1. あなたはSQL インジェクションに対して無防備です。
  2. 推奨されなくなった mysql 関数を使用しています。代わりに PDO または mysqli を使用してください。
于 2012-09-24T11:08:16.607 に答える