住所録を作成し、プルダウンとキーワードで作成しましたがうまくいきません。実行すると最後に記載のエラーがでます。教えてください。フリーワードだけの検索はうまくいきましたが。
---kensaku.php---
<?php
extract($_POST);
$dfrom = sprintf("%04d-%02d-%02d",$year1,$mon1,$date1);
$dto = sprintf("%04d-%02d-%02d",$year2,$mon2,$date2);
if($kai == ''){
}else{
$jouken = "(ocrdate between '$dfrom' and '$dto')";
if ($kai <> "*"){
$jouken = "$jouken and kai like '%$kai%'";
}
if ($fuk <> "*"){
$jouken = "$jouken and fuk like '%$fuk%'";
}
if ($jic <> "*"){
$jouken = "$jouken and jic like '%$jic%'";
}
if ($key1 <> ""){
$jouken = "$jouken and (keyword like '%$key1%' or detail like '%$key1%' or treat like '%$key1%' or remark like '%$key1%')";
if (key2 <> ""){
$jouken = "$jouken and (keyword like '%$key2%' or detail like '%$key2%' or treat like '%$key2%' or remark like '%$key2%')";
if (key3 <> ""){
$jouken = "$jouken and (keyword like '%$key3%' or detail like '%$key3%' or treat like '%$key3%' or remark like '%$key3%')";
}
}
}
mysql_connect('localhost','***','****');
mysql_select_db('****');
$sql = "select * from jyusho where $jouken";
$result = mysql_query($sql);
$num = mysql_num_rows($result);
if ($num == 0){
echo "該当データがありません<br>";
exit;
}else {
echo "<table border=\"1\">\n";
echo "<tr>\n";
echo "<th>加入日</th>\n";
echo "<th>加入地域<br></th>\n";
echo "<th>加入県</th>\n";
echo "</tr>\n";
while($row = mysql_fetch_array($result)){
$id = $row["id"];
echo "<tr>";
echo "<td align=\"right\"><a href=\"meisai.php?id=$id\">",$id,"</a>\n";
echo "</td><td>";
echo $row["kai"];
echo "</td><td>";
echo $row["fuk"];
echo "</td><td>";
echo $row["jic"];
echo "</td></tr>";
}(ここまで170行目、次は、/htmlとなっています)
---ここまで---
エラーは、「Parse error: parse error, unexpected $end in c:\(省略)\kensaku.php on line 171」
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> echo"$sql = "select * from jyusho where $jouken"";
> するということでしょうか?
えっと、質問にあるソース上では、
> $dfrom = sprintf("%04d-%02d-%02d",$year1,$mon1,$date1);
からSQL文が作成されており、最終的に
> $sql = "select * from jyusho where $jouken";
とすることで実際に実行されるSQL文が生成されています。
なので、
> $sql = "select * from jyusho where $jouken";
のあとに
echo $sql;
exit;
とでもすれば、実行されるSQL文がブラウザ上に表示されるので、
phpMyAdminやコンソール上から直接MySQLにアクセスし、出力された
SQL文を実行すれば、それが正常なSQLかどうかが確認出来るという
事になります。(正しいかどうかという指標は『SQLの文法上』。)
この方法は、自分で記述したPHPプログラムのSQL部分が正しく
処理されなかった時に有効だと思います。
MySQLとPHPは別に密接な関係があるわけではありませんから、
『MySQLが正常に動作する環境下で実行して、正常である事が
確認できれば、自分で作成したソース上のSQL文は正しい』
という保証を得る事が出来ます。
更に、その環境下で実行することにより、結果も一瞬で返って
きますから、取得できたデータなどを確認する事も簡単に
行えます。
> $jyukenという、語句を使用して検索がやりやすくしたのですが
> 使わない方法は難しいのでしょうか?
$joukenという変数は、色々なパターンがある為に、一度変数に
文字列として各SQL文を格納し、動的SQLを生成しているわけなので、
その方法を否定するつもりはありません。
これだけ条件分岐がある中、一時的に変数に格納しない方法を
取るのは得策とは言えませんしね。
この回答への補足
naktak様
>とでもすれば、実行されるSQL文がブラウザ上に表示されるので、
実行してみました。
エラーは出ませんが、検索結果がでませんでした。
個人的には、最初の日付選択が引っかかっているのかもしれません。
加入日にはyyyy/mm/ddの形式で取り込まれており、検索するときに、
yyyyとmmとddを個別に入れて、何日~何日の間で検索させるようにしているので・・・。
No.2
- 回答日時:
> $sql = "select * from jyusho where $jouken";
> $result = mysql_query($sql);
> $num = mysql_num_rows($result);
$joukenにどういった文字列が入ってくるかは追っていないので
分かりませんが、mysql_num_rows()がエラーになるという事は、
mysqlのリソースとして正しくない可能性があります。
(つまり、mysql_query()で返ってきている値はリソースではなく
false値)
$sqlをecho等してみて、それが実際にmysql上で実行出来るか
確認してみてはいかがでしょうか?
もしくはmysql_connect()時点でしっかりリソースを取得し、
その上でmysql_query()に接続リソースを指定、
mysql_query()後にmysql_error()を実行しても構いません。
この回答への補足
naktak様
>$sqlをecho等してみて、それが実際にmysql上で実行出来るか確認してみてはいかがでしょうか?
実は、サンプルをかき集めて動かしているうちに
ドつぼにはまったわけです。
echo"$sql = "select * from jyusho where $jouken"";
するということでしょうか?
$jyukenという、語句を使用して検索がやりやすくしたのですが
使わない方法は難しいのでしょうか?
No.1
- 回答日時:
if ($num == 0){
echo "該当データがありません<br>";
exit;
}else {
echo "<table border=\"1\">\n";
echo "<tr>\n";
echo "<th>加入日</th>\n";
echo "<th>加入地域<br></th>\n";
echo "<th>加入県</th>\n";
echo "</tr>\n";
while($row = mysql_fetch_array($result)){
$id = $row["id"];
echo "<tr>";
echo "<td align=\"right\"><a href=\"meisai.php?id=$id\">",$id,"</a>\n";
echo "</td><td>";
echo $row["kai"];
echo "</td><td>";
echo $row["fuk"];
echo "</td><td>";
echo $row["jic"];
echo "</td></tr>";
}
elseに対する}が存在しないように伺えますが。
大体PHPで最終行などがエラーと判断される場合、入れ子構造を
ミスしていることが多いと思います。
この回答への補足
naktak様
たしかに「}」が抜けていました。
が、こんどは、
「mysql_num_rows()」がある行が引っかかりましたが・・。
「num」でも大丈夫だと思いましたが・・。
上の続きで、プルダウンの項目があるのですが、
?>
<form action="kensaku.php" method="post">
<table border="0">
<tr>
<b>加入日</b>
</td>
<td>
<?php
$today=getdate();
$yr=$today[year];
$mon=$today[mon];
$dt=$today[mday];
echo "<select name=\"year1\">\n";
for ($i=$yr;$i>=$yr-31;$i--){
echo "<option value=\"$i\"";
if ($i == $yr-1){
echo "selected";
}
echo ">$i</option>\n";
}
echo "</select>年\n";
echo "<select name=\"mon1\">\n";
for ($m=1;$m<=12;$m++){
echo "<option value=\"$m\" ";
if ($m == $mon){
echo "selected";
}
echo ">$m</option>\n";
}
echo "</select>月\n";
echo "<select name=\"date1\">\n";
for ($d=1;$d<=31;$d++){
echo "<option value=\"$d\" ";
if ($d == $dt){
echo "selected";
}
echo ">$d</option>\n";
}
echo "</select>日\n~";
echo "<select name=\"year2\">\n";
for ($i=$yr;$i>=$yr-31;$i--){
echo "<option value=\"$i\">$i</option>\n";
}
echo "</select>年\n";
echo "<select name=\"mon2\">\n";
for ($m=1;$m<=12;$m++){
echo "<option value=\"$m\" ";
if ($m == $mon){
echo "selected";
}
echo ">$m</option>\n";
}
echo "</select>月\n";
echo "<select name=\"date2\">\n";
for ($d=1;$d<=31;$d++){
echo "<option value=\"$d\" ";
if ($d == $dt){
echo "selected";
}
echo ">$d</option>\n";
}
echo "</select>日\n";
?>
</td>
<tr>
<td>
<b>加入地域</b>
</td>
<td colspan="4">
<select name="kai">
<option value="*">すべて</option>
<option value="東部">東部</option>
<option value="西部">西部</option>
<option value="四国">四国</option>
<option value="瀬戸内">瀬戸内</option>
</select>
</td>
</tr>
<tr>
<td>
<b>府県名</b>
</td>
<td colspan="4">
<select name="fuk">
<option value="*">すべて</option>
<option value="徳島県">徳島県</option>
<option value="香川県">香川県</option>
<option value="愛媛県">愛媛県</option>
<option value="高知県">高知県</option>
</select>
</td>
</tr>
<tr>
<td>
<b>キーワード:</b>
</td>
<td colspan="4">
<input type="text" name="key1" size="20">
<input type="text" name="key2" size="20">
<input type="text" name="key3" size="20">
</td>
</tr>
</table>
<br>
<p><input type="submit" value="検索"> <input type="reset" value="クリア"></p>
</form>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
Mac です。ローカルホストの ph...
-
同一のユーザー、同一商品のと...
-
次の時間帯の勝率の合計を求め...
-
mysqlがインストールされている...
-
書籍の内容はまともでしょうか?
-
[1000地域 × 10カテゴリー = 1...
-
データベースの複製の仕方(mysql)
-
下記の問合せを行うクエリを、P...
-
【初歩】ラジオボタンをつかっ...
-
SQL任意に並び替えをしたい
-
SQLです。こんな感じですか?あ...
-
うまくいきません教えてくださ...
-
クエリを教えてください select...
-
テーブル名が可変の場合のクエ...
-
my_itemsテーブルのIDにAUTO_IN...
-
BGMを教えてほしいです!
-
XamppのMySQLへとレコードが登...
-
「最高気温が35度以上の日を猛...
-
「第一回模試の3科目の各得点...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォームから送信した値とMySQL...
-
php+MySqlでの検索ページ
-
プレースホルダを使った複数カ...
-
MySQLからのデータをページに1...
-
pdfファイルの管理システム
-
mysql+php リストボックスにつ...
-
mysql limitページ分割
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
副問合せにLIKE文を使う方法は...
-
ODP.NETのバージョン確認
-
ERROR 1045 (28000) (using pas...
-
like句を使って日本語を検索す...
-
VBAで変数内に保持された二次配...
-
MySQLカラム名は日本語と英数字...
-
INT型は金額の型に使用するべき...
-
プライマリーキーの昇順でソー...
-
Float型の時の計算結果がおかしい
-
RPMのmysqlとmysql-serverの違い
-
ヌル値は記憶容量を必要としな...
おすすめ情報