2017-10-20 33 views
2

私はwhileループを持っています。フォーム内にあります。送信ボタンを送信するときに、whileループからすべての行を挿入します。以下はwhileループのコードです。MySQLはwhileループで最後の行のみを挿入します

<form method="POST" action="insert.php" n> 
    <table> 
        <?php       
        $i =0; 
        $link = mysqli_connect('localhost', 'root', '', 'shibu'); 
        $sql = "select `cus_id`, `mobile`, `date`, `time`, 
          sum(`d1` + `d2` + `d3`) as `credit`, 
          from `finale`; 
         $result=mysqli_query($link, $sql); 
         $count = mysqli_num_rows($result); 
         if($count == 0){ 
         ?> 
         <tr> 
         <th><?php echo 'No Records Founds!' .mysqli_error($link); ?></th> 
         </tr> 
         <?php 
         }else{ 
          while($sql_result = mysqli_fetch_assoc($result)){ 
         ?> 
<tr> 
<td><?php echo $i += 1; ?></td> 
<td><input type="text" name="cus_id" value="<?php echo $sql_result['cus_id']; ?>" ></td> 
<td><input type="text" name="mobile" value="<?php echo $sql_result['mobile']; ?>" ></td> 
<td><input type="text" name="date" value="<?php echo $sql_result['date']; ?>" ></td> 
<td><input type="text" name="time" value="<?php echo $sql_result['time']; ?>"</td> 
<td><input type="text" name="credit" value="<?php echo $sql_result['credit']; ?>"></td> 
</tr> 
    <?php 
    } 
    } 
    ?> 
</table> 
<input name="submit" type="submit" /> 
</form> 

これは私の挿入クエリです。

<?php 

$link = mysqli_connect('localhost', 'root', '', 'shibu'); 

$stmt = mysqli_prepare($link, "INSERT INTO single 
       (`cus_id`, `mobile`, `date`, `time`, `credit`) VALUES (?,?,?,?,?)"); 

mysqli_stmt_bind_param($stmt, 'isssi', $cus_id, $mobile, $date, $time, $credit); 

foreach ((array)$_POST['cus_id'] as $i => $cus_id) { 
       $mobile = $_POST['mobile']; 
       $date = $_POST['date']; 
       $time = $_POST['time']; 
       $credit = $_POST['credit']; 

mysqli_stmt_execute($stmt); 
       } 

if(!$stmt){ 
echo "error". mysqli_error($link); 
} 

私はsubmitボタン、only last row entersない行全体を入力すると、私の問題はあります。

私はあなたの助けが大事です。

答えて

3

htmlコードでは、配列として定義された入力名を持つ必要があります。

<td><input type="text" name="cus_id[]" value="<?php echo $sql_result['cus_id']; ?>" ></td> 
<td><input type="text" name="mobile[]" value="<?php echo $sql_result['mobile']; ?>" ></td> 
<td><input type="text" name="date[]" value="<?php echo $sql_result['date']; ?>" ></td> 
<td><input type="text" name="time[]" value="<?php echo $sql_result['time']; ?>"</td> 
<td><input type="text" name="credit[]" value="<?php echo $sql_result['credit']; ?>"></td> 

同様

そして、あなたはループにそれらを必要とするPHPでそれらを使用して、実行INSERTクエリ

foreach ($_POST['cus_id'] as $i => $value) { 
    $cus_id = $_POST['cus_id'][$i]; 
    $mobile = $_POST['mobile'][$i]; 
    $date = $_POST['date'][$i]; 
    $time = $_POST['time'][$i]; 
    $credit = $_POST['credit'][$i]; 

    // Yourinsert query 
} 
+0

良い答え。 MySQLのアクションではなく、フォームからの変数の扱い方です。 – IncredibleHat

+0

名前欄を変更しました。今、 'cus_id'フィールドを除いて、' mobile、date and time'フィールドは単語の 'array'を示し、クレジットフィールドはデータベースの' 1'を示します。 –

+0

print_r($ _ POST)を使用して$ _POSTデータを表示できますか? –

0

だけ

mysqli_stmt_execute 

ライン上のforeachループ、にあなたの

mysqli_stmt_bind_param 

線を移動してください。

+0

mysqli_stmt_bind_paramは、参照することによって割り当てられながら。ループに入れる必要はありません。 – IncredibleHat

+0

Randall、コードで$ mobileが初期化されている場所を確認してください。 bind_paramの後です。それが私が上記で提案した理由です。 – paulz

+0

bind_paramでバインドされた変数に値を代入することは、完全に許容されるmysqliのプリペアドステートメント処理です。実際には、PHPのマニュアルページheheでその方法を実際に示しています:D http://php.net/manual/en/mysqli-stmt.bind-param.php – IncredibleHat

関連する問題