データがリストされたページ(listup.php)に編集ボタンと削除ボタンを表示し、チェックBOXにチェックがあるデータを、編集フォーム、削除フォーム(delete.php)へそれぞれ受け渡すphpを作成しています。

編集ボタン機能は完成したものの、削除ボタン機能を追加する場合、listup.phpをどのように記述し直せばよいのでしょうか。<(_"_)>

〜listup.php〜

<form action="input.php" method="post">
<table id="table" border="1">
<?php $ct=0;
while($data = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td><input type='checkbox' name='chk[]' value='".$data["id"]."'></td>";
echo "<td>".$data['id']."</td>";
echo "<td>".$data['name']."</td>";
echo "</tr>";
$ct++;
}
?>
</table>
<input type='submit' name='update' value=' 編 集 ' />
</form>

<form action="delete.php" method="post" >
<input type='submit' name='delete' value=' 削 除 ' />
</form>

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


〜delete.php〜

<?php
$dataCount = count($_POST['chk']);

for($ct=0; $ct<$dataCount; $ct++) {
$sql = "delete from A where id = '". $_POST["chk"][$ct] ."'";

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

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

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

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

ベストアンサー

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント95pt

質問にある list.php に追記してみました。元のコードを、なるべく残すようにしてあります。

<form action="input.php" method="post">
<table id="table" border="1">
<?php
    $ct=0;
    while($data = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td><input type='checkbox' name='chk[]' value='".$data["id"]."'></td>";
        echo "<td>".$data['id']."</td>";
        echo "<td>".$data['name']."</td>";
        echo "</tr>";
        $ct++;
    }
?>
</table>
<input type='submit' name='update' value=' 編 集 ' />
<input type='submit' name='delete' value=' 削 除 ' />    <!-- ★ こちらに移動しました -->
</form>

<!-- ★ input type='submit' のボタンは、form の中にまとめます
<form action="delete.php" method="post" >
<input type='submit' name='delete' value=' 削 除 ' />
</form>
-->

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

<!-- ★ この script を追記します -->
<script>
window.onload = function () {
    var inps = document.getElementsByTagName("input");
    for (var i = 0 ; i < inps.length ; ++i) {
        if (inps[i].type == "submit") {
            inps[i].onclick = function () {
                    // ★ submit ボタンと、action に指定する URL の対応です
                    var action_map = {
                        "update" : "input.php",
                        "delete" : "delete.php",
                    };
                    this.form.action = action_map[this.name];
                };
        }
    }
}
</script>
<!-- ★ ここまで -->

ポイントは、みっつ。

  • ふたつの input type='submit' のボタンは、ひとつの form の中に入れる
  • ページの読み込みが完了したときに、input type='submit' のボタンをクリックしたときの処理を登録する
  • ボタンをクリックされたら、そのボタンの name に対応した URL で form の action を書き換える

name='update' のときの input.php は、form に既に書かれているので、同じ値で書き換えるのは、処理としては冗長ですが、処理の考え方、という意味で、敢えて書いています。
ボタンの数が増えたとき(ないかもしれませんが)でも、考え方は一緒です。

なお、ボタンの探し方や、処理の登録の仕方には、色々な書き方があります。
ここで示したのは、あくまでも一例ということで。

id:m0r1y055

a-kuma3
まさに、私が教えていただきたかったJavaScriptです! 他にもいろいろやり方があるようで、様々なQ&Aを参考にやってみましたが、なかなかうまくいかなかったので、大変助かりました。今夜はぐっすり眠れそうです(笑)。丁寧にわかりやすい回答をしてくださり、ありがとうございました♬*1

*1:o( ' ▽ ' )o

2014/07/24 23:13:27

その他の回答1件)

id:pogpi No.1

回答回数428ベストアンサー獲得回数59

ポイント5pt

削除ボタンのonclickでfunctionを呼んで、そのfunctionで編集フォームのactionを変えて、編集ボタンをクリックすればできると思います。

他4件のコメントを見る
id:pogpi

idとかname属性は、適宜追加してください。削除ボタンは、FORMタグがいらなくなります。

2014/07/23 08:22:23
id:m0r1y055

pogpiさん
別の方からベストアンサーを頂きましたので、これで質問を終了します。いろいろ有り難うございました。*1

*1:<(_"_)>

2014/07/24 23:08:16
id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント95pt

質問にある list.php に追記してみました。元のコードを、なるべく残すようにしてあります。

<form action="input.php" method="post">
<table id="table" border="1">
<?php
    $ct=0;
    while($data = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td><input type='checkbox' name='chk[]' value='".$data["id"]."'></td>";
        echo "<td>".$data['id']."</td>";
        echo "<td>".$data['name']."</td>";
        echo "</tr>";
        $ct++;
    }
?>
</table>
<input type='submit' name='update' value=' 編 集 ' />
<input type='submit' name='delete' value=' 削 除 ' />    <!-- ★ こちらに移動しました -->
</form>

<!-- ★ input type='submit' のボタンは、form の中にまとめます
<form action="delete.php" method="post" >
<input type='submit' name='delete' value=' 削 除 ' />
</form>
-->

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

<!-- ★ この script を追記します -->
<script>
window.onload = function () {
    var inps = document.getElementsByTagName("input");
    for (var i = 0 ; i < inps.length ; ++i) {
        if (inps[i].type == "submit") {
            inps[i].onclick = function () {
                    // ★ submit ボタンと、action に指定する URL の対応です
                    var action_map = {
                        "update" : "input.php",
                        "delete" : "delete.php",
                    };
                    this.form.action = action_map[this.name];
                };
        }
    }
}
</script>
<!-- ★ ここまで -->

ポイントは、みっつ。

  • ふたつの input type='submit' のボタンは、ひとつの form の中に入れる
  • ページの読み込みが完了したときに、input type='submit' のボタンをクリックしたときの処理を登録する
  • ボタンをクリックされたら、そのボタンの name に対応した URL で form の action を書き換える

name='update' のときの input.php は、form に既に書かれているので、同じ値で書き換えるのは、処理としては冗長ですが、処理の考え方、という意味で、敢えて書いています。
ボタンの数が増えたとき(ないかもしれませんが)でも、考え方は一緒です。

なお、ボタンの探し方や、処理の登録の仕方には、色々な書き方があります。
ここで示したのは、あくまでも一例ということで。

id:m0r1y055

a-kuma3
まさに、私が教えていただきたかったJavaScriptです! 他にもいろいろやり方があるようで、様々なQ&Aを参考にやってみましたが、なかなかうまくいかなかったので、大変助かりました。今夜はぐっすり眠れそうです(笑)。丁寧にわかりやすい回答をしてくださり、ありがとうございました♬*1

*1:o( ' ▽ ' )o

2014/07/24 23:13:27

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

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

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

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

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