ごく最近PHPとmysqlを勉強しだした初心者です。

PHPでDBの検索フォームを作ろうとしているのですが、どうしてもわからないので質問させていただきました。

検索フォームに電話番号を入れると、該当する人の情報を表示させるようにしたいと思ってます。


私の持っている本では、SQLの検索を行うにはSELECT句を使い

  SELECT フィールド名 FROM テーブル名 WHERE 条件文;

という風にあって、条件文がid=1とかの定数で指定したものしかありません。


検索フォームに入力された数値($_POSTの値)を条件文にいれて、検索フォームで入力された電話番号を検索するようにできますか?
もしできないなら、どのような形で作ればよいでしょうか?

贅沢ですが、できれば簡単に解説もしていただけると非常に助かります。

ご教授の程、何卒よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

> もし電話番号に該当者がいない場合は


> 「該当者が存在しません」

$stmt->fetch で条件に該当する件数文だけのループを回していますから、
このループ回数が0回だった時が「該当者が存在しない」時ということになります。
それを数える変数処理でも入れておけばいいでしょう。
あと、私の書いたコードでは、事前にテーブルヘッダを出力していますが、これは該当なしの時は出力不要なので、ちょっと順番を変えて

---ここから---
print "<table><tr><th>id</th><th>c_id</th><th>name</th><th>address</th>\n";
while ($stmt->fetch()) {
print "<tr><td>$id</td><td>$c_id</td><td>$tel</td><td>$address</td></tr>\n";
}
---ここまで---
の部分が

---ここから---
$count = 0;
while ($stmt->fetch()) {
if ($count == 0) print "<table><tr><th>id</th><th>c_id</th><th>tel</th><th>name</th><th>address</th>\n"; #最初の一回だけ出力
print "<tr><td>$id</td><td>$c_id</td><td>$tel</td><td>$name</td><td>$address</td></tr>\n";
$count++;
}
if ($count == 0) print "該当者が存在しません";
---ここまで---
といった感じになるかと思います。
    • good
    • 0
この回答へのお礼

mtaka2様

何から何までありがとうございました!!!
大変勉強にもなりました。

今後も勉強していきたいと思います。
ありがとうございました!!

お礼日時:2011/04/20 18:50

> bind_result エラー


すみません、引数を間違えてました。

> id,c_id,name,tel,addressというフィールドを用意している。

にあわせて、
> $result = $stmt->bind_result($id, $c_id, $name, $tel, $address);
にしてください。
    • good
    • 0
この回答へのお礼

お世話になっております。

うまくいきました!!!
本当にありがとうございました!


あつかましいかも知れないのですが、もし教えていただけるのであれば
最後に1つだけ教えてください。

もし電話番号に該当者がいない場合は
「該当者が存在しません」
というようなメッセージを表示しようとしたら、おそらくifを使って
検索結果がfalseだったら
echo '該当者が存在しません';
というようになると思うのですが、色々試してみたのですが、エラー表示
ばかりになってうまくいきません…

もし気が向いたら教えてください。
本当にありがとうございました!!!

お礼日時:2011/04/20 18:18

> それで最初に教えていただいた記述で試してみたのですが、


>特にエラーは出ないのですが結果が表示できません。。。

回答1のコードは、SQLを発行するところまでです。結果を取得・表示する部分がありません。
そこまで含めると下記のようになります。(うまく動かなかった時の原因究明のため、前半部もエラーチェックのコードを追加しています)

tel_search.php
---ここから---
$db = new mysqli('localhost', 'root', '','torys');
if ($db->connect_error) die("DB接続エラー:".$db->connect_error);
$sql = "SELECT * FROM `customer` WHERE `tel` = ?";
$stmt = $db->prepare($sql);
if (!$stmt) die("prepare エラー:".$db->error);
$result = $stmt->bind_param("s", $_POST['tel_no']);
if (!$result) die("bind_param エラー:".$db->error);
$result = $stmt->execute();
if (!$result) die("execte エラー:".$db->error);
$result = $stmt->bind_result($id, $c_id, $tel, $address);
if (!$result) die("bind_result エラー:".$db->error);
print "<table><tr><th>id</th><th>c_id</th><th>name</th><th>address</th>\n";
while ($stmt->fetch()) {
print "<tr><td>$id</td><td>$c_id</td><td>$tel</td><td>$address</td></tr>\n";
}
$stmt->close();
$db->close();
---ここまで---


> -> はどういった意味なのか教えていただけないでしょうか?
「->」は、クラスのインスタンス参照を示す演算子です。

1行目の「$db = new mysqli…」で、mysqli 型のデータ(インスタンス)を作成しており、
「$stmt = $db->prepare(…)」は、mysqli型のデータ$db に対して、メソッド(関数) prepare を呼び出しています)
クラスについてはここで簡単に語れるようなものではありませんので、詳しくはPHPの「クラス」について勉強してください。
    • good
    • 0
この回答へのお礼

何度もありがとうございます。
そして何度もすみません。

早速教えていただいた記述を試してみたのですが、

Warning: mysqli_stmt::bind_result() [mysqli-stmt.bind-result]: Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\tel_search.php on line 21
bind_result エラー:

というエラーになってしまいます。
21行目は
$result = $stmt->bind_result($id, $c_id, $tel, $address);
の部分です。

私の設定とかがまずいのでしょうか?
本当にすみません。

何卒よろしくお願い致します。

お礼日時:2011/04/20 14:44

> 丁寧に解説までしていただいたのですが、現在DBはmysqlでDBへのアクセスはphpmyadminを


使用しています。


phpMyAdmin は、Web経由で直接MySQLのDBを読み書きするツールです。
PHPのアプリケーションから phpMyAdmin を使うことはできません。

PHP から MySQL のDBにアクセスする方法にはいくつかあります。その代表的なのが「mysql」「mysqli」「PDO」です。

mysql: http://www.php.net/manual/ja/book.mysql.php
mysqli: http://php.net/manual/ja/book.mysqli.php
PDO: http://www.php.net/manual/ja/book.pdo.php

どれを使っても PHP プログラムからMySQLのDBにアクセスできます。
どれが使えるからはPHPサーバのインストール状況次第です。

mysqlは一番古いライブラリであり、設計仕様が古いのであまりお薦めできません。mysqliはmysqlの改良型ライブラリ。
PDOはMySQLにもアクセス可能な、MySQLに限定されない汎用のDBアクセスライブラリです。
今後の事を考えると、出来ればPDOかmysqliを使うべきです。
    • good
    • 0
この回答へのお礼

mtaka2様

ご回答ありがとうございます。
mtaka2様の仰る通りにとりあえずmysqliで作成するようにしました。

それで最初に教えていただいた記述で試してみたのですが、
特にエラーは出ないのですが結果が表示できません。。。

現在の状況がこちらです。

・xamppでsqliが使えるように設定(phpmyadminでPHP 拡張: mysqliと表示されている)
接続環境は host:localhost user_name:root password:なし
・torysというDBにcustomerというテーブルを作っていて、id,c_id,name,tel,addressという
 フィールドを用意している。(とりあえず2名分だけ登録されている)

index.htmlのフォーム
<form id="tel" name="tel" method="post" action="tel_search.php">
<dl>
<dt>
<label for="tel_no">電話番号</label>
</dt>
<dd>
<input name="tel_no" type="text" id="tel_no" size="20" maxlength="255" style="ime-mode:disabled" />
</dd>
</dl>
<input type ="submit" value="検索する" />
</form>

tel_search.php
(htmlの部分は割愛)
<?php
$db = new mysqli('localhost', 'root', '','torys');
$sql = "SELECT * FROM `customer` WHERE `tel` = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $_POST['tel_no']);
$stmt->execute();
?>
(htmlの部分は割愛)

という状態です。

これで、customerテーブルに登録された人の情報を電話番号から探して表示するにはどうしたら
良いでしょうか?


あともしよければ
$stmt->execute();
の部分などの -> はどういった意味なのか教えていただけないでしょうか?

本当にど素人で申し訳ありません。
よろしくお願い致します。

お礼日時:2011/04/20 13:22

まともなWebアプリなら、「prepared statement」を使います。



DBへのアクセス方法に何を使われているのかわかりませんが、例えばmysqliなら、

---ここから---
$db = new mysqli(…);
$sql = "SELECT * FROM `テーブル名` WHERE `tel` = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $_POST[tel]);
$stmt->execute();
---ここまで---

といった感じです。
「prepared statement」を使うと、SQL文で「?」にしている部分について、その内容を別途指定できるのです。
上述の記述なら、`tel`=? の ? の部分に $_POST[tel] の値を入れてDB検索が行われます。

mysqliで説明しましたが、PDO などでも関数名は違いますが同様の記述が可能です。
mysqli: http://www.php.net/manual/ja/mysqli.prepare.php
PDO: http://www.php.net/manual/ja/pdo.prepare.php

mysql は、prepared statement が使えませんので、出来れば mysqli か PDO を使いましょう。


なお、その手のアプリの参考例としてよく見受けられる手軽な方法として
$sql = "SELECT * FROM `テーブル名` WHERE `tel` = `".$_POST[tel]."`";
のように、変数を埋め込んだSQL文字列を生成するというものがありますが、
こういうやりかたは、絶対に行ってはいけません。
「SQLインジェクション」という、不正なパラメータを指定することでDBに侵入・改竄などを行うという攻撃の穴になってしまいます。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

丁寧に解説までしていただいたのですが、現在DBはmysqlでDBへのアクセスはphpmyadminを
使用しています。

この環境でやろうと思うと難しいのでしょうか?
会社で使うとかいうものでもなく、簡略化したようなものでも大丈夫なのですが…

もし簡単なやり方があればそちらも教えていただけると大変助かります。

お礼日時:2011/04/20 09:27

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHPとMySQL 検索フォームを作りたい。

PHPとMySQLを使って商品一覧を作りました。

◆商品一覧表 http://pips.chu.jp/0/07/index.php
<?php
function connect() {
return new PDO("mysql:dbname=★.★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM shohin");
$shohin = $st->fetchAll();
?>   
<TABLE border="1">
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>分類</th>
<th>販売単価</th>
<th>仕入単価</th>
<th>登録日</th>
</tr>
<?php foreach ($shohin as $g) { ?>
<tr>
<td><?php echo $g['id'] ?></td>
<td><?php echo $g['name'] ?></td>
<td><?php echo $g['bunrui'] ?></td>
<td class="td-price"><?php echo number_format ($g['htanka']) ?></td>
<td class="td-price"><?php echo number_format ($g['stanka'])?></td>
<td><?php echo $g['day'] ?></td>
</tr>
<?php } ?>
</TABLE>


◆特定の商品一覧表 http://pips.chu.jp/0/07/irui.php

$st = $pdo->query("SELECT * FROM shohin");の部分を
$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='衣類' ");に変更すると
分類が衣類だけの表になります。

◆入力フォーム http://pips.chu.jp/0/07/form.php

<form action = "kensaku.php" method="post">
   分類:<input type="text" name="bunrui">
   <input type="submit" name="submit" value="検索">
</form>
こんな感じの入力フォームを作り、分類名を入力すると、その分類名の一覧表に反映されるようにしたいです。

◆検索された一覧表 http://pips.chu.jp/0/07/kensaku.php

<?php
function connect() {
return new PDO("mysql:dbname=★.★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='?' ");
$shohin = $st->fetchAll();
?>   
<TABLE border="1">
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>分類</th>
<th>販売単価</th>
<th>仕入単価</th>
<th>登録日</th>
</tr>
<?php foreach ($shohin as $g) { ?>
<tr>
<td><?php echo $g['id'] ?></td>
<td><?php echo $g['name'] ?></td>
<td><?php echo $g['bunrui'] ?></td>
<td class="td-price"><?php echo number_format ($g['htanka']) ?></td>
<td class="td-price"><?php echo number_format ($g['stanka'])?></td>
<td><?php echo $g['day'] ?></td>
</tr>
<?php } ?>
</TABLE>


「入力フォーム」と「検索された一覧表」のソースの書き方がわかりません。
どのようにけば実現するでしょうか。
まだ初心者なので、本やサイトを調べながら見よう見まねでやっています。
具体的に、どの部分を書き換えればよいか教えていただければ有難いです。

よろしくお願いします。

PHPとMySQLを使って商品一覧を作りました。

◆商品一覧表 http://pips.chu.jp/0/07/index.php
<?php
function connect() {
return new PDO("mysql:dbname=★.★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM shohin");
$shohin = $st->fetchAll();
?>   
<TABLE border="1">
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>分類</th>
<th>販売単価</th>
<th>仕入単価</th>
<t...続きを読む

Aベストアンサー

一番手っ取り早いのは
$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='?' ");

$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='" . $_POST["bunrui"] . "' ");
にすれば動きませんか?
(入力フォームに何かしら文字を入れないと、何も出力されないでしょうけど…)

あとは
・SQL実行前に入力値(POST値)のチェックを行う
・SQL実行時はプレースホルダを使う
・DB接続時、SQL実行時のエラーチェックを行う
を実装すれば、とりあえず大丈夫かと。

※全然的外れなことを言ってましたらスミマセン。

QLIKE述語/SQLとPHPを使った検索フォーム

SQLを使って、「名前」(カラム名=name)と「コメント」(カラム名=comment)のテーブルを作りました。

このテーブルに対して、検索フォームを作りました。
このフォームに名前を入力すると、該当する行が検索されるようにしました。

◆入力フォーム form.php

<form action = "kensaku.php" method="post">
名前:<input type="text" name="name">
<input type="submit" name="submit" value="検索">
</form>


◆検索結果 search.php
<?php
function connect() {
return new PDO("mysql:dbname=★;host=★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' ");
$address = $st->fetchAll();
?>
<?php foreach ($table as $g) { ?>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 14.0.8.0 for Windows">
<p>名前<?php echo $g['name'] ?></p>
<p>コメント<?php echo $g['comment'] ?></p>
<?php } ?>


ここで、該当する文言の一部でも検索できるようにしたいです。
※例えば、「山田太郎」を検索する場合に「山」だけでも検索できるように。

LIKEを使えばよいかと思い、
$st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' ");を
$st = $pdo->query("SELECT * FROM table WHERE name LIKE='%" . $_POST["name"] . "%' ");
と、記述してみましたがだめでした。

どのように記述すればよいか教えていただけないでしょうか。
何卒お願いします。

SQLを使って、「名前」(カラム名=name)と「コメント」(カラム名=comment)のテーブルを作りました。

このテーブルに対して、検索フォームを作りました。
このフォームに名前を入力すると、該当する行が検索されるようにしました。

◆入力フォーム form.php

<form action = "kensaku.php" method="post">
名前:<input type="text" name="name">
<input type="submit" name="submit" value="検索">
</form>


◆検索結果 search.php
<?php
function connect() {
return new PDO("mysql:dbname=★;host=★","★",...続きを読む

Aベストアンサー

>ご指摘の通りに書き換えましたが、検索できませんでした。

一番高い可能性としては、POSTされたデータのキャラクターコードと
DBに格納されたキャラクターコードが異なるということです

この手のテストをする場合はキャラクターコードでの差異が出づらい
「英数字のみ」でまずテストをすることをお勧めします。
ここで動作確認ができたら次の段階として日本語検索を試してください

プリペアドステートメントについてはphpマニュアルなどご一読ください

http://www.php.net//manual/ja/pdo.prepared-statements.php

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qphpで複数の検索語を検索対象にしたい

環境:php+mysql

やりたいこと:
半角や全角スペースの入った複数の検索語を検索対象にしたいです。
例:りんご みかん で検索されたキーワード

現在のコードは以下のとおりです。。
長くなるので、検索結果数だけの処理までを書いてます。
$sql の箇所で for文など使って繰り返し処理をさせればよいのかと思い
google先生で検索しましたが、、どうにも該当しそうなサイトが見つからず
アドバイスいただきたく質問させていただきました。


単語1つの場合だけ検索結果が正しく動きますが、
現在は、検索フォームに「りんご みかん」と入れると 検索結果ゼロになります。
これはこれで正しいのですが、、
希望は「りんご みかん」と入れると りんごとみかんを含む検索をしてほしい
と考えてます。

<?php
$keywords = $_GET["key"];

//検索キーワードのデータが何件あるか?

$sql="select * from item where title like '%".$keywords."%' or Description like '%".$keywords."%' or category like '%".$keywords."%' ";
$datas = mysql_query($sql , $db );
$num = mysql_num_rows($datas);
echo "検索結果は "."<span style=\"font-size:30px;\">".$num."</span>"."件です。<br>";
}

?>

環境:php+mysql

やりたいこと:
半角や全角スペースの入った複数の検索語を検索対象にしたいです。
例:りんご みかん で検索されたキーワード

現在のコードは以下のとおりです。。
長くなるので、検索結果数だけの処理までを書いてます。
$sql の箇所で for文など使って繰り返し処理をさせればよいのかと思い
google先生で検索しましたが、、どうにも該当しそうなサイトが見つからず
アドバイスいただきたく質問させていただきました。


単語1つの場合だけ検索結果が正しく動きますが、
現在は、検索フォ...続きを読む

Aベストアンサー

http://blog.olivesystem.com/824.html

QプルダウンメニューにDBの内容を表示させる

いつもお世話になっております。
度々ですが躓きましたので皆様の知恵をお借りしたいと思います。
どうぞ宜しくお願い致します。

題名にもある通り、HTMLのプルダウンメニューで選択する項目をDBから取得し、他のDBに登録させたいです。
以下、処理時のコードです。
$result = pg_query($con, "SELECT project FROM project_tbl");
$col = pg_fetch_array($result);
<SELECT NAME="project">
<OPTION VALUE="$col['project']">
</SELECT>

但し、このコードではDBの内容を取得する事が出来ませんでした。
問題点はこれ以外に
・DBに複数行のデータがある時、複数行を取得出来ない
・仮にプルダウンで選択させる事が出来たとしても、登録ボタンを押せば
選択した内容が消えてしまう
と考えています。

どれに対しても解決策が見出せないので、皆様のお力をお借りしたいと
考えています。 宜しくお願いします。

いつもお世話になっております。
度々ですが躓きましたので皆様の知恵をお借りしたいと思います。
どうぞ宜しくお願い致します。

題名にもある通り、HTMLのプルダウンメニューで選択する項目をDBから取得し、他のDBに登録させたいです。
以下、処理時のコードです。
$result = pg_query($con, "SELECT project FROM project_tbl");
$col = pg_fetch_array($result);
<SELECT NAME="project">
<OPTION VALUE="$col['project']">
</SELECT>

但し、このコードではDBの内容を取得する事が出来ませんでし...続きを読む

Aベストアンサー

#1です。
まず、記述が足りなかった行なのですが
<OPTION VALUE="<?php $data['project'] ?>">

<OPTION VALUE="<?php $data['project'] ?>"><?php echo $data['project'] ?></OPTION>
です。すみません。
失礼な事をお聞きしてすみませんが、
お使いのDBはPostgreSQLですよね?
PostgreSQLならpg_query・pg_fetch_array
MYSQLならmysqy_query・mysql_fetch_array
で同等の扱いでいけるのではと思ったのですが。。
私の持っている環境はMYSQLしかないのでそちらの環境では同じロジックで関数を
pg_query → mysqy_query
pg_fetch_array → mysql_fetch_array
に変えただけで正常に取得できました。
同じ使い方ではいけないのでしょうかね。。
お役に立てず、すみませんです。

QPHPからMySQLへの検索

PHPからデータベースの検索について勉強をはじめたばかりで初歩的な質問かと思いますが過去ログを読んでも解決しなかったため質問いたします。

たとえばデータベースに教授名や授業名などを収納しておいてPHPで教授名を入力すると授業名等が表示されるようにするスクリプトを作ろうと思っているのですがうまくいきません。

少なくともMySQLで『田中』という教授名は入っているので検索すれば出てくるはずなのですが検索件数が0件になってしまいます。
テキストボックスに入力された情報を受け渡すところに原因がある気がするのですが原因はわかりませんでした。
おわかりになりましたらご教授ください
http://iskiso3.hustle.ne.jp/test.php


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>テスト</title>
</head>


<form action="test.php" method="post">
教授名を入力してください<br>
<input type="text" name="namae" size="30">

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

<?php

$name = $_POST['namae'];

$con = mysql_connect("mysql3.naid.jp" , "ID" , "PASS") or
die ('DB Connection Error= '. mysql_error());
mysql_select_db("iskiso3", $con) or die ('DB Connection Error= '.
mysql_error());

$sql = "select * from jugyou where kyouju like "*$name*" ";
$result = mysql_query($sql,$con);
if ( $result == $FALSE ) { die("Search Result: 0 items"); }
$num = mysql_num_rows($result);


print "<table><tr><td>科目名</td><td>教授名</td><td>内線</td></tr>";
for ($i=0; $i<$num; $i++) {
$r = mysql_fetch_row($result);
print "<tr><td>$r[0]</td><td>$r[1]</td><td>$r[2]</td></tr>";
}
print "</table>";

?>
</body>
</html>

PHPからデータベースの検索について勉強をはじめたばかりで初歩的な質問かと思いますが過去ログを読んでも解決しなかったため質問いたします。

たとえばデータベースに教授名や授業名などを収納しておいてPHPで教授名を入力すると授業名等が表示されるようにするスクリプトを作ろうと思っているのですがうまくいきません。

少なくともMySQLで『田中』という教授名は入っているので検索すれば出てくるはずなのですが検索件数が0件になってしまいます。
テキストボックスに入力された情報を受け渡すところ...続きを読む

Aベストアンサー

$sql = "select * from jugyou where kyouju like "*$name*" ";

$sql = "select * from `jugyou` where `kyouju` like '%{$name}%' ";
としてみてください。

ただし、'%・・・%'という書式はスピードを期待できません。

Q検索時の選択内容を保持する方法

質問失礼致します。

PHPで
・テキスト
・ラジオボタン
・チェックボックス
が複数入り混じった検索システムを作っています。

なんとか形になって検索の形はできたのですが、
必要な項目を検索し結果画面に映った際に
入力したテキスト・ラジオ・チェックボックスの内容が初期化されてしまいます。


検索した結果、テキストの方はインプット時に
<input type="text" name="name" size="50" value="<?= $_POST['name'] ?>" >
とすることで、結果画面にある検索システムの入力内容は保持できたのですが、

・ラジオ および ・チェックボックス の内容の保持を
なんとかまとめて設定することはできないでしょうか?


検索はしましたが、初心者なこともあり検索ワードがいまいち的を得てないのか、
考えている答えになかなかたどり着けておりませんので、
この場を借りて質問の方させていただいた次第でございます。


ご存じの方いらっしゃいましたら、是非ともご教授お願い致します。

Aベストアンサー

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう
私の場合こんな処理をしています。
(実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが)

<?
//checkbox
if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked";
if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked";

//radio
if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked";

//select
if(isset($_REQUEST["test_d"])) $selected["test_d"][$_REQUEST["test_d"]]=" selected";

print <<<eof
<form>
<input type="checkbox" name="test_a" value="1"{$checked["test_a"]}>A
<input type="checkbox" name="test_b" value="1"{$checked["test_b"]}>B
<input type="radio" name="test_c" value="1"{$checked["test_c"][1]}>C-1
<input type="radio" name="test_c" value="2"{$checked["test_c"][2]}>C-2
<input type="radio" name="test_c" value="3"{$checked["test_c"][3]}>C-3
<select name="test_d">
<option value="">---</option>
<option value="1"{$selected["test_d"][1]}>D-1</option>
<option value="2"{$selected["test_d"][2]}>D-2</option>
<option value="3"{$selected["test_d"][3]}>D-3</option>
</select>
<input type="submit" value="go">
</form>
eof;
?>

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう
私の場合こんな処理をしています。
(実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが)

<?
//checkbox
if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked";
if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked";

//radio
if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked";

//select
if(isset($_REQUEST["test_d"])) $selected["test_d"][$_...続きを読む

QPHPでフォームからデータDBに書き込むサンプル

PHPで、フォームから入力されたデータをMySQLのDBへ書きこみ、次画面でHTML内に入力されたデータ表示するようなサンプルプログラム等、どこかに公開されてないでしょうか。
若しくは、ご存知の方、教えて頂ければ幸いです。

1、フォームへデータ入力
2、サブミットを押す。
3、DBへデータを書き込み。
4、HTML内にデータを表示する。

というような流れ。

Aベストアンサー

書いてみました。
MySQL環境が無く、テストしていないので分かりませんが、
タブン動くと思いますよ^^

フォーム表示 → 登録ボタンクリック → データベース登録 → データベース検索 → 検索結果のHTMLでの表示

詳しい人ツッコミお願いします!

<!-- ここからヘッダー部分です -->
<html>
<head>
<title>テストスクリプト</title>
</head>
<body>
<!-- ここまでヘッダー部分です -->

<?php

# フォームからPOSTデータが送信されていない場合の処理
# 意味は"もしregという名前のPOSTデータが無かったら?"
if(!$_POST['reg']){

# HTMLで入力フォームを表示(送信ボタンクリックでこのスクリプト自身にPOST)
print <<< html
MySQLへ登録してそれをHTMLで表示するスクリプト
<form action="$PHP_SELF" method="post">
<input type="text" name="reg">
<input type="submit" value="登録">
</form>
html;

# regと言うPOSTデータが送信されてきたら以下の処理
}else{

# データベースに接続(アドレス・ポート番号・ユーザー名・パスワードを環境に合わせて書き換える)
$dbcon = mysql_connect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード");

# データベースを選択(データベース名を環境に合わせて書き換える)
mysql_select_db("データベース名");

# SQL文を用意(登録用)
# 意味は"$_POST['reg']というデータをテーブル名と言うテーブルに登録します"
$sql_reg = "insert into テーブル名 values('" . $_POST['reg'] . "')";

# データを登録
$result_reg = mysql_query($sql_reg);

# 登録に成功したら以下の処理
# 意味は"もし$result_regが成功したら?"
if($result_reg){

# 参照用SQL文を用意(テーブル名を環境に合わせて書き換える)
# 意味は"テーブル名というテーブルの全てのカラムを検索します"
$sql_sel = "select * from テーブル名";

# 登録したデータを参照する
$result_sel = mysql_query($sql_sel);

# 登録データの参照に成功したら以下の処理
# 意味は"もし$result_selが成功したら?"
if($result_sel){

# 参照したデータを全部表示(カラム名を環境に合わせて書き換える)
while ($item = mysql_fetch_array($result_sel)){
print $item['カラム名'] . "<BR>";
}

# データベース接続を切断
mysql_close($dbcon);

# 登録データの参照に失敗したら以下の処理
}else{

# エラーメッセージを表示
print "データの参照に失敗しました。";

# データベース接続を切断
mysql_close($dbcon);

}

# 登録に失敗したら以下の処理
}else{

# エラーメッセージを表示
print "登録に失敗しました";

# データベース接続を切断
mysql_close($dbcon);

}

}

?>

<!-- ここからフッター部分です -->
</body>
</html>
<!-- ここまでフッター部分です -->

参考URL:http://lcl.web5.jp/prog/phpdb.html

書いてみました。
MySQL環境が無く、テストしていないので分かりませんが、
タブン動くと思いますよ^^

フォーム表示 → 登録ボタンクリック → データベース登録 → データベース検索 → 検索結果のHTMLでの表示

詳しい人ツッコミお願いします!

<!-- ここからヘッダー部分です -->
<html>
<head>
<title>テストスクリプト</title>
</head>
<body>
<!-- ここまでヘッダー部分です -->

<?php

# フォームからPOSTデータが送信されていない場合の処理
# 意味は"もしregという名前のPOS...続きを読む

QプルダウンメニューでValue値をPHPへの受け渡しができません

こんばんは。

HTML(apache)+MySQL+PHPの連携で、プルダウンメニュ
ー2つとテキストボックス2つの入力内容をPHPにデー
タとして渡し、それをキーワードにして、データベー
スの検索をする、という処理をさせようと思い、PHP
にデータを渡すためのタグを書いています。

http://ns1.php.gr.jp/pipermail/php-users/2002-December/012011.html

を参考に、テキストボックス2つの内容をPHPに渡すこ
とはできたのですが($_POST関数で渡しています)、
プルダウンメニューで選択した場合のvalue値を、PHP
に渡す処理ができず、行き詰っています。

http://www.big.or.jp/~mio/ga/ht/htref/ht_ref_optio.htm

で、プルダウンメニューで選択した場合のvalue値を
渡すことは可能と思い、タグを書きましたが、PHPで
データをダンプさせると何も表示されませんでした。
つまりはPHPにはデータが渡されていない状態で、HTM
Lタグレベルでの問題という事が分かり、タグの勉強
もしましたが、option部分の記述は間違っていないの
では?、と思っています。

ではform actionの、データを送信する送信ボタンの
記述で足りないところがあるのでは、と思い、調べた
のですが解決方法が見つかりません。
どなたかご教授いただけましたら幸いです‥
宜しくお願い申し上げます。

クライアント環境はWin2000、IE6.0
サーバーはRedHat9.0でPHPは4.2.2です。

こんばんは。

HTML(apache)+MySQL+PHPの連携で、プルダウンメニュ
ー2つとテキストボックス2つの入力内容をPHPにデー
タとして渡し、それをキーワードにして、データベー
スの検索をする、という処理をさせようと思い、PHP
にデータを渡すためのタグを書いています。

http://ns1.php.gr.jp/pipermail/php-users/2002-December/012011.html

を参考に、テキストボックス2つの内容をPHPに渡すこ
とはできたのですが($_POST関数で渡しています)、
プルダウンメニューで選択した場合のvalue値を、PHP
...続きを読む

Aベストアンサー

この場合、
<form> タグの位置を変えるだけで動作します。
<select>タグの前に移動させてください。
PHP4.0.6で動作確認済みです。
JavaScript使うまでもなかったですね。失礼しました。
=== 以下ソース ===

<html>
<body>
<form action="yamaha0.php" method="post"> <!-- ここに移動 -->

<br>分類<br>
<select name="clasfct" size="3">
<option value="1">新機能</option>
<option value="2">仕様変更</option>
<option value="3">バグ修正</option>
</select>

<p>

Rev<br>
<select name="rev" size="3">
<option value="1">ver 8.01.15</option>
<option value="2">ver 7.01.34</option>
<option value="3">ver 7.00.29</option>
</select>
<br>

キーワード1を入力してください(必須):<input type="text" name="key1"><br>
<p>
キーワード2を入力してください(任意):<input type="text" name="key2"><br>
<p><input type="submit" name="exec" value="検索">
</form>
</body>
</html>

この場合、
<form> タグの位置を変えるだけで動作します。
<select>タグの前に移動させてください。
PHP4.0.6で動作確認済みです。
JavaScript使うまでもなかったですね。失礼しました。
=== 以下ソース ===

<html>
<body>
<form action="yamaha0.php" method="post"> <!-- ここに移動 -->

<br>分類<br>
<select name="clasfct" size="3">
<option value="1">新機能</option>
<option value="2">仕様変更</option>
<option value="3">バグ修正</option>
</select>

<p>

Rev<br>
<...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング