今、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>";
}
}
?>
No.3ベストアンサー
- 回答日時:
> ”ページが見つかりません”と出てきます。
なるほど。原因は、
<FORM ACTION=<?php echo $PHP_SELF; ?> METHOD=POST>
の部分ですね。正しくは、↓です。
<FORM ACTION=<?php echo $_SERVER["PHP_SELF"]; ?> METHOD=POST>
php.iniのデフォルト設定なんですが
register_globals=Off
の場合、"$PHP_SELF"とか書いちゃダメです。
ソースを読むと他にも問題ありそうですね。
"$action"と"$sign"等もこのままでは、上手くいきませんよ。
"内部変数"と"外部変数"の違いについて調べてみて下さい。
この回答への補足
tbshさん、迅速な解答アドバイスありがとうございます。
><FORM ACTION=<?php echo $PHP_SELF; ?> METHOD=POST>
の部分を、tbshさんの
<FORM ACTION=<?php echo $_SERVER["PHP_SELF"]; ?> METHOD=POST>
にしたら、’ページを表示できません’が出なくなりました。
tbshさんの言っている内部変数と外部変数を今から調べて見ます。
色々とアドバイスありがとうございます。
No.4
- 回答日時:
> if($_POST["id"] && $_POST["name"] && $_POST["score"])
> pg_query($d_base,"INSERT INTO mytbl VALUES($id,$name,$score)");
ご自身で、答えを見つけていらっしゃるようですが・・・(笑)
あと、アドバイスとしては、No.1の方が仰っているように
実行エラーの時のデバック処理を入れていくと良いと思います。
例えば、
print "id=" . $_POST["id"];
などして、入力値がちゃんと変数に入っているか?
SQL文は、一旦変数に入れてから実行し、
falseが返ってきたら、SQL文とエラーメッセージを画面表示する
といった感じで。
(例)
$strSQL = "select * from mytbl";
$rs = pg_exec($d_base, $strSQL))
if (!$rs){
print "[SQL]<br>" . $strSQL . "<br>";
print "[ERROR]<br>" . pg_last_error ($d_base);
}
この回答への補足
tdshさん、いつもアドバイスありがとうございます。
<?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($_POST['action'] && $_POST['post'] == '書き込み')
{
if($_POST['id'] && $_POST['name'])
{
pg_query($d_base,"INSERT mytbl($id,'$name) VALUES($id,$name,$score)");
print "DB(mytbl)に書き込みました。";
}
else
{
print "書き込めませんでした。";
}
}
//DBに入力されている行を取得する
while ($row = pg_fetch_row($result))
{
//IDとNameを取得する
echo "id: $row[0] name: $row[1]";
echo "<br />\n";
}
//フォームからデータが取得できるかチェック
//print "id: " .$_POST["id"] ." name: " .$_POST["name"];
?>
<!--idとname入力欄-->
<p>
<FORM ACTION=<?php echo $_SERVER['PHP_SELF']; ?> METHOD=POST>
<input type=hidden name=action value=post>
ID:<input type=text name=id size=5>
Name:<input type=text name=name size=15>
<input type=submit name=sign value="書き込み">
</form>
<p>
idとnameを書いた後、書き込むボタンを押しましたが、
//エラーメッセージも//接続成功メッセージも表示されませんでした。
この部分がどうやら悪いようです。
後、tbshさんの言っていた>print "id=" . $_POST["id"];
をやりましたが、うまくフォームから値を取得することができました。
No.2
- 回答日時:
どんなエラーなのか具体的に書いて下さい。
そうすれば原因の推測もし易くなりますので。
個人的には、pg_pconnectの部分が気になります。
hostの指定が無い事と、持続的な接続である事の2つ。
pg_connectの方が良いと思いますよ。
補足ができなかったので補足させて頂きます。
tdshさん、一応こんな風にやってみたのですが出来ませんでした。
どうでしょうか?
if(isset($_POST['action']) && $_POST['sign'] == '書き込み')
{
if($_POST["id"] && $_POST["name"] && $_POST["score"])
{
pg_query($d_base,"INSERT INTO mytbl VALUES ($id,$name,$score)");
}
}
No.1
- 回答日時:
WebサーバやPostgresのログにエラーが記録されてないか(insertあたりがおかしそう。
)を調べてみては。DBへの接続失敗やクエリ実行エラーなどに対するエラーハンドラーが全く記述されてないので、そこらへんを作り込んでデバッグしてみるとか。
この回答への補足
osamuyさん、迅速な解答ありがとうございます。
乗せられなかったコードを乗せておきます。
追記
<P><FORM ACTION=<?php echo $PHP_SELF; ?> METHOD=POST>
<INPUT TYPE=HIDDEN NAME=action VALUE=post>
ID:<INPUT TYPE=TEXT NAME=id SIZE=5>
氏名:<INPUT TYPE=TEXT NAME=name SIZE=15>
点数:<INPUT TYPE=TEXT NAME=score SIZE=5>
<INPUT TYPE=SUBMIT NAME=sign VALUE="書き込み">
<INPUT TYPE=SUBMIT NAME=sign VALUE="点数修正">
<INPUT TYPE=SUBMIT NAME=sign VALUE="一行削除">
</FORM></P>
<P><FONT COLOR='red'>*「点数修正」と「一行削除」の場合はID指定のみでO.K.です。</FONT></P>
</div>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
sortableを使用したデータのUPDATE
-
エクセルVBAについて
-
PHP 10件表示 "前へ" "次へ"
-
WHERE句で一致しない場合を判断...
-
取得データの置き換え方法
-
DBに入力されている値で、セ...
-
syntax errorの原因について
-
php5のコンストラクタをphp4仕...
-
PHP 関数呼び出し後に配列添字...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
SQL文が実行できません
-
PHP データの抽出&相関検定の...
-
CSVをダウンロードさせた際、CS...
-
PHP+MySQLでの検索結果の横並び...
-
csvをDBへ読み込んだら、NULLが...
-
php データ削除
-
zendframework
-
MySQL5のデータを、SQL文を使い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
アラートでyes noを作りたいです。
-
checkboxクリック時、SQLを実行...
-
dbに登録したデータをphpのプル...
-
PHPでMySQLデータを呼び出し、w...
-
PHP・MySQL使用で、年齢制限を...
-
Smartyを用いたコードの書き方...
-
文字化けが解決できません。お...
-
DBで検索結果に該当するデータ...
-
テーブル内の文字によりログイ...
-
PHP+MySQLでの配列のinsert文に...
-
ラジオボタンをループすること...
-
sortableを使用したデータのUPDATE
-
記事のコメント数表示について
-
htmlとphpの分離
-
エクセルVBAについて
-
入れ子のようにしてデータを作...
-
重複したフィールドに関して
-
VBA初心者です。
-
PHPでの検索機能がうまく動きま...
おすすめ情報