2017-11-12 14 views
1

PHPのmysqlからデータを取得します。チェックボックスと数量(rqty)を持つすべてのアイテムを入力値としてリストし、ユーザーが数量を入力できるようにします。しかし、配列内の対応する入力値(rqty)とチェックボックスを関連付けることはできません。最初のチェックボックスを選択して数量を入力するとうまくいきますが、他のチェックボックスを選択して数量を入力すると、データベースで更新されません。私のコードは以下の通りです:対応する入力値を持つチェックボックス配列

<?php 
If (isset($_REQUEST['submit1'])!='') { 
foreach($_POST['itm'] as $key=>$itm) { 
$odate=date("Y-m-d H:i:s"); 
$rqty=$_POST['rqty'][$key]; 
$itm=$_POST['itm'][$key]; 
$sql1="insert into table (itemtype,itemname,qty ,retdate,reason) select itemtype, itemname, '$rqty', '$odate', 'Return' from stock where itemname='$itm'; 
mysql_query($sql1); 
} 
} 
?> 
<p> 
<form action="" method="post" name="form1"> 
<?php 
$query3 = "SELECT id, category, itemtype, itemname, qty, status FROM stock where location='godown'"; 
$comments3 = mysql_query($query3); 
$qty = mysql_num_rows($comments3); 
echo "Consumable Items: " . $qty; 
print "<table class='blue'> 
    <thead> 
<tr> 
<td width=100>Return</td> 
<td width=100>Category</td> 
<td width=100>Item Type</td> 
<td width=100>Item Name</td> 
<td width=100>Available Qty.</td> 
<td width=100>Return Qty.</td> 
<td width=100>Status</td> 
</tr> 
</thead>"; 

while($row1 = mysql_fetch_assoc($comments3)) 
{ 
$it=$row1['itemname']; 
print "<tbody>"; 
print "<tr>"; 
print "<td><input type='checkbox' name='itm[]' value='$it'></td>"; 
print "<td>" . $row1['category'] . "</td>"; 
print "<td>" . $row1['itemtype'] . "</td>"; 
print "<td>" . $row1['itemname'] . "</td>"; 
print "<td>" . $row1['qty'] . "</td>"; 
print "<td><input type='text' name='rqty[]' placeholder='Enter Qty' /></td>"; 
print "<td>" . $row1['status'] . "</td>"; 
print "</tr>"; 
print "</tbody>"; 
} 
print "</table>"; 
?> 
<input type='submit' name='submit1' value='Return' /> 

すべてのrqty []が空白のデータでポストされているのがわかります。しかしitmの場合、選択されているものだけが正しいものになっています。

ためにあなたのループのだ

enter image description here

+0

非難され、安全でない** mysql *関数**を使用しないでください。 PHP 5.5(2013年)以降** **非推奨となり、PHP 7(2015年)では完全に削除されました。代わりにMySQLiまたはPDOを使用してください。 2.あなたは** [SQL Injections](http://php.net/manual/en/security.database.sql-injection.php)**を広く読んでおり、実際には[Prepared Statements](http: /php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用してください。これは上記のMySQLiまたはPDOを使用する場合に使用できます。 –

答えて

0

foreach($_POST['itm'] as $key=>$itm) {... 

と入力 "ITM" はチェックボックスである:例えば<input type='checkbox' name='itm[]' value='$it'></td>

、フォーム、テーブル内の5つのチェックボックスを持っている場合だけですそれらのうち2つが確認されました - その後、配列$_POST['itm']には2つのアイテムしかありません。

この問題を解決するには$_POST['itm']の代わりに$_POST['rqty']をループする必要があります

+0

私はforeach($ _ POST ['rqty']を$ key => $ rqty)に変更しました $ it POST = '[itm']エラーが発生しました(通知:未定義オフセット:2〜7) [$ key]; 合計8個の商品がリストされており、2個の商品をチェックしました。上記のエラーを除いて何も起こらなかった。 – Krish

1

私はこれに対する解決策を受けなかったので、アプローチを変更しました。各チェックボックスを個別に処理し、配列を使用しないようにしました。フォームリストに送信ボタンを追加し、さらに処理される他のPHPページに必要な値を投稿しました。

関連する問題