• ベストアンサー
  • すぐに回答を!

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
  • 回答数2
  • 閲覧数394
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

どう「うまくできない」のかはわかりませんが憶測で $sql="INSERT INTO mytbl(id,name) VALUES('$id','$name')"; ↓ $sql="INSERT INTO mytbl(id,name) VALUES('{$_POST['id']}','{$_POST['name']}')"; $id, $nameという変数はregister_globalsがOnでないと設定されません。 PHP4.4.4ではregister_globalsはデフォルトでOffです。 もし的はずれだったら 「どういう結果を期待しているのか」 「期待しない結果としてどのような結果が起きているのか」 「エラーメッセージは表示されないか、表示されるとしたらどんな内容か」 「結果はどうやって確認したのか」 あたりを説明してもらえると回答しやすいです。

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

質問者からのお礼

shogo0890さん、解答ありがとうございます。 shogo0890さんの >$sql="INSERT INTO mytbl(id,name) VALUES('{$_POST['id']}','{$_POST['name']}')"; をやってみたところデータベースに上手く書き込むことが出来ました。 php.iniファイルを見てみたところ register_globals = off になっていました。 丁寧な解答本当にありがとうございました。

その他の回答 (1)

  • 回答No.2

私も、どう「うまくいかない」のかわからないので確認ですが、 DBのコネクションは成功していますか? GRANT ALL ON mytbl TO Apacheのユーザ; は実行していますか? ここでいうApacheのユーザとは、nobodyかapacheだと思います。

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

質問者からのお礼

TA-HT81Sさん、解答ありがとうございます。 質問内容の文字が少し限られていたので、いろいろと省いて しまった質問の投げ方をしてしまいました。 すいませんでした。 No1さんの解答のお陰で、上手くDBに書き込むことができました。

関連するQ&A

  • 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
  • DELETE構文

    今、PostgreSQLの中にあるデータを 削除しようとしていますが、構文がDELETE構文が正しくなく 上手く削除することができせん。 環境→WindowsXP register_globals=offです。 ※フォームの部分は、文字制限の為、省略させて下さい。 画面構成 //ここにPostgreSQLから取得されたデータが //乗っています。 ID[入力欄] Name[入力欄] Score[入力欄] (削除ボタン) 構文 //PostgreSQLに接続 $conn = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); //登録データを削除する if(isset($_POST["action"]) && $_POST["sign"] == '一行削除') { //IDが書かれていた場合 if($_POST["id"]) { //データを削除する $sql3="DELETE FROM mytb(id) WHERE $_POST['id'] = ('{$_POST['id']}')"; //データベースに問い合わせて、クエリを実行する pg_query($conn,$sql3); //成功メッセージ print "データを一件削除しました。<br>"; } else { //失敗メッセージ print "IDが書かれていないため、削除できません。<br><br>"; } }

    • 締切済み
    • PHP
  • Like演算子について

    OS→Windows XP Home Edition Apache→2.0.59 PHP→4.4.4 今、Like演算子で検索しようとしていますが 上手く行きません。 <?php //データベースに接続する $conn = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); //名前を検索する if(isset($_POST["action"]) && $_POST["sign"] == '検索') { //NAMEが書かれていた場合 if($_POST["name"]) { //NAMEを検索する //$sql4="SELECT * FROM mytbl WHERE name LIKE ('{$_POST['name']}')%"; //データベースに問い合わせて、クエリを実行する //pg_query($conn,$sql4); //成功メッセージ print "$_POST["name"]は検索されました。<br><br>"; } else { //失敗メッセージ print "$_POST["name"]は検索出来ませんでした。<br><br>"; } } ?> <!--$_SERVER['PHP_SELF']; ?>は、自分自身を呼び出す--> <FORM ACTION=<?php echo $_SERVER['PHP_SELF']; ?> METHOD=POST> <!--IDとNAMEとSCORE入力欄--> <input type=hidden name=action value=post> <!--入力ボックス--> ID: <input type=text name=id size=5> Name: <input type=text name=name size=15> SCORE: <input type=text name=score size=15> <br> <br> <!--ボタンオブジェクト--> <input type=submit name=sign value="書き込み"> <input type=submit name=sign value="点数修正"> <input type=submit name=sign value="一行削除"> <input type=submit name=sign value="検索"> </FORM> どなたか分かる方いればご教授お願いします。

    • 締切済み
    • PHP
  • value count on rowというエラーについて教えてください。

    ソースを載せます。 <?php require_once("DB.php"); $dbUser = "root"; // ユーザー名 $dbPass = "root"; // パスワード $dbHost = "localhost"; // ホスト名 $dbName = "shopping"; // データベース名 $dbType = "mysql"; // データベースの種類 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; // データベースに接続 $conn = DB::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (DB::isError($conn)){ die($conn->getMessage()); } // POSTされたデータを受け取り、エスケープします。 if($user_name==""){ print"名前が入力されていません<BR>"; } if($phone==""){ print("電話番号が入力されていません<BR>"); } if($mail==""){ print("メールアドレスが入力されていません<BR>"); }else if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)) { echo "正しいメールアドレスです"; } else { echo "正しくないメールアドレスです"; } if($mail1==""){ print("再度メールアドレスが入力してください<BR>"); } if($zipcode==""){ print("〒が入力されていません<BR>"); } if($address==""){ print("住所が入力されていません<BR>"); } $password = addslashes($_POST['password']); $user_name = addslashes($_POST['user_name']); $zipcode = addslashes($_POST['zipcode']); $zipcode1 = addslashes($_POST['zipcode1']); $ken = addslashes($_POST['ken']); $address = addslashes($_POST['address']); $apart = addslashes($_POST['apart']); $phone = addslashes($_POST['phone']); $mail = addslashes($_POST['mail']); $cardnumber = addslashes($_POST['cardnumber']); $cardnumber1 = addslashes($_POST['cardnumber1']); $cardnumber2 = addslashes($_POST['cardnumber2']); $cardnumber3 = addslashes($_POST['cardnumber3']); $carddate = addslashes($_POST['year']); $carddate1 = addslashes($_POST['month']); $cardmembername = addslashes($_POST['cardmembername']); print$password."<br>"; print$user_name."<br>"; print$zipcode."<br>"; print$address."<br>"; print$phone."<br>"; print$mail."<br>"; print$cardnumber."<br>"; print$carddate."<br>"; print$cardmembername."<br>"; print$ken."<br>"; print$apart."<br>"; print$cardnumber1."<br>"; print$cardnumber2."<br>"; print$cardnumber3."<br>"; print$carddate1."<br>"; print$zipcode1."<br>"; print("2"); $sql = <<<EOS INSERT INTO USERS ( PASSWORD, USER_NAME, ZIPCODE, ADDRESS, PHONE, MAIL, CARDNUMBER, CARDDATE, CARDMEMBERNAME, KEN, APART, CARDNUMBER1, CARDNUMBER2, CARDNUMBER3, CARDDATE1, ZIPCODE1 ) VALUES ( '$password', '$user_name', '$zipcode', '$address', '$phone', '$mail', '$cardnumber' '$carddate', '$cardmembername', '$ken', '$apart', '$cardnumber1', '$cardnumber2', '$cardnumber3', '$carddate1', '$zipcode1' ) EOS; //$sql = mb_convert_encoding( $sql, "SJIS", "EUC-JP"); print$sql; // SQL文を発行 $conn->query('SET NAMES ujis'); $result = $conn->query($sql); if (DB::isError($result)) { die ($result->getMessage()); } $count = $result->numRows(); print "データを" . $count . "件、挿入しました。"; // データベースから切断します。 $conn->disconnect();以上がソースですが、自分ではSQLは正しいと思っていますが、 このエラーがでてインサートできずに困っています。 sql文を表示してみましたがおかしいところは特に見つかりませんでした。それではよろしくお願いします。

    • ベストアンサー
    • PHP
  • mysqlのレコード削除

    会員登録を削除するプログラムなのですが削除できません。 ログイン時に$_SESSION['id']を既に持っている状態で$_SESSION['id']は mysqlで自動連番が付加されるPRIMARY KEY (id)です。 --- html --- <form method="post" action="unregist.php"> ~アンケート的なものでここの内容は関係ありませんので中略~ <input type="submit" name="unregist" value="退会する"> </form> --- php --- session_start(); session_regenerate_id(true); // データベース接続設定 require_once dirname(__FILE__) . "/../db_conn.php"; $conn = mysql_connect("$db_sv", "$db_user", "$db_pass") or die("接続エラー"); mysql_query("SET NAMES 'utf8'", $conn); mysql_select_db("$db_name", $conn) or die("接続エラー"); if (isset($_POST['unregist'])) { $sql = "DELETE FORM members WHERE id ='" . $_SESSION['id'] . "'"; if (mysql_query($sql, $conn)) { mysql_free_result($res); mysql_close($conn); } else { echo 'エラー!管理へお問い合わせ下さい。'; } 退会するをクリックしてもエラー!管理へお問い合わせ下さい。と 出てしまうのですがどこかおかしい箇所があるでしょうか? 調べてみたのですが自分ではわからずだったので宜しくお願い致します。

    • ベストアンサー
    • PHP
  • MySqlに登録したデータを更新すると文字化けする

    PHP5.2 MySql5.1.34 文字コードSJIS MySqlに登録したデータを更新すると文字化けします。 回答をよろしくお願い致します。 // MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES 'sjis'") or die("can not SET NAMES sjis"); // データを取り出す $sql = "SELECT created_at, mes, url FROM message WHERE (id = ".$_POST["id"].");"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); // 取り出したデータを表示する print "<form action=koushin.php method=post accept-charset=\"Shift_JIS\">"; print "日付:<input type=text size=30 name=created_at value=" . $row["created_at"] . "> "; print("<br>"); print("<br>"); print "メッセージ:<input type=text size=50 name=mes value=" . $row["mes"] . "> "; print("<br>"); print("<br>"); print "URL:<input type=text size=80 name=url value=" . $row["url"] . "> "; print "<input type=hidden name=id value=" .$_POST["id"]. ">"; print("<br>"); print("<br>"); print "<input type=submit value=更新>"; print("<br>"); print("<br>"); print "</form>"; koushin.php <?php $sv = "サーバ"; $dbname = "データベース"; $user = "ユーザー"; $pass = "パスワード"; $conn = mysql_connect($sv, $user, $pass) or die("接続エラー"); mysql_select_db($dbname) or die("接続エラー"); $id = $_POST["id"]; $created_at = $_POST["created_at"]; $mes = $_POST["mes"]; $url = $_POST["url"]; $sql = "UPDATE message SET updated_at = now() , created_at = '{$created_at}' , mes = '{$mes}' , url = '{$url}' WHERE id = $id"; $res = mysql_query($sql, $conn) or die("更新エラー"); mysql_close($conn); ?>

    • ベストアンサー
    • MySQL
  • 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
  • PHPとPostgreSQLとの連携

    今、WindowsXPでPHPとPostgreSQLを連携 させたいのですがなかなか上手く行きません。 どなたか、分かる方がいれば宜しくお願いします。 環境 OS→Windows HomeEdition Apache→Apache HTTP Serber2.0.59 PHP→PHP4.4.4 PostgreSQL→PostgreSQL8.1.4 です。 PostgreSQLの中にtest_dbというデータベースをつくり setuzoku.phpから接続できるかどうかのif文を作り確認 していますが、何度やっても接続失敗と出ます。 <?php $con = pg_connect("user='postgres' dbname='test_db' password='grjtf'"); if (! $con) { print "接続失敗"; } else { print "接続成功"; } ?>

  • PHP ログインシステムについて

    お世話になります 現在ローカルで下記PHPのテストを行っています PHP初心者の為、セキュリティ面並びに不具合が心配で書き込みさせて頂きました 恐れ入りますがおかしな点がないかチェックして頂けませんでしょうか 宜しくお願いいたします データベースのバージョンはMySQL 5.5です ***************************************** <?php session_start(); $error_message = ""; if (isset($_POST["login"])) { $id = htmlspecialchars($_POST['id']); $password = htmlspecialchars(base64_encode(pack('H*', sha1($_POST['password'])))); $_SESSION['id'] = $_POST['id']; $_SESSION['password'] = $_POST['password']; $db = mysql_connect("***","***","***"); if (!$db) { die('接続失敗です。'.mysql_error()); } mysql_set_charset("utf8"); $db_selected = mysql_select_db("***", $db); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } $result = mysql_query("SELECT * FROM ***"); if (!$result) { die('クエリーが失敗しました。'.mysql_error()); } function x($result) { return mysql_real_escape_string($result); } while ($row = mysql_fetch_assoc($result)) { if($id == $row['id'] && $password == $row['password']){ header("Location:./instance.php"); } } $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); $error_message = "ユーザ名もしくはパスワードが違っています。"; } ?> <html> <head><title>ログイン</title> <meta http-equiv=Content-Type content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> </head> <body> <?php if ($error_message) { print '<font color="red">'.$error_message.'</font>'; } ?> <form action="login.php" method="post"> ID:<input type="text" name="id"><br /> PASS:<input type="password" name="password"><br /> <input type="submit" name=login value="認証"> </form> </body> </html>

    • 締切済み
    • PHP
  • IDとパスワードを認証すコードをかきましたが動きません

    phpの超初心者です、よろしくお願いします。 IDとパスワードを認証すコードをかきましたが動きません。 Formから別に使ったdbにあるIDとパスを見に行くコードでが、 dbにあるIDとパスと同じものを打ち込んでも認証しません、 また別のdbにあるIDとパスを打ち込んでも認証するときがあります。 一体どこが悪いのでしょうか。どこが悪いのかさっぱり分かりません。 よろしくお願いします。 --------------------------------------- <?php $conn = mysql_connect(localhost, "root", ""); //DBにコネクト mysql_select_db('login_test', $conn); //'login_test'をselect mysql_query('SET NAMES utf8'); //defalt $res_init=mysql_query('SELECT * from user'); //userからすべてのdataを取得 while($arr = mysql_fetch_assoc($res_init)){ //結果セットが無くなるまでループ foreach($arr as $k => $v){ echo "フィールド ".$k." の値は ".$v; echo "<br />"; } echo "<br />"; } //formからDATAを取得 $id=$_POST['input_ID']; $pass=$_POST['input_pass']; print("入力したid= ".$id." 入力したpass= ".$pass); //認証check if(auth ($id,$pass,$conn)===true){ print("認証成功"); } else{ print("認証不成功"); } //function function auth ($id,$pass,$conn){ $sql = "SELECT * from user WHERE user_id = $id AND password = '$pass'"; $res = mysql_query($sql, $conn); return $res; } ?> <form action="http://localhost/test/test.php" method="POST"> IDの入力:<input type="text" name="input_ID"><br /><br /> Passの入力:<input type="text" name="input_pass"><br /><br /> <input type="submit" name="delete_submit" value="送信"><br /> </form> </body> </html>

    • ベストアンサー
    • PHP