質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

選択したチェックボックスのみ更新

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 920

t.d_prog

score 9

前提・実現したいこと

ここに質問したいことを詳細に書いてください
phpの練習でDB登録式の計算機を作っています。
チェックボックスの付いている項目だけ計算し、更新できるようにしたいです。

発生している問題・エラーメッセージ

更新しても、テキストボックスに入れた数値が反映されず、DBの最初に登録した数値で表示されます。
エラーは発生しておらず、動作はしております。

//更新・削除処理
if( isset( $_POST["selchk"])) {
    $chk = $_POST["selchk"];
    $max =count($chk);
    //print_r($chk);
    //更新
    if(isset($_POST["koushin"]) && $_POST["db_first"] && $_POST["db_second"] && $_POST["db_method"]){
        $result = mysql_query('SELECT * FROM calculation');
        for($i = 0; $i < $max; $i++){
            list($key, $first_fix) = each($_POST["db_first"]);
            list($key2,$second_fix) = each($_POST["db_second"]);
            list($key3,$method_fix) = each($_POST["db_method"]);

            $db_calnumber = keisan($method_fix,$first_fix,$second_fix);
            $answer_fix = gusukisu($db_calnumber,$first_fix, $second_fix);
            $odd_even_fix = odd_even($db_calnumber);

            $updated = date( "Y/m/d H:i:s", time());

            //更新処理
            $sql = "UPDATE calculation
                    SET updated='".$updated."',first='".$first_fix."',second='".$second_fix."',answer='";.$answer_fix."',method='".$method_fix."',odd_even='".$odd_even_fix."'
                    WHERE id='".$chk[$i]."'";
            $result_flag = mysql_query($sql);
            $result = mysql_query('SELECT * FROM calculation');
        }
    }
    $result_flag = mysql_query($sql);
    if ($result_flag) {
        echo "更新しました";
    }else{
        print(mysql_error());
        //echo "更新に失敗しました<br />";
    }
<table>
    <tr>
        <th><input type="checkbox" name="all" onClick="AllChecked(this);" /></th>
        <th>#</th>
        <th></th>
        <th>答え</th>
        <th>奇/偶</th>
        <th>登録日</th>
        <th>更新日</th>
    </tr>
    <tr>
<?php

//データベースのレコードカウントした結果の数
$recordcount = mysql_num_rows($result);

//取得したデータを順に表示
for($i=1; $i<= $recordcount; $i++) {
    //DBの値から文字列に置換
    $row = mysql_fetch_array($result);
    echo  "<tr>";
    echo  "<td><input type=checkbox name=selchk[] value=".$row["id"]."></td>";
    echo  "<td>".$i."</td>";
    echo  "<td><input type=input name=db_first[] value=".$row["first"]."><input size=1 type=input name=db_method[] value=".$row["method"]."><input type=input name=db_second[] value=".$row["second"]."></td>";
    echo  "<td>".$row["answer"]."</td>";
    echo  $row["odd_even"];
    echo  "<td>".$row["created"]."</td>";
    echo  "<td>".$row["updated"]."</td>";
    echo  "</tr>\n";
}

?>
</tr>
</table>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/09/20 14:50

    コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、コードの一部を抜粋されてもどういう処理をしているのかがわかりません。また、エラーを出力する設定にはされていますか?その上でエラーが出ていたら質問文に追記ください。

    キャンセル

  • kei344

    2016/09/20 15:12

    HTMLもコードです。質問文はコードブロックである必要がありません。

    キャンセル

  • t.d_prog

    2016/09/20 15:32

    正しい表記にできておらず、大変申し訳ございません。

    キャンセル

  • kei344

    2016/09/21 14:22

    まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況をお教えください。

    キャンセル

回答 1

checkベストアンサー

+1

年のためidがずれないように

count=1;
while($row=mysql_fetch_array($MyResult,MYSQL_ASSOC)){
echo <<<eof
<tr>
<td><input type="checkbox" name="selchk[{$count}]" value="{$row["id"]}></td>
<td>{$count}</td>
<td><input type="text" name="db_first[{$count}]" value="{$row["first"]}>
<input size="1" type="input" name="db_method[{$count}]" value="{$row["method"]}">
<input type="input" name="db_second[{$count}]" value="{$row["second"]}"></td>
<td>{$row["answer"]}</td>
<td>{$row["odd_even"]}</td>
<td>{$row["created"]}</td>
<td>{$row["updated"]}</td>
</tr>
eof;
$count++;
}


のような書き方が望ましいです。
ただし、mysql_関数はつかわないこと

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/20 16:21

    ご回答ありがとうございます。
    ご回答いただきました内容の方がすっきりしていてすごく解りやすいです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる