人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

No1.phpから配列データをsessionで受け渡した後、MySql db に for loop で update するNo2.phpを作成しました。
No2.php上で、1番目のloopでupdateを実行し、2番目のloopでテーブルにechoしてみたら、echoはうまくいきましたが、dbには1列目データしかupdateされませんでした。全列をupdateするには、No2.phpをどのように記述すべきか教えてください。<( _ " _ )>

〜No1.php〜

<?php
echo "<table id='test' border='1'>";

$dataCount=count($_SESSION['key']);
for($ct=0; $ct<$dataCount; $ct++) {
echo "<tr>";
echo "<td>".$_SESSION['a'][$ct]."</td>";
echo "<td>".$_SESSION['b'][$ct]."</td>";
echo "</tr>";
}
echo "</table>";
?>

〜No2.php〜

<?php
$dataCount=count($key);

for($ct=0; $ct<$dataCount; $ct++) {
$sql = "update DbTable set A = '".$a[$ct]."', B = '".$b[$ct]."' where key = '".$key[$ct]."'";

$result = mysqli_query($link, $sql);

if(!$result){
echo "SQL文の発行に失敗しました<br>";
exit();
}

echo "<table id='test' border='1'>";
echo "更新を完了しました";

for($ct=0; $ct<$dataCount; $ct++) {
echo "<tr><td>".$a[$ct]."</td><td>".$b[$ct]."</td></tr>";
}
echo "</table>";
}

mysqli_free_result($result);
mysqli_close($link);
?>


●質問者: m0r1y055
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●100ポイント ベストアンサー

二つ目のループが、一つ目のループの内側に入っていて、変数 $ct がカウントアップされてしまってます。
二つ目のループを、一つ目のループの外側に出してください。



No2.php にコメントを入れました。

<?php
 $dataCount=count($key);

 for($ct=0; $ct<$dataCount; $ct++) {
 $sql = "update DbTable set A = '".$a[$ct]."', B = '".$b[$ct]."' where key = '".$key[$ct]."'";

 $result = mysqli_query($link, $sql);

 if(!$result){
 echo "SQL文の発行に失敗しました<br>";
 exit();
 }

 echo "<table id='test' border='1'>";
 echo "更新を完了しました";

 // ★このふたつ目のループが、ひとつ目の内側に入ってる
 for($ct=0; $ct<$dataCount; $ct++) {
 echo "<tr><td>".$a[$ct]."</td><td>".$b[$ct]."</td></tr>";
 }
 // ★このループを抜けたときには、$ct == $dataCount になってる
 echo "</table>";
 }

 mysqli_free_result($result);
 mysqli_close($link);
?>


No2.php で、ふたつ目のループ(というか、<table> を出力するロジック)を、ひとつ目のループの外に出します。

<?php
 $dataCount=count($key);

 for($ct=0; $ct<$dataCount; $ct++) {
 $sql = "update DbTable set A = '".$a[$ct]."', B = '".$b[$ct]."' where key = '".$key[$ct]."'";

 $result = mysqli_query($link, $sql);

 if(!$result){
 echo "SQL文の発行に失敗しました<br>";
 exit();
 }

 }

 mysqli_free_result($result);
 mysqli_close($link);

 // ★ひとつ目のループの外に出す
 echo "<table id='test' border='1'>";
 echo "更新を完了しました";

 for($ct=0; $ct<$dataCount; $ct++) {
 echo "<tr><td>".$a[$ct]."</td><td>".$b[$ct]."</td></tr>";
 }
 echo "</table>";
?>

m0r1y055さんのコメント
a-kuma3さん ありがとうございます!教えていただいた通りに修正したら、一発で全てのデータを更新することができました? 結構悩んでいたので、とても助かりました!! 丁寧にわかりやすく回答してくださり有り難うございました?<( ^ _ ^ )>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ