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);
?>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/07/18 22:07:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154スマートフォンから投稿

ポイント100pt

二つ目のループが、一つ目のループの内側に入っていて、変数 $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>";
?>
id:m0r1y055

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

2014/07/18 22:23:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません