プロが教えるわが家の防犯対策術!

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>

A 回答 (4件)

全体的なフローはみてませんが、文法エラーについてはクォーテーションを


エスケープしていないからでしょうね

>echo "<input type="radio" name="edit" value=".$row["name"]." />修正";


echo "<input type=\"radio\" name=\"edit\" value=\"".$row["name"]."\" />修正";
    • good
    • 0
この回答へのお礼

ありがとうございます!
この行のエラーは解消され、ラジオボタンが現れました。
なので最初の質問に関しては解決したのですが、
検索結果が
条件を入れても入れなくても全件抽出されてしまいます。
このラジオボタンを追加する前は
検索条件に合った結果が抽出されていました。
もし
理由がお分かりになりましたら教えて頂けますでしょうか。

お礼日時:2011/08/24 17:24

文法エラーです。

ダブルクォーテーションをエスケープしてください。

echo "<input type=\"radio\" name=\"edit\" value=\"".$row["name"]."\" />修正";
    • good
    • 0
この回答へのお礼

ありがとうございます!
この行のエラーは解消され、ラジオボタンが現れました。
なので最初の質問に関しては解決したのですが、
検索結果が
条件を入れても入れなくても全件抽出されてしまいます。
このラジオボタンを追加する前は
検索条件に合った結果が抽出されていました。
もし
理由がお分かりになりましたら教えて頂けますでしょうか。

お礼日時:2011/08/24 17:24

>条件を入れても入れなくても全件抽出されてしまいます。


>このラジオボタンを追加する前は
>検索条件に合った結果が抽出されていました。

ラジオボタンにかかわる部分で全件抽出になるような記述はありません。
s_wordの1~3をきちんとPOSTで渡ってないんじゃないですか?

そもそもラジオボタンを1個フォームにいれてあるという意図がわかりません
チェックしたかどうかであればチェックボックスでしょう。
それとこのラジオボタンはサブミットされるような記述になっていません。
このラジオボタンを設置する意味がまったくないように見受けられます
    • good
    • 0
この回答へのお礼

そうだと思います。
これから直していきたいと思います。

>s_wordの1~3をきちんとPOSTで渡ってないんじゃないですか?

検索結果が複数あってもその中から一つだけに対して
修正を入れられるようにしたいと
考えていましたのでラジオボタンと考えました。
でも仕様も見直す必要がありそうなので検討したいと思います。
ありがとうございます。

>そもそもラジオボタンを1個フォームにいれてあるという意図がわかりません
>チェックしたかどうかであればチェックボックスでしょう。

お礼日時:2011/08/29 10:38

なかなか混乱されていますね。



あなたが作ろうとしているサイトは多分、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に書いていきます。

編集用のページには条件分岐が必要になります。
どのフォームから送られたデータなのかをしっかり分けて書く必要があります。
検索結果ページから送られたデータなのか、それとも
「修正を保存する」ボタンを押して送られたデータなのか。

と、このくらいで。
どうぞ頑張って下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
色々こちらの意図を読んでいただき、感謝いたします。
超初心者で
そんなのも分かっていないのか、
というレベルでして恐縮なのですが、
書いて頂いたこと、かなり参考になりそうですので、
これから頑張ってみたいと思います。

お礼日時:2011/08/29 10:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!