• 締切済み
  • すぐに回答を!

php,postgreSQLについて

こんにちわ。初めて投稿します。よろしくお願いします。 現在、postgreSQLで作ったテーブルのデータをつくり、検索フォームで指定した条件(この場合はお店のコード) を、指定先のページに表示させたいのです。 SQLに直接、表示させたいコード番号を入力すれば出るのですが、フォームに入力された値を変数として格納し、SQL文の中に自動にあてはめる方法がわかりません・・。 どうかよろしくお願いします。 phpは4.1です。inp_store_cdは検索フォ-ムでのinput名です。 *表示画面 <?php $conn = pg_connect ("host=localhost port= 5432 dbname=test ); if ($conn == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from store_basic where store_cd=$_POST["inp_store_cd"]"; if (!empty($inp_store_cd)) { $sql = $sql. "and sotre_cd =" .$_POST["inp_store_cd"]; } $result = pg_exec($sql); // selectを実行 if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = pg_numrows($result); // 行数を取得 $columns = pg_numfields($result); // 列数を取得 print("<table border>\n"); for ($j = 0;$j < $rows;$j++) { if ($j == 0) { print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_fieldname($result,$i); // 列名の取り出し print("<th>$str</th>"); } print("</tr>\n"); } print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_result($result,$j,$i); // データの取り出し print("<td>$str</td>"); } print("</tr>\n"); } pg_freeresult($result); // 検索結果の解放 print("</table>\n"); ?>

共感・応援の気持ちを伝えよう!

  • PHP
  • 回答数4
  • 閲覧数319
  • ありがとう数4

みんなの回答

  • 回答No.4
  • arisa5
  • ベストアンサー率54% (6/11)

コンボボックスというのは、選択できるボックスですよね? それでしたら、HTML側の<form ~>から</form>の間 <input type=submit ~>の直前に <input type="text" name="inp_store_name" size=12><br> <select name="inp_store_area"> <option value="エリア1">エリア1 <option value="エリア2">エリア2 <option value="エリア3">エリア3 |(エリアの記述) </select><br> を追加して、PHP側では $in_code = $_POST['inp_store_cd']; と同じように $in_name = $_POST['inp_store_name']; $in_area = $_POST['inp_store_area']; を追加して、 if(empty($in_cord) and enpty($in_name) and enpty($in_area)) { exit; //3つとも空の時はぬける } $sw = 0; $sql = "select * from store_basic where"; if(!empty($in_cord)){ $sql .= " store_cd='$in_cord'"; $sw = 1; } if(!empty($in_name)){ if($sw=1){ //cd が指定されている時、and で繋ぐ $sql .= " and"; } $sql .= " store_name='$in_name'"; $sw = 1; } if(!empty($in_area)){ if($sw=1){ //cd または name が指定されている時、and で繋ぐ $sql .= " and"; } $sql .= " store_area='$in_area'"; } //以下、DBの検索 ".="イコールの前のピリオドが見ずらいと思いますが、ピリオドは必要です。 ちょっと長ったらしいですが、ひとつひとつの値を確認して、 sql文を作ったほうが手堅いと思います。 試してみてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • arisa5
  • ベストアンサー率54% (6/11)

あわてて書いたので、ミスがありました。大変申し訳ありません。 もう一度、HTMLのほうから <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body> <form name="get_cord" action="disp.php" method="POST"> <input type="text" name="inp_store_cd" size=4> <input type=SUBMIT value="送信"> <input type=reset value="リセット"> </form> </body> </html> disp.phpのプログラム <html><head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head><body> <?php $in_code = $_POST['inp_store_cd']; if (isset($in_code)) { $conn = pg_connect ("host=localhost port= 5432 dbname=test"); if ($conn == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from store_basic where store_cd=$in_cord"; $result = pg_exec($sql); // selectを実行 if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = pg_numrows($result); // 行数を取得 $columns = pg_numfields($result); // 列数を取得 print("<table border>\n"); for ($j = 0;$j < $rows;$j++) { if ($j == 0) { print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_fieldname($result,$i); // 列名の取り出し print("<th>$str</th>"); } print("</tr>\n"); } print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_result($result,$j,$i); // データの取り出し print("<td>$str</td>"); } print("</tr>\n"); } pg_freeresult($result); // 検索結果の解放 print("</table>\n"); } ?> </body></html> うまくいかない場合は、また補足などに記入してください。

共感・感謝の気持ちを伝えよう!

質問者からの補足

arisa5さん、お手数かけてもうしわけありません。 先ほどの件ですが、 $sql = "select * from store_basic"; $in_cord=$_POST["inp_store_cd"]; if(!empty($in_cord)){ $sql = $sql." where store_cd='$in_cord'"; } と、したところ、値が取得できました、 本当にありがとうございました。 if文を使っているのにはわけがありまして、検索する条件が store_cd の他に、store_name (店の名前),area (エリア),などがありまして、値が入っているもののみを条件にしたいからです。 ただ、1つだけの条件ならうまくいくのですが、2つ以上の条件を入れると、うまく反映できません。 おそらく同じようにして、sql文のところに複数の変数をあてはめればいいと思うのですが・・・・ よろしければこちらの方のご教授ください。 ちなみに area はコンボボックスです。 よろしくお願いいたします。

  • 回答No.2
  • arisa5
  • ベストアンサー率54% (6/11)

#1です。 $sql = "select * from store_basic where store_cd=$in_cord; の行は、"を付け忘れました。 $sql = "select * from store_basic where store_cd=$in_cord"; です。それと、 >if (!empty($inp_store_cd)) >{ >$sql = $sql. "and sotre_cd =" .$_POST["inp_store_cd"]; >} は必要ないかと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 if~の文は、テキストボックスに入力されていた場合に 検索するといったことを行いたかったのですが、うまくいかないみたいです。。 何か良い書き方はあるのですか?

  • 回答No.1
  • arisa5
  • ベストアンサー率54% (6/11)

プログラムを2本に分けたほうがわかりやすいと思います。 1本目はコードをフォームで入力します。(HTML形式でOK) <html><head> <META http-equiv=Content-Type content="text/html; charset=EUC-JP"> <form name="get_cord" action="disp.php" method=POST> <input type=text name=inp_store_cd size=4> <input type=submit value=送信> <input type=reset value=リセット> </form> </body></html> 2本目(仮名:disp.php)で、DBを検索して表示させます。 そのコーディングは、すでにmmngaさんの書いた通りでいいと思います。 変更する点としては、 >$sql = "select * from store_basic where store_cd=$_POST["inp_store_cd"]"; の前に、 $in_cord=$_POST["inp_store_cd"]; を追加して、 $sql = "select * from store_basic where store_cd=$in_cord; とすればうまくいくと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 さっそく2つにわけてやりましたがParse error: parse error, unexpected T_STRING というエラーが★印のところで出てしまいます。ソースは以下の通りです。 すみませんが、ご教授ください。 $conn = pg_connect ("host=localhost port= 5432 dbname=test"); if ($conn == false) { print("データベースに接続できませんでした。"); exit; } $in_cord=$_POST["inp_store_cd"]; $sql = "select * from store_basic where store_cd=$in_cord; $result = pg_exec($sql); // selectを実行 if ($result == false) { ★printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = pg_numrows($result); // 行数を取得 $columns = pg_numfields($result); // 列数を取得 print("<table border>\n"); for ($j = 0;$j < $rows;$j++) { if ($j == 0) { print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_fieldname($result,$i); // 列名の取り出し print("<th>$str</th>"); } print("</tr>\n"); } print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_result($result,$j,$i); // データの取り出し print("<td>$str</td>"); } print("</tr>\n"); } pg_freeresult($result); // 検索結果の解放 print("</table>\n"); ?>

関連するQ&A

  • PostgreSQLに書き込むことが出来ない

    環境→Windows XP Home Edition Apache→Apache 2.0.59 PostgreSQL→PostgreSQL8.1.6 PHP→PHP4.4.4 DBに書き込もうとしていますがなかなか上手くできません。 <?php //データベースに接続する $conn = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); //データベースに接続出来るかチェック if(!$conn) { //エラーメッセージ echo "An error occured.\n"; exit; } else { //接続成功メッセージ print "DB(mytbl)に接続しました。<br>"; } //データベースに接続し、mytblからidとnameを取り出す $result = pg_query($conn,"SELECT id,name FROM mytbl"); //データベース(mytbl)からidとnameを取得する if (!$result) { //エラーメッセージ echo "An error occured.\n"; exit; } else { //接続成功メッセージ print "idとnameを取得しました。<br>"; } //データベースmytblに書き込む if(isset($_POST["action"]) && $_POST["sign"] == '書き込み') { //名前とスコアが何も書かれていなかった場合 if($_POST["id"] && $_POST["name"]) { //データベースに書き込む $sql="INSERT INTO mytbl(id,name) VALUES('$id','$name')"; pg_query($conn,$sql); //成功メッセージ print "DB(mytbl)に書き込みました。<br><br>"; } else { //エラーメッセージ print "書き込めませんでした。<br><br>"; } }

    • ベストアンサー
    • PHP
  • チェックボックスの使用

    PostgreSQL+PHP初心者です。 DBから登録者一覧を抽出し、CheckBoxでチェックしたものだけ 修正をします。 DBから抽出し、テーブルを作成するところまでは出来ました。 その後CheckBoxのチェック済みだけを修正する場合はどうすればいいですか? ↓現在のソースです。 <html> <head> </head> <body> <FORM NAME="form1" action="insert.php" method="post"> <? $hostname="svibm01"; $con = pg_connect("host=$hostname dbname=testdb user=testuser password=testuser"); if(!$con) { print "データベースに接続できませんでした.\n"; exit; } $sql = "select * from name"; $rtn = pg_exec($con, $sql); if(!$rtn) { print "テーブルの検索に失敗しました.\n"; pg_close($con); exit; } $m = pg_numrows($rtn); $n = pg_numfields($rtn); print "<table border>\n"; print "<tr>\n"; print "<th> </th>"; $i = 0; while($i < $n) { print "<th>".pg_fieldname($rtn, $i)."</th>\n"; $i++; } print "</tr>\n"; $j = 0; while($j < $m) { $i = 0; print "<tr>\n"; print "<td align=center><input type=checkbox name=check".pg_result($rtn, $j, $i)." value=".pg_result($rtn, $j, $i)."></td>"; while($i < $n) { print "<td align=center>".pg_result($rtn, $j, $i)."</td>\n"; $i++; } print "</tr>\n"; $j++; } pg_close($con); print "</table>"; ?> <br> <br> <input type="submit" name="add" value="追加" /> <input type="submit" name="upd" value="変更" /> </FORM> </body> </html>

    • 締切済み
    • PHP
  • PostgreSQLに書き込み

    今、PHPでPostgreSQLに接続して データを書き込もうとしていますが、 ”ページを表示できません”とエラーが出てしまいます。 <html> <body> <title>PostgreSQL実験</title> <div align="center"> <table border=1> <caption>検索結果</caption> <tr> <td>ID</td> <td>氏名</td> <td>点数</td> </tr> <br> </table> <?php $d_base = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); if($action == post && $sign == '書き込み') { if($id && $name && $score) { pg_query($d_base,"insert into mytbl values($id,$name,$score)"); } } if($action == post && $sign == '点数修正') { if($id && $score) { pg_query($d_base, "update mytbl set score=$score where id=$id"); } } if($action == post && $sign == '一行削除') { if($id) { pg_query($d_base, "delete from mytbl where id=$id"); } } if($result = pg_exec($d_base, "select * from mytbl")) { $row = pg_num_rows($result); for($i = 0; $i < $row; $i++) { $arr = pg_fetch_row($result, $i); echo "<tr>"; for($j = 0; $j < count($arr); $j++) { echo "<td>$arr[$j]</td>"; } echo "</tr>"; } } ?>

    • ベストアンサー
    • PHP
  • PHPのデータベース(postgresql)への保存

    いま日記機能付カレンダーを作成しています。 データベース(postgresql)に接続までできているのですが、保存ができません。エラーが出ている部分は--- $sql = "INSERT INTO DIARY_MASTA       VALUES('".$DIARY_DATE."','".$DIARY_DATA."');"; $result = pg_query($sql); ---です。 エラーメッセージはWarning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for type date: "" in ・・・・ 保存方法や確認しなければいけない個所を教えていただきたいので、よろしくお願い致します。 //保存ボタンを押すと保存 if($_POST['enter'] == "保存"){ //日記の記入がない日 if($data == null){ $data = $day; } //記入年月日・日記内容 $DIARY_DATE = $year."年".$month."月".$day1."日"; $DIARY_DATA = $_POST["DIARY"]; } //データベース接続開始! //(ホスト名・データベース名・ユーザー名・パスワード) $conn = "host = localhost dbname = **** user = ****      password = ****"; $link = pg_connect($conn); if($link){ echo "接続成功 .\n"; //日記の日付・日記の内容をDIARY_MASTAより取得 $sql = "INSERT INTO DIARY_MASTA       VALUES('".$DIARY_DATE."','".$DIARY_DATA."');"; $result = pg_query($sql); if(!$result_pg){ die("保存できません"); } } else { echo "接続できません"; } //データベース切断 $close = pg_close($link); if($close){ echo("切断できました"); }

    • ベストアンサー
    • PHP
  • PostgreSQL へのINSERTについて

    度々失礼します。 現在、入力フォームからの新規データをPostgreSQLに登録する仕組みを作成しています。 そこで、リストボックスから選んだ複数のデータをPostgreSQLに入力したいのですが、配列ではなく1つのデータなら $in_hair=$_POST["inp_hair"]; //table_hairに登録 $sql =""; $sql .="INSERT INTO table_hair"; $sql .=" VALUES('$in_store_cd',"; $sql .=" '$in_hair')"; $result=pg_exec($sql); if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } で、出来ますが、配列となると、上のコードを配列された数だけ作成し、また、$in_hairをその数だけ1つ1つ入れていかなければならないと思います。 その際の、特にコードの書き方が良く分かりません。 また、何か他に良い方法も思いつきません。 お手数ですがどなたかご教授ください。 よろしくお願いします。 phpは4.2です。

    • ベストアンサー
    • PHP
  • phpでデータリスト作成

    php+PostgreSQLでデータのリスト作成をしています。 DB内にあるデータを条件に合うデータを30件ずつ表示させ、ページ切替をしています。 10ページあると、ページ切替のリンクが、 1~10まで全て表示されます。 これを5ページ目まで+次ページ 前ページ 6 7 8 9 10 が表示 どのようにすればよいでしょうか? よろしくお願い致します。 現時点でのソースです。 **************************************************DB接続後 $sql = "select count(*) from entry_user"; $result = pg_query($sql) or die("Failed to execute SQL\n"); $row = pg_fetch_result($result,0,0); $ln = 30; if ($row%$ln == 0){  //表示する件数(MAX) $pn = floor($row / $ln); } else{ $pn = floor($row / $ln)+1;  } pg_free_result($result); $data = "entry_id,entry_time,company,dept,sei,mei,post1,post2,pref,address2,address3,email,entry_flag"; $sort_key = "entry_id"; //ソート対象フィールド $sort ="desc"; //ソート desc:降順 $sql1 = "select $data from entry_user order by $sort_key $sort limit $ln offset " . ($pnn-1)*$ln ; //SELECT文 $result1 = pg_query($sql1) or die("Failed to execute SQL\n"); $row1 = pg_num_rows($result1); for ($i = 0; $i < $row1; $i++){ $table[$i] = pg_fetch_row($result1,$i); } 一覧表示後(省略) //ここからページ切替作成 for ($n = 1;$n<$pn+1;$n++){ if($pn != 1){ if($n != $pnn){ print(" <a href=list01.php?pnn=" . $n . ">"); print($n . "</a> \n"); } else{ // ページ数が、現在表示しているページと同じで有ればリンクなし print($n . " \n"); }} else{ print("1\n"); }}

    • ベストアンサー
    • PHP
  • ODBCを使用したSQLの使い方を教えてほしいです

    タイトルの内容を調べているのですが、上手くヒットせず、 同じように記述してもエラーになってしまいます。 よくわかりませんので、教えてほしいです。 odbc_connectは通っているようなので、接続はできている と思います。 $rs=odbc_exec($conn,$sql);にてエラーになるようです。 Warning: odbc_exec():が出ます。 よろしくお願いします。 print ("<html>"); print ("<body>"); $conn=odbc_connect('m_db','',''); if (!$conn) { exit("Connection Failed: " . $conn); } $sql = "SELECT * FROM test_table"; $rs=odbc_exec($conn,$sql); if (!$rs) { exit("Error in SQL"); } echo "<table><tr>"; echo "<th>Companyname</th>"; echo "<th>Contactname</th></tr>"; while (odbc_fetch_row($rs)) { $compname=odbc_result($rs,"CompanyName"); $conname=odbc_result($rs,"ContactName"); echo "<tr><td>$compname</td>"; echo "<td>$conname</td></tr>"; } odbc_close($conn); echo "</table>"; print ("</body>"); print ("</html>");

    • ベストアンサー
    • PHP
  • PHPロジックで・・・

    PHP4をHTMLに埋め込むロジックを書いてます。 DBはpostgresqlです。 <? print("<SELECT NAME=sendgroup>"); print("<option value=name>グループ一覧"); for($i = 0; $i < row; $i++){ $str = pg_result($res,$i,0); print("<option value=$str>$str"); } print("</SELECT>"); ?> DBから取り込んだデータをrow(行数)分まわして HTMLのセレクトオプション表示をしたいのですが 表れません。$strにDBから取り込んだデータが 入ってます。 普通にprint($str)データの値はちゃんととれています。 HTMLのselect文でなにか規約があるのでしょうか?

    • 締切済み
    • PHP
  • PHPとPostgreSQLがつながらない

    PHPとPostgreSQLの初心者です。PHPとPostgreSQLを 使ってプログラムを作ろうと思ってます。 開発はPC上で、PostgreとPHPサーバはLinuxマシンに あります。まず最初にPostgreのインストールですが、 Fedora Core5 に着いていたPotsgreSQL8.1.3を入れ ました。設定としては、 postgresql.confでは listen_address='localhost,192.168.1.3' としました。192.168.1.3はLinuxマシンのローカル アドレスです。 pg_hba.confではconnectionのところで host all all 192.168.1.3 255.255.255.0 tyust としました。その後 host all all 0.0.0.0 255.255.255.0 tyust とかいろいろ試してみました。 一方PHPの方はほとんど何も設定をしていません。と いうか設定方法がよくわかりません。 以上の環境で、簡単なPHPプログラムをPostgreにつなげないで実行したところ問題なく動きました。 20行くらいのPHPを書いてみましたが、特に問題はあ りませんでした。 PostgreSQLの方は、PCからSSHで入って、接続テスト 用のDBを作り、テーブルも3つ作って、データを数件 Insertしました。 いよいよPHPからDBにつなぐことになったのですが、 プログラム上では以下のように書きました。 <?php    print "こんにちは"; $conn = pg_connect ('host=192.168.1.3 port=5432 dbname=phptest user=postgres');    print "こんばんは"; if (!$conn) { print "PostgreSQLへの接続に失敗です"; exit(); } else ・ ・ して実行したところ、「こんにちは」は表示されま したが、「こんばんは」以下はは表示しませんで した。$conn の先には進んでいないようです。 当然ここに書いた以外にも設定を変えてみましたが、 つながりませんでした。よろしくお願いします。

    • 締切済み
    • PHP
  • PHPとMysqlによる正規表現について

    データベースに登録した情報から検索するコードを書いたのですが、どう入力してもデータベースに登録した情報がすべて出てきてしまいます。 入力フォームに検索した条件だけ表示させたいです。 htmlの入力フォームを作り、そこから$_POSTでPHPに渡しました。 コードは以下のとおりです。 PHPの本を読んで見よう見まねで書いたのですが、さっぱりです。 ご教授よろしくお願いします。 <html> <head><title>検索php</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php $host="localhost"; if(!$conn=mysql_connect($host,"usr","passwrd")){ die("データベース認証エラー.<br />"); } mysql_select_db("usr",$conn); $condition=""; if(isset($_POST["name"])&&($_POST["name"]!="")){ $name=mysql_real_escape_string($_POST["name"]); $name=str_replace("%","\%",$name); $condition="WHERE table_a LIKE \"%".$name."%\""; } if(isset($_POST["phone"])&&($_POST['phone']!="")){ $phone=mysql_real_escape_string($_POST["phone"]); $phone=str_replace("%","\%",$phone); if($condition==""){ $condition="WHERE table_b LIKE \"%".$phone."%\""; }else{ $condition.="AND tabe_b LIKE \"%".$phone."%\""; } } $sql="SELECT * FROM table ".$condigition."ORDER BY table_id LIMIT 0,30"; $res=mysql_query($sql,$conn); print("<table border=\"1\">"); print("<tr><td>会社名</td><td>電話番号</td></tr>"); while($row=mysql_fetch_array($res)){ print("<tr>"); print("<td>".$row['table_a']."</td>"); print("<td>".$row['table_b']."</td>"); print("</tr>\n"); } print("</table>"); mysql_free_result($res); ?> </body> </html>

    • ベストアンサー
    • PHP