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

http://oshiete1.goo.ne.jp/qa3583661.htmlの質問の続きなのですが、条件分岐による検索のプログラムを書きたいのですが、
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\iiko.php on line 61
というエラーが起こってしまいました。
いろいろとPHPのサイトを見て回って考えたのですが、解決策がわかりません。


フォームの構造は
<html>
<head>
<title>abcde</title>
</head>
<body>
<FONT size="4">abcde</FONT>
<form action="iiko.php" method="post">
a<br>
<br>
ある<INPUT type="radio" name="a" value="ある"><br>
ない<INPUT type="radio" name="a" value="ない"><br>
<br>

b<br>
<br>
ある<INPUT type="radio" name="b" value="ある"><br>
少しある<INPUT type="radio" name="b" value="すこしある"><br>
ない<INPUT type="radio" name="b" value="ない"><br>
<br>
c<BR>
ある<INPUT type="radio" name="c" value="ある"><BR>
ない<INPUT type="radio" name="c" value="ない"><BR>
<BR>


d<br>

ある<INPUT type="radio" name="d" value="ある"><br>
ない<INPUT type="radio" name="d" value="ない"><br>
<br>

e<br>
ある<INPUT type="radio" name="e" value="ある"><br>
ない<INPUT type="radio" name="e" value="ない"><br>
<br>


<input type="submit" name="bottun1" value="送信">
</form>
</body>
</html>


検索リストのiiko.phpは、条件を選択すれば、デーブルのデータのID2~4番の人を表示させ様としています。

<html>
<body>
<?php
$a_1 = $_POST["a"];
$b_1 = $_POST["b"];
$c_1 = $_POST["c"];
$d_1 = $_POST["d"];
$e_1 = $_POST["e"];

require_once("DB.php");

$dbUser = "sample";
$dbPass = "password";
$dbHost = "localhost";
$dbName = "sampledb";
$dbType = "mysql";

$dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName";


$conn = DB::connect($dsn);

//接続にしっぱいしたらメッセージを表示して終了します。

if (DB::isError($conn)) {
die($conn->getMessage());
}

$sql = <<<EOS
SELECT * FROM member


if($a_1 == "ある"and $b_1 == "ある"and $c_1 == "ない"and $d_1 == "ある" $e_1== "ある")
{
$sql = $sql . " WHERE id BETWEEN 2 AND 4;";

}
$result = $conn->query($sql);
if (DB::isError($result)) {
die($result->getMessage());
}

$count = $result->numRows();
print "検索結果は".$count."件です。<BR>";


if($count>0){
?>


<TABLE width="450" border="1" cellspacing="0" cellpadding="8">
<TBODY>
<TR><TH>番号</TH><TH>氏</TH><TH>名</TH><TH>年齢</TH></TR>


<?php
while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC))
{

?>
<TR><TD align="center"><?=$rs['id']?></TD>
<TD><?=$rs['last_name']?></TD>
<TD><?=$rs['first_name']?></TD>
<TD align="center"><?=$rs['age']?></TD></TR>
<?php
}
?>
</TBODY></TABLE>
<?php
}
$result->free();
$conn->disconnect();
?>

</body>
</html>
です。

解決策を教えて下さい。
よろしくお願いします。

A 回答 (6件)

exit;の処理はご存知の通り、そこで処理を終了するということです。


つまり、処理を終了させた場所までのソースに画面表示系のものがない場合、画面は真っ白になります。
しかし、画面が真っ白=エラーも出ていない、ということになるので、そこまでのソースに問題はないということにもなりますね。

> DB Error: syntax error

このエラーはSQLの文法ミスの場合に出ます。
SQLの作成が終わったら、

echo $sql;
exit;

を書いてSQL文の表示をして確認をしてみると、何か解決につながるかもしれませんよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にさせていただきます。

お礼日時:2007/12/10 18:25

32行目のif文ですが、エラーの通り、中に『;』がありますね。


if文の判定部分にあってはならない文字なので、消しましょう。

それと、SQLを使わない判別の時は~とおっしゃってますが、SQLはこのソースでは最初から使われています。
SQLの意味やif文の基本的な書き方がわからないようですし、もしかするとtaku3510さんにはまだ、このコーディングは難しいかもしれません。
もう少し簡単なプログラミングから始めると、きっと上達も早いと思いますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そうですね。自分でもちょっと難しいかなっと思っているのですが、本一冊だけを参考には限界があります。
今回はなんとか動くようになりましたが、もっと難しいのになるとしんどいですね。
アドバイスありがとうございました。

お礼日時:2007/12/10 22:49

if($a_1 == "ある" and $b_1 == "ある" and $c_1 == "ない" and $d_1 == "ある" and $e_1== "ある";)



条件の最後に ; が・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
見落としてました。

お礼日時:2007/12/10 22:46

連投になって申し訳ないのですが、ソースを見てふと思ったので。



>$sql = <<<EOS
>SELECT * FROM member

この部分ですが、ヒアドキュメントを使わずに、普通に

$sql = "SELECT * FROM member";

と書いてもよいのではないでしょうか。
もちろん、追加した『EOS;』も外してください。
今の状態だと、SQLの中にif文が入ってしまっているような気がします。

この回答への補足

プログラムを変えてみると、Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\iiko.php on line 32とエラーが出てきました。
if (DB::isError($conn)) {
die($conn->getMessage());
}
$sql = "SELECT * FROM member";
※if($a_1 == "ある" and $b_1 == "ある" and $c_1 == "ない" and $d_1 == "ある" and $e_1== "ある";)※
{
$sql = $sql . " WHERE id BETWEEN 2 AND 4;";
}
$result = $conn->query($sql);
if (DB::isError($result)) {
die($result->getMessage());
}
32は※の行なので、IF文がおかしいみたいです。
SQLを使わない判別の時は、このIF文で動いたのですが、SQLを使う時は、何か変えなければいけないのでしょうか?

補足日時:2007/12/10 18:36
    • good
    • 0
この回答へのお礼

いえいえ、アドバイスありがとうございます。
早速プログラムを書き換えてみます。

お礼日時:2007/12/10 18:35

> DB Error: syntax error


その名の通りDBのエラーでしょう。

connect, query, fetch のどこでエラーが出ているのか
exitで止めたりしながらまずは発生箇所を見極めてください。
デバッグはコードの上達に不可欠だと思いますよ。

この回答への補足

exitを書きながら進めていくと、

$dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName";
$conn = DB::connect($dsn);
※exit;※
$sql = <<<EOS
SELECT * FROM member

と、

$sql = <<<EOS
SELECT * FROM member
if($a_1 == "ある"and $b_1 == "ある"and $c_1 == "ない"and $d_1 == "ある" $e_1== "ある")
{
$sql = $sql." WHERE id BETWEEN 2 AND 4;";
EOS;
※exit;※
$result = $conn->query($sql);
if (DB::isError($result)) {
die($result->getMessage());
}

の二箇所でエラーも何も表示されずに、真っ白になりました。
これは、何をあらわしているのでしょうか?

補足日時:2007/12/10 17:23
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
いろいろと確認してみます。

お礼日時:2007/12/10 17:10

>on line 61



61行目にエラーがあると書いてあります。
60行目のけつに「;」をつけ忘れている可能性があります

この回答への補足

プログラムを以下の※の部分を加えるとParse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\iiko.php on line 61
が消えました。

if($a_1 == "ある"and $b_1 == "ある"and $c_1 == "ない"and $d_1 == "ある" $e_1== "ある")
{
$sql = $sql . " WHERE id BETWEEN 2 AND 4;";

※EOS;※

しかし、DB Error: syntax errorという画面が表示されてしまいました。これは、どこがおかしいのでしょうか?
解決策を教えてください。
よろしくおねがいします。

補足日時:2007/12/10 15:47
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
61行目というう事は※のところがおかしいって事ですよね?
<?php
while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC))
{
?>
※<TR><TD align="center"><?=$rs['id']?></TD>※
<TD><?=$rs['last_name']?></TD>
<TD><?=$rs['first_name']?></TD>
<TD align="center"><?=$rs['age']?></TD></TR>
<?php
}
?>
</TBODY></TABLE>
<?php
}
$result->free();
$conn->disconnect();
?>
</body>
</html>

?>の前などに「;」をつけて見てもエラーが消えません。
「;」をつけるところが間違っているのでしょうか?
根本的に※から下のプログラムの構造がおかしいのでしょうか?

お礼日時:2007/12/10 15:00

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