PHP初心者です。
困っています。どなたか分かる方いらっしゃたら、教えてください。
DBを検索して抽出結果を画面に表示します。
その結果にラジオボタンを付けて選択し、修正を行えるようにしたいのです。
(検索結果の件数は検索条件によって変動します)
条件による検索結果を表示、までは出来たのですが、
ラジオボタンを付加することが出来ません。
下記がソースです。
このソースですと
echo "<input type="radio" name="edit" value=".$row["name"]." />修正";
この部分がエラーだというメッセージが表示されます。
この部分は色々変えてみましたが上手くいきません。
よろしくお願い致します。
<html>
<head>
//<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="./css/color.css">
<title>○○学習サイト</title>
</head>
<body>
<?php
// 接続設定(サーバ/データベース/ユーザ/パスワード)
$sv = "localhost";
$dbname = "jitec";
$user = "root";
$pass = "";
// データベースに接続する
//mb_language("uni");
$conn = mysql_connect($sv, $user, $pass) or die("接続エラー");
mysql_select_db($dbname) or die("接続エラー");
// データを取り出す
$sql = "SELECT name, setsumei, kubun FROM word WHERE (name LIKE '%".$_POST['s_word']."%' and setsumei LIKE '%".$_POST['s_word2']."%' and kubun LIKE '%".$_POST['s_word3']."%')";
//$sqlを表示
var_dump($sql);
$res = mysql_query($sql, $conn) or die("データ抽出エラー");
//SELECTコマンドによって取得した全データは$resという変数に格納される。
// mysql_query()関数でデータを取り出すSQLを実行します。
// 取り出したデータを表示する
echo "<table border=\"1\">";
echo "<tr>";
echo "<td>単語名</td>";
echo "<td>説明文</td>";
echo "<td>試験区分</td>";
echo "<td>修正する</td>";
echo "</tr>";
//$rowという変数に1行ずつ取り出す↓
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
echo "<tr>";
echo "<td>".$row["name"]."</td>";
echo "<td>".$row["setsumei"]."</td>";
echo "<td>".$row["kubun"]."</td>";
echo "<td>";
echo "<form>";
echo "<input type="radio" name="edit" value=".$row["name"]." />修正";
echo "</form>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
// 接続を解除する
mysql_close($conn);
?>
<form method="POST" action="edit.php">
<input type="submit" value="修正" name="sub2">
</form>
</body>
</html>
No.1ベストアンサー
- 回答日時:
全体的なフローはみてませんが、文法エラーについてはクォーテーションを
エスケープしていないからでしょうね
>echo "<input type="radio" name="edit" value=".$row["name"]." />修正";
echo "<input type=\"radio\" name=\"edit\" value=\"".$row["name"]."\" />修正";
ありがとうございます!
この行のエラーは解消され、ラジオボタンが現れました。
なので最初の質問に関しては解決したのですが、
検索結果が
条件を入れても入れなくても全件抽出されてしまいます。
このラジオボタンを追加する前は
検索条件に合った結果が抽出されていました。
もし
理由がお分かりになりましたら教えて頂けますでしょうか。
No.2
- 回答日時:
文法エラーです。
ダブルクォーテーションをエスケープしてください。echo "<input type=\"radio\" name=\"edit\" value=\"".$row["name"]."\" />修正";
ありがとうございます!
この行のエラーは解消され、ラジオボタンが現れました。
なので最初の質問に関しては解決したのですが、
検索結果が
条件を入れても入れなくても全件抽出されてしまいます。
このラジオボタンを追加する前は
検索条件に合った結果が抽出されていました。
もし
理由がお分かりになりましたら教えて頂けますでしょうか。
No.3
- 回答日時:
>条件を入れても入れなくても全件抽出されてしまいます。
>このラジオボタンを追加する前は
>検索条件に合った結果が抽出されていました。
ラジオボタンにかかわる部分で全件抽出になるような記述はありません。
s_wordの1~3をきちんとPOSTで渡ってないんじゃないですか?
そもそもラジオボタンを1個フォームにいれてあるという意図がわかりません
チェックしたかどうかであればチェックボックスでしょう。
それとこのラジオボタンはサブミットされるような記述になっていません。
このラジオボタンを設置する意味がまったくないように見受けられます
そうだと思います。
これから直していきたいと思います。
>s_wordの1~3をきちんとPOSTで渡ってないんじゃないですか?
検索結果が複数あってもその中から一つだけに対して
修正を入れられるようにしたいと
考えていましたのでラジオボタンと考えました。
でも仕様も見直す必要がありそうなので検討したいと思います。
ありがとうございます。
>そもそもラジオボタンを1個フォームにいれてあるという意図がわかりません
>チェックしたかどうかであればチェックボックスでしょう。
No.4
- 回答日時:
なかなか混乱されていますね。
あなたが作ろうとしているサイトは多分、2つ、または3つのページに
分ける事ができるはずです。
検索ページ(検索フォームページ、検索結果ページ)
修正ページ
しかしながら、あなたのコードには1つ分のコード(検索結果ページ)しか
書かれていませんので、質問に答えるのは至難の技に思えます。
そこでヒントをいくつかお答えしておきます。
まずはフォームに対する誤解から。
あなたは多分、修正ボタンを押せば、<form>~</form>で囲まれた所全部が
まとめて送信されると思ってますよね。
でも実際には、修正ボタンの箇所
<form method="POST" action="edit.php">
<input type="submit" value="修正" name="sub2">
</form>
の部分のデータしか送信されません。いっしょにラジオボタンのデータも送信したいなら、
ラジオボタンと修正ボタン全体を1つのフォームで囲う必要があります。
tableタグの前に
<form method="POST" action="edit.php">
を移動して、ラジオボタンを挟んでいるフォームタグは余計なので削除します。
echo "<form>";//削除
echo "<input type='radio' name='edit' value='".$row['name']."' />修正";
echo "</form>";//削除
これで、あなたがフォームの受け取り先に指定した edit.php(修正ページ)へ、
どのデータを修正したいのかを伝える事ができるようになります。
修正ページedit.phpでは、$_POST['edit']でラジオボタンの値を受け取って、
検索のためのSQL文を作ります。この時、$_POSTや$_GETで受け取った値を
そのままSQL文に代入するのは御法度です。
必ずエスケープします。
//mysqlの場合
$name = mysql_real_escape_string($_POST['edit']);
$sql = "SELECT name, setsumei, kubun FROM word WHERE name='$name'";
これで、修正したいデータが取得できます。
ちなみに、データベースから取得したデータや、$_POST, $_GETなどの値を
をそのままecho文で出力するのも御法度です。
最低限htmlspecialcharsを通して表示しましょう。
$row_name = htmlspecialchars($row['name'],'ENT_QUOTES');
echo "<input type='radio' name='edit' value='".$row_name."' />修正";
あとは修正用のフォームとコードをedit.phpに書いていきます。
編集用のページには条件分岐が必要になります。
どのフォームから送られたデータなのかをしっかり分けて書く必要があります。
検索結果ページから送られたデータなのか、それとも
「修正を保存する」ボタンを押して送られたデータなのか。
と、このくらいで。
どうぞ頑張って下さい。
ありがとうございます。
色々こちらの意図を読んでいただき、感謝いたします。
超初心者で
そんなのも分かっていないのか、
というレベルでして恐縮なのですが、
書いて頂いたこと、かなり参考になりそうですので、
これから頑張ってみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php ログイン 1 2022/11/01 00:24
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
dbに登録したデータをphpのプル...
-
checkboxクリック時、SQLを実行...
-
エクセルVBAについて
-
検索結果をgoogleのように数件...
-
抽出結果に番号を振る方法につ...
-
PHPで[]の使い方について
-
DBからSelectしたレコードのデ...
-
MySQLに保存した画像を表示したい
-
mysqlから取得した配列をカンマ...
-
実行時エラー3131 FROM 句の構...
-
MySQLでデータベースにデータin...
-
ResultSetインターフェイスでの...
-
VBAをつかってクエリの情報を抽...
-
Pro*Cの構文エラー
-
会員登録したらメールが送られ...
-
JAVA SQLServerException 列名 ...
-
csvをDBへ読み込んだら、NULLが...
-
DAOでデータベースを二つ開くに...
-
mysql_queryでDB検索をしたいが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
php テーブルが作成できない
-
dbに登録したデータをphpのプル...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
DBで検索結果に該当するデータ...
-
文字化けが解決できません。お...
-
SELECT結果から動的にコンボボ...
-
checkboxクリック時、SQLを実行...
-
PHPでMySQLデータを呼び出し、w...
-
while文の中にwhile文を書きた...
-
sortable ギブアップです…助け...
-
重複レコードをグループ化した...
-
PHP と MySQL でテーブルの行数...
-
PHPでMySQLのデータを2次元配...
-
mysql>PHPにデータ表示、10件ご...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
ラジオボタンをループすること...
-
PHP+MySQLでの配列のinsert文に...
おすすめ情報