0

これが何か小さいことを願っています。これを数時間くまなく調べて、あらゆる種類のバリエーションを試した後、私はプロにそれを試してみることにしました。データベースを簡単に管理するためのページ設定があります。基本的には、行を更新または削除するだけです。行ごとに、行を更新するためのチェックボックス、削除するためのチェックボックス、データベースからの3列の情報、そして値を変更するためのドロップダウンボックスを備えた2列があります。問題は、ドロップダウンからどの値を選択しても、常に同じ値を投稿することです。print_r($ _ POST)を使用すると、実際には間違った値が返されていることがわかります。さらに苦労することなく、コード:

これは私のページの上部にあります(フォームの投稿自体):

    if(isset($_POST['checkbox'])){
    $product = $_POST['product_choice'];
    $status = $_POST['status_choice'];
    $checkbox = $_POST['checkbox'];
    if(isset($_POST['update'])){
    $update = $_POST["update"];
    }
    $id = "('" . implode( "','", $checkbox ) . "');" ;
    $sql="UPDATE test_orders SET product='$product',status = '$status' WHERE ordNum IN $id" ;
    $result = mysql_query($sql) or die(mysql_error());
      }

そしてフォーム:

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="frmactive" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1">

<!--BUTTONS--> 

<tr>  
<td colspan="6"><input name="update" type="submit" id="update" value="Upate" />
<input name="delete" type="submit" id="delete" value="Delete" /></td>
</tr>


<tr>
<td>&nbsp;</td>
<td colspan="5"><strong>Update multiple rows in mysql with checkbox</strong> </td>
</tr>
<tr>
<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Update?</td>

<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Delete?</td>

<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Order #</td>

<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Name</td>

<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Job Name</td>

<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Product</td>

<td style="background: #ddd; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;">Status</td>


</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>


<tr>
<td align="center"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['ordNum']; ?>"></td>
<td bgcolor="#FF0000" align="center"><input type="checkbox" name="delete[]" id="delete[]" value="<? echo $rows['ordNum']; ?>" /></td>
<td><? echo $rows['ordNum']; ?></td>
<td><? echo $rows['name']; ?></td>
<td><? echo $rows['OrderDesc']; ?></td>
<td>
<select name="product_choice" id="product" style="font-size:10px;">

            <option value="<? echo $rows['product']; ?>" selected="selected"><? echo $rows['product']; ?>
            </option>
            <option value="Color Correction"> Color Correction </option>
            <option value="Basic retouch"> Basic retouch </option>
            <option value="Extensive Retouch"> Extensive Retouch </option>
            <option value="Signature Work"> Signature Work </option>
            <option value="Signature Oil"> Signature Oil </option>
            <option value="Web Design"> Web Design </option>
            <option value="Print Design"> Print Design </option>
            <option value="Other"> Other </option>
          </select>

</td>

<td>
   <select name="status_choice" id="status" style="font-size:10px;">

            <option value="<? echo $rows['status']; ?>" selected="selected"><? echo $rows['status']; ?></option>
            <option value="Order Received"> Order Received </option>
            <option value="in the works"> in the works </option>
            <option value="waiting to upload"> waiting to upload </option>
            <option value="uploading"> uploading </option>
            <option value="ON HOLD"> ON HOLD </option>
            <option value="awaiting decision"> awaiting decision </option>
            <option value="proof sent"> proof sent </option>
            <option value="next invoice"> next invoice </option>
            <option value="waiting images/order"> waiting images/order </option>
            <option value="invoiced"> invoiced </option>
            <option value="complete"> complete </option>
            <option value="paid"> paid </option>
            <option value="making changes"> making changes </option>
          </select>

    </td>

    </tr>



<?php
}
?>
<tr>
<td colspan="6" align="center">&nbsp;</td>
</tr>
</table>
</form>
</td>
</tr>
</table>

これはprint_r($ _ POST);の結果です。ドロップダウンでどのオプションを選択しても。[product_choice]と[status_choice]は常に同じです。

Array ( [update] => Upate [checkbox] => Array ( [0] => 113 ) [product_choice] => Extensive Retouch [status_choice] => Order Received )

助けてくれてありがとう。

****解決済み**** ****友人 から助けまし

4

2 に答える 2

1

問題は、静的な名前のループ内にselectがあることです

<select name="product_choice" id="product" style="font-size:10px;">

したがって、同じ名前の選択ボックスがたくさんあるので、それらは互いに上書きされ、ページの最後の1つだけが正しくなります。それらに一意の名前を付けるか、配列にすることができます。

これはあなたのステータス1と同じです

<select name="status_choice" id="status" style="font-size:10px;">

だから、次のようなことをします

<select name="status_choice[<?=$rows['id']?>]>

次に、結果を取得します。

foreach($_POST['product_choice'] as $key => $product)
{
    $status = $_POST['status_choice'][$key];
    $sql = sprintf('UPDATE test_orders SET product = "%s", status="%s" WHERE ordNum = %s', 
        mysql_real_escape_string($product), mysql_real_escape_string($_POST['status_choice'][$key]), mysql_real_escape_string($_POST['checkbox'][$key]));
    $result = mysql_query($sql) or die(mysql_error());     
}

次に、チェックボックス名をに変更しますcheckbox[<?=$rows['product']?>]

于 2012-08-25T03:22:32.260 に答える
-1

foreachループを開く:

foreach($_POST as $key => $value) {
    if(!is_array($value)) {
        $_POST[$key] = mysql_real_escape_string($value);
    } else {
        foreach($value as $key => $value) {
            $_POST[$key][$key] = mysql_real_escape_string($value);
        }
    }
}

//print_r($_POST);

// * Delete multiple via checkboxes * START *
if(isset($_POST['delete'])) { 
    if(is_array($_POST['delete'])) {
        foreach($_POST['delete'] as $value) { 
            if(intval($value)) {
                echo 'The order number '.$value.' has been deleted';
                $sql_query = mysql_query("DELETE FROM $tbl_name WHERE ordNum = $value"); 
            }
        } 
    }
} elseif(isset($_POST['checkbox'])) {
    if(isset($_POST['product_choice'])) {
        foreach($_POST['product_choice'] as $key => $value) {
            if(intval($key)) {
                $sql_query = 'UPDATE '.$tbl_name.' SET product = "'.$_POST['product_choice'][$key].'", 
                              status = "'.$_POST['status_choice'][$key].'" WHERE ordNum = '.$key;
                echo $result = mysql_query($sql_query) or die(mysql_error()); 
            }
        }
    }
}

そしてドロップダウンボックス:

<td>
<?//php echo $rows['product']; ?>
<select name="product_choice[<?php echo $rows['ordNum']?>] id="product" style="font-size:10px;">
            <option value="<?php echo $rows['product']; ?>" selected="selected"><?php echo $rows['product']; ?></option>
            <option value="Color Correction"> Color Correction </option>
            <option value="Basic retouch"> Basic retouch </option>
            <option value="Extensive Retouch"> Extensive Retouch </option>
            <option value="Signature Work"> Signature Work </option>
            <option value="Signature Oil"> Signature Oil </option>
            <option value="Web Design"> Web Design </option>
            <option value="Print Design"> Print Design </option>
            <option value="Other"> Other </option>
          </select>

</td>

<td>
   <select name="status_choice[<?php echo $rows['ordNum']?>] id="status" style="font-size:10px;">

            <option value="<?php echo $rows['status']; ?>" selected="selected"><?php echo $rows['status']; ?></option>
            <option value="Order Received"> Order Received </option>
            <option value="in the works"> in the works </option>
            <option value="waiting to upload"> waiting to upload </option>
            <option value="uploading"> uploading </option>
            <option value="ON HOLD"> ON HOLD </option>
            <option value="awaiting decision"> awaiting decision </option>
            <option value="proof sent"> proof sent </option>
            <option value="next invoice"> next invoice </option>
            <option value="waiting images/order"> waiting images/order </option>
            <option value="invoiced"> invoiced </option>
            <option value="complete"> complete </option>
            <option value="paid"> paid </option>
            <option value="making changes"> making changes </option>
          </select>

    </td>

于 2012-08-28T19:56:22.483 に答える