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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

7032閲覧

submitボタン1つでいくつも処理する方法

a-_.

総合スコア133

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/08/10 06:16

編集2016/09/06 02:23

フォーム内にsubmitボタン1つとラジオボタンを複数設けて、ラジオボタン毎に各処理を行い、その処理開始をsubmitボタンで行うという動作にしたいんですが、submitにname属性を付けるとその属性にしか処理が行われないし、外しても一つの処理しか行われず、if文の式を変更しても全く改善されません

各if文に$_POSTで処理を受け取るためにラジオボタンのname属性を付けてみたんですが、思うような動作になりません

添削お願いします

PHP

1 $link = mysqli_connect($host, $user, $pass, $db) or die("NG"); 2 3 mysqli_select_db($link, "XXX"); 4 5 $sqli = "bbs"; 6 if (isset($_POST["bbs"])) { 7 $sqli = mysqli_real_escape_string($_POST['bbs']); 8 } 9 10 if (isset($_POST['name'], $_POST['comment'], $_POST['bbs']) && !empty($_POST['post']))) { 11 $name = $_POST['name']; 12 $comment = $_POST['comment']; 13 mysqli_query($link, "INSERT INTO XXX (name, comment) VALUES ('$name', '$comment')"); 14 } elseif (isset($_POST['bbs'], $_POST['update'])) { 15 $update = $_POST['update']; 16 mysqli_query($link, "UPDATE XXX SET name = '$name', comment = '$comment' WHERE id = $update"); 17 } else (isset($_POST['bbs'], $_POST['delete'])) { 18 $delete = $_POST['delete']; 19 mysqli_query($link, "DELETE FROM XXX WHERE id = $delete"); 20 } 21 22 $result = mysqli_query($link, "SELECT * FROM XXX"); 23?> 24 25<html> 26 <head> 27 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 28 </head> 29 <body> 30 <form method="post" action=""> 31 <table> 32 <tr> 33 <td> 34 名前:<input type="text" name="name"> 35 内容:<textarea name="comment" cols="30" rows="3"></textarea> 36 <input type="radio" name="bbs" value="post" checked>投稿 37 <input type="radio" name="bbs" value="update">更新 38 <input type="radio" name="bbs" value="delete">削除 39 <input type="submit" value="投稿"> 40 </td> 41 </tr> 42 </table> 43 44<?php 45 while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 46?> 47 48 <table> 49 <input type="checkbox" name="chkid[]" value="<? = $row['$id'] ?>"> 50 <tr> 51 <td>名前: 52 <?php echo $row['name'] ?> 53 </td> 54 </tr> 55 <tr> 56 <td>内容: 57 <?php echo $row['comment'] ?> 58 </td> 59 </tr> 60 </table> 61 62<?php 63 }; 64 mysqli_free_result($result); 65 66 mysqli_close($link); 67?> 68 69 </form> 70 </body> 71</html>

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

同じ間違いをずっと繰り返しているのでよく見なおした方がいいですよ

PHP

1<?PHP 2$id = filter_input(INPUT_POST,'id')?:""; 3$bbs = filter_input(INPUT_POST,'bbs')?:""; 4$name = filter_input(INPUT_POST,'name')?:""; 5$comment = filter_input(INPUT_POST,'comment')?:""; 6$sql=""; 7 8switch($bbs){ 9case "post": 10 $sql="INSERT INTO XXX (name, comment) VALUES ('$name', '$comment')"; 11 break; 12case "update": 13 if($id){ 14 $sql="UPDATE XXX SET name = '$name', comment = '$comment' WHERE id = $id"; 15 } 16 break; 17case "delete": 18 if($id){ 19 $sql="DELETE FROM XXX WHERE id = $id"; 20 } 21 break; 22default: 23 $sql=""; 24 break; 25} 26print $sql; 27?> 28<form method="post" action=""> 29<input type="hidden" name="id" value="123456"> 30名前:<input type="text" name="name" value="test"> 31内容:<textarea name="comment" cols="30" rows="3">test textarea</textarea> 32<input type="radio" name="bbs" value="post" checked>投稿 33<input type="radio" name="bbs" value="update">更新 34<input type="radio" name="bbs" value="delete">削除 35<input type="submit" value="投稿"> 36</form>
  • 投稿と更新・削除はidの取り扱いがまったく違うので本来同じ画面で処理することはありえない
  • $_POST['update']だとか$_POST['delete']などご自身がHTML側から渡してないものを拾おうとしない(idを指定しているつもりになっていますが、どこにもそんなHTMLは書かれていない)
  • nameやcommentなどユーザーから送られてくるデータはすべてmysqli_real_escape_string()してインジェクション対策すること

投稿2016/08/10 06:36

編集2016/08/10 06:38
yambejp

総合スコア114581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a-_.

2016/08/10 08:01

ご回答ありがとうございます 上記コードに書き換えて確認しましたが、以前と同じく「投稿」のみ処理されてしまいます 前回お答えいただいたときもそうですが、<input type="hidden" name="id" value="123456">は何を処理してるのでしょうか あとfilter_inputの三項演算子も同じく何を処理してるのでしょうか
yambejp

2016/08/10 08:26

>以前と同じく「投稿」のみ処理 ラジオボタンで更新や削除を選んで「投稿」ボタンを押すと それぞれUPDATEやDELETEのSQL文が表示されませんか? ><input type="hidden" name="id" value="123456"> 更新や削除をするにはその文書のidを指定しないといけませんよね? (そこの仕様が違うとなると根本から設計がおかしい事になります) なのでhiddenなどでidを先に拾っておいて、更新や削除に利用します。 実際にはidはそのまえに参照する処理が必要があって、そこから プログラムでidを引っ張ってくる必要があります filter_inputと三項演算の関係ですが、これはデフォルト値””を指定しています $id = filter_input(INPUT_POST,'id'); だけだと$_POST["id"]がない場合、NULLが返るのでそれを""に変更しています。 本来filter_input()におけるデフォルト値の提案は $id = filter_input(INPUT_POST,'id',FILTER_DEFAULT,array("options"=>array("default"=>""))); としますが、しちめんどくさいので三項演算子をつかって $id = filter_input(INPUT_POST,'id')?filter_input(INPUT_POST,'id'):""; と書きます。三項演算子の拡張機能で $a?$a:$b(変数$aが理論上trueであれば$aそうでなければ$b) を短縮形で $a?:$bとかけます。 従って $id = filter_input(INPUT_POST,'id')?:""; というのは$_POST['id']に値が設定されればその値を$idに代入、 そうでない($_POST['id']が設定されていない)場合は$idに""を代入しています。 ただし欠点として$_POST['id']に"0"が指定されている場合はfalseとみなされ""に 変換されてしまうので注意ください
guest

0

ここまでコードを書けるなら、ラジオボタンとsubmitの動作については、ググれば解決すると思います。
ただ、上記に記載されているコードを見る限り、今後も同様の初歩的な誤りと、ご自身のスキルアップにはつながらないと思いますので、正直に書かせていただくと、
まずは、作業毎に分けるべきです。
上記の記述だと、HTMLでviewの表示を行いながら、phpにて条件分岐を行っており、且つSQLを叩いています。
この状態では、間違い個所を見つけるのに中々見つからないと思います。

まずは思い切って、4つの作業に分けましょう。

① phpにて条件分岐を行う。
② 必要に応じたSQLにてデータを取得する。
③ 取得したデータをphpに設定する。
④ HTMLにて、表示を行う。

作業を完全に切り分けることで、ひとつひとつの動作を確認できますよね。
恐らく、この確認動作を行えるようになれば、submitなんかは、簡単に解決できますよ。

投稿2016/08/10 09:22

ShinjiOhishi

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそもFormのサブミットはフォーム名(name)に依存するので、複数の処理がしたかったら
条件を定義すればいい。

もうひとつ言うなら、フレームワーク使いましょう

投稿2016/08/10 06:23

wgt_cosmos

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a-_.

2016/08/10 06:35

ご回答ありがとうございます >複数の処理がしたかったら条件を定義すればいい その条件定義が分からなくて質問いたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問