2016-12-22 5 views
0

このコードの最後には、このオファーの下に表示されているように別のコードが実行されたことをクリックすると、[Accept Offer]ボタンが表示されます。PHP foreachは複数回コードを実行します

たとえば、このプロジェクトには3人の入札者があり、bidder_idとwriter_bidを3回使用するので、foreachを使用してdivでロードしても問題ありませんが、これらの変数は技術的には動作しますが、私はそれらを引っ張る行からの入札を格納しません、それはちょうど最後の行からデータを取ります、それは私のヘッダーのこのスレッドの下部にコードを配置する場合です。

私はそれを3回実行するループの中に入れたとき、3回閉じる必要があるというエラーメッセージが表示されたら、データを取り出すデータベーステーブルに3つの行があることがわかりました。

これを防ぐには、コードがforeachループ内にあるときに一度ロードするか、正しいwriter_bidとbidder_idを格納するようにしてください。実行する必要があり、それは私が代わりにforeachループの内部、又はヘッダ内に配置するかどうか、問題を生じるコードの下

   <div class="WB-Bottom-block lefts"> 
       <?php $getBidders=" AND project_id=$project_id"; $bidders=getBidder($getBidders); foreach($bidders as $bidder) { 
        $bidder_id=$bidder['writer_id']; 
        $writer_bid=$bidder['writer_bid']; 
       ?> 

       <div class="findwriters_boxes"> 

        <div class="findwriters_right"> 
         <div style="float:right;margin-top:6px;width:170px;"> 
          <input type="hidden" name="writer_bid" id="writer_bid" value="<?php echo $writer_bid; ?>" /> 
          <input type="hidden" name="bidder_id" id="bidder_id" value="<?php echo $bidder_id; ?>" /> 
          <input type="submit" class="homebtn11" name="submit" id="submit" value="Accept Offer"/> 
         </div> 
        </div> 
       </div><?php } ?> 

私は、入力フィールドにそれを保存しようとしましたので、ヘッダーはページのリフレッシュ/ボタンのクリックでそれを引き出すことができるようにしました。

<?php if(isset($_POST['todo']) && $_POST['todo']=='submit_project') { 
$balance=get_client_balance_info($current_user->ID); 
$writer_bid=$_POST['writer_bid']; 
$bidder_id=$_POST['bidder_id']; 

if($balance >= $_POST['writer_bid']) { 
    global $wpdb; 
    $sql3="UPDATE `wp_project` SET `writer_id` = '".$bidder_id."' WHERE `id` =". $project_id; 
    $wpdb->query($sql3); 
    $sql4="UPDATE `wp_project` SET `price` = '".$writer_bid."' WHERE `id` =". $project_id; 
    $wpdb->query($sql4); 
    $sql5="UPDATE `wp_project` SET `status` = '2' WHERE `id` =". $project_id; 
    $wpdb->query($sql5); 
    $success_msg="You accepted a bid, the money will be deducted from your account."; 
} 

else $fail_msg="Your balance is not sufficient."; 

答えて

2

私はあなたがあなたが異なる入力が、同じ名前でbidder_idを入れている、今追加されている各div要素のためのフォームを作るべきだと思います。
最後の入力が得られます。行idで入力を指定したり、フォームを区切ったり、入力名を配列として指定したりする方がよいでしょう。
私はこれがあなたを助けてくれることを願っています。

+0

フォームの開始タブはドキュメントの先頭にあるので、これで助けてくれるかどうか確認しています。ご意見ありがとうございます。 – Dennis12345

+1

あなたは素晴らしいです、私は入力を持っている最後のdivの周りに

のタグを移動し、今それは動作します、それは簡単かもしれないと思っていたでしょう。感謝万円。 – Dennis12345

+0

あなたは歓迎です:) –

0

私はこのようなディアルSelimiの助けを借りて、それを修正:私のフォームと値=「submit_project」のタグがあらゆる場所に散らばっていたことになる前に

<div style="float:right;margin-top:6px;width:170px;"> 
<form action="" name="frmeditor" method="post" id="frmeditor" > 
    <input type="hidden" name="todo" id="todo" value="submit_project" /> 
    <input type="hidden" name="writer_bid" id="writer_bid" value="<?php echo $writer_bid; ?>" /> 
    <input type="hidden" name="writer_id" id="writer_id" value="<?php echo $writer_id; ?>" /> 
    <input type="submit" class="homebtn11" name="submit" id="submit" value="Accept Offer"/> 
</form> 

関連する問題