• ベストアンサー

訂正版 次のPHPにアクセス

するとエラーになります ただしあらかじめgomidbで以下をしてます create table gomibbs(no serial primary key,contents text); grant all on gomibbs to gomiuser; <?php echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "本文:<input type=\"text\" size=\"80\" name=\"contents\">"; echo "<input type=\"submit\" value=\"送信\">"; echo "</form>"; $con=pg_connect("dbname=gomidb user=gomiuser host=127.0.0.1"); $contents=$_POST['contents']; if($contents) { $contents=pg_escape_string(htmlspecialchars($contents)); pg_query($con,"insert into gomibbs(contents) values('$contents')"); } $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print $row['no'].":".$row['contents']."<br>"; } pg_close($con); ?> エラーになります ところが pg_query($con,"insert into gomibbs(contents) values('$contents')"); の所を pg_query($con,"insert into gomibbs(no,contents) values(1,'$contents')"); とすれば一度だけOKです どうすれば良いでしょうか?

  • guuman
  • お礼率86% (1043/1206)
  • PHP
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.2

permission denied for sequence gomibbs_no_seq テーブル作成時に serial という型で作成してますよね? この場合 sequence(順序)というものが自動で作成されます。 このsequenceにアクセス権がないというエラーです。 次の文を実行してあげてください。 grant all on gomibbs_no_seq to gomiuser; ※もしかしたら構文間違ってるかもしれません・・  ようは gomibbs_no_seq にもアクセスできるようにgrantしてあげれば

guuman
質問者

お礼

ありがとうございます それでした grant all がallでないなんてひどいですね 完璧に動いています 今日一日悩んでいたので助かりました

その他の回答 (2)

回答No.3

たぶん、serialテーブルのgrantをしてないから。 serial 使うとテーブル名+カラム名+_seq というテーブルが自動的に作られるので、こいつもgrantが必要です。 grant all on gomibbs_no_seq to gomiuser; 正確なテーブル名は実際に確かめてください。 エラーメッセージが書いてないから、はずしてるかもしれないけど。。。

guuman
質問者

お礼

ありがとうございます それでなおりました allというのにだまされました やっと食事ができます

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

一見すると合ってるように見えますね・・ pg_query($con,"insert into gomibbs(contents) values('$contents')"); の行にエラーになっていると思うのですが、 その際のエラーメッセージはどうなってますでしょうか?

guuman
質問者

お礼

補足します データベースgomidbのところで insert into gomibbs(contents) values('xxxx'); とすると通ります noはなくてもいいのです PHPの時にはnoが省略できないので困ってます これは自動インクリメントですからいちいち設定するわけにはいけないので・・・ なおFedoraCore3の標準インストールしたものでやってます

guuman
質問者

補足

ありがとうございます 出力結果も合わせて次の様になります 本文:□[送信] (フォームのつもりです) Warning: pg_query(): Query failed: ERROR: permission denied for sequence gomibbs_no_seq in /var/www/html/gomi.php on line 11 1:fだdふぁ 2:aaa 3:bbbbbbbbb このPHPをnoを1つづつ訂正したPHPでやるとデータベースに書き込まれます そのときにはエラーは出ませんが次にやるときには数字を増やさないと当然エラーになります これはテスト用ですからもとのPHPが動かなければなりません

関連するQ&A

  • 次の掲示板PHPにアクセスすると

    <?php echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "本文:<input type=\"text\" size=\"80\" name=\"contents\">"; echo "<input type=\"submit\" value=\"送信\">"; echo "</form>"; $con=pg_connect("dbname=gomidb user=gomiuser host=127.0.0.1"); $contents=$_POST['contents']; if ($contents) { $contents=pg_escape_string(htmlspecialchars($contents)); pg_query($con,"insert into gomibbs(contents) values('$contents')"); } $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print $row['no'].":".$row['contents']."<br>"; } pg_close($con); ?> エラーになります ところが pg_query($con,"insert into gomibbs(contents) values('$contents')"); の所を pg_query($con,"insert into gomibbs(no,contents) values(1,'$contents')"); とすれば一度だけOKです どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • XPにPHP5とPostgreSQL8を入れて

    コマンドラインで create table tbl_ken(i_ken int4,ken text); insert into tbl_ken values(1,'北海道'); ・・・・・・・・・・・・・ ・・・・・・・・・・・・・ insert into tbl_ken values(47,'沖縄'); としテーブルを作っておき <?php $x='北海道'; $con=pg_connect(・・・・・・); $rs=pg_query($con,'select * from ken where ken="'.$x.'" order by i_ken'; ?> とすると文字化けしているようでpg_queryの部分でエラーになります どうしたら文字化けしないようにできるでしょうか?

    • ベストアンサー
    • PHP
  • PHPの掲示板について

    下記のソースコードを実行したところページは表示されるのですが 記事を書き込み画像を添付して送信することができませんでした。 どのように修正すればいいでしょうか <?php $con = pg_connect("dbname=postgres user=postgres password=postgres"); if ($_POST['write']) { $name = get_form($_POST['name']); if (strlen($name) > 100) exit(); if (!$name) $name = "名無しさん"; $title = get_form($_POST['title']); if (strlen($title) > 100) exit(); if (!$title) $title = "無題"; $contents = get_form($_POST['contents']); if (strlen($contents) > 500) exit(); if (!$contents) error("本文を入力してください"); $delkey = get_form($_POST['delkey']); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("delkey", $delkey, $expire); $tname = $_FILES['image']['tmp_name']; if ($tname) { if (!is_uploaded_file($tname)) error("不正なアップロード"); $type = $_FILES['image']['type']; if ($type != "image/jpeg" && $type != "image/pjpeg") { error("JPEG形式ではありません"); } $rs = pg_query($con, "select last_value from pgbbs3_no_seq"); $no = pg_fetch_result($rs, 0, 0) + 1; $path = "image/$no.jpg"; move_uploaded_file($tname, $path); $path_t = "image/{$no}_t.jpg"; list($sw, $sh) = getimagesize($path); $dw = 128; $dh = $dw * $sh / $sw; $src = imagecreatefromjpeg($path); $dst = imagecreatetruecolor($dw, $dh); imagecopyresized($dst, $src, 0, 0, 0, 0, $dw, $dh, $sw, $sh); imagejpeg($dst, $path_t); } pg_query($con, "insert into pgbbs3(name,title,contents,delkey) values('$name','$title','$contents','$delkey')"); } else { $name = $_COOKIE['name']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { $no = get_form($_POST['no']); $delkey = get_form($_POST['delkey']); $rs = pg_query($con, "delete from pgbbs3 where no=$no and delkey='$delkey'"); if (pg_affected_rows($rs) == 0) error("記事削除に失敗しました"); } // フォームの文字列を取得する function get_form($str) { $str = pg_escape_string(htmlspecialchars($str)); $str = ereg_replace("\n|\r|\r\n", "<br>", $str); return $str; } // エラー表示して終了 function error($msg) { print "<p><font color='red'>$msg</font></p>\n"; exit(); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>画像アップロード掲示板</title> </head> <body> <p>JPEGファイルのみアップロードできます。</p> <form method="post" action="pgbbs3.php" enctype="multipart/form-data"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> 題 名:<input type="text" name="title"><br> <input type="hidden" name="max_file_size" value="30000"> 画像:<input type="file" name="image"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> </form> <hr> <form method="post" action="pgbbs3.php"> 記事番号:<input type="text" name="no"> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"> <input type="submit" name="delete" value="記事削除"> </form> <?php $rs = pg_query($con, "select * from pgbbs3 order by no desc"); while ($row = pg_fetch_array($rs)) { $time = substr($row['time'], 0, 19); $no = $row['no']; print "<hr>No.{$no} <strong>{$row['title']}</strong>"; print " 投稿者:{$row['name']} 投稿日時:$time"; $fn = "image/{$no}.jpg"; $fn_t = "image/{$no}_t.jpg"; if (file_exists($fn)) print "<br><br><a href='$fn'><img src='$fn_t' border='0'></a>"; print "<br><br>{$row['contents']}\n"; } pg_close($con); ?> </body> </html>

    • 締切済み
    • PHP
  • pg_queryの結果を2回とりだすことは無理?

    $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print "{$row['no']}:{$row['contents']}<br>"; } において もう一度$rsの結果を取りだすにはどうしたいいのでしょうか?

    • ベストアンサー
    • PHP
  • 連続で実行するには?

    下のように、PostgreSQL に接続して insert を実行するプログラムを書いたのですが、 これらの3つのinsert 文を一気に実行してしまいたい場合、どうすればよいのでしょうか? // insert $sql = "insert into area values (1,'中央区')"; $sql = "insert into area values (2,'東区'); $sql = "insert into area values (3,'西区'); //ここより本文です。 <?php // connect $db_con = pg_connect("","","fuk_gourmet"); if($db_con == false) {print "cannot connect"; exit;} // insert (これだと一つしか実行できない) $sql = "insert into area values (1,'中央区')"; // execute $rs = pg_exec($db_con, $sql); if($rs == false) {print "execute error"; exit;} pg_freeresult($rs); pg_close($db_con); ?>

    • ベストアンサー
    • PHP
  • PHPで取得した日時データをDBに挿入する方法

    こんにちは。 以下のようにMariaDBのコマンドで「sysdate()」を使用して日時を入力しているのですが、PHPで同様のことができずに困っています。 ご教示頂けませんか。 宜しくお願い致します。 【MariaDB】 MariaDB [tweet01]> insert tweet_tbl(account, contents, input_datetime) values('account01', 'contents01', sysdate()); MariaDB [tweet01]> select * from tweet_tbl; +----+-----------+------------+---------------------+ | id | account | contents | input_datetime | +----+-----------+------------+---------------------+ | 6 | account01 | contents01 | 2016-04-19 00:24:36 | +----+-----------+------------+---------------------+ 【PHP】 $account = $_REQUEST['account']; $contents = $_REQUEST['contents']; $input_datetime = "echo date( "Y-m-d H:i:s" )"; $result = mysqli_query($con, "insert into tweet_tbl(`account`, `contents`, `input_datetime`) values('$account', '$contents', '$input_datetime')"); 以下の行をうまく修正できれば解決しそうな気がしているのですが… $input_datetime = "echo date( "Y-m-d H:i:s" )";

    • ベストアンサー
    • PHP
  • MySQLとPHP(HTML)の連携について

    送信側では、PHP(HTML)下記のように書きました。 ----------------------------- <form action="input.php" method="post"> ボタン1:<input type="submit" name="input" value="入力">   ボタン2:<input type="submit" name="input2" value="入力"> </form> ----------------------------- 受信側(input.php)は下記のように書きました。 ----------------------------- <?php $url = "***.sakura.ne.jp"; $user = "abc"; $pass = "12345"; $db = "sakura_db"; if (isset($_POST["$input"])){ $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM MAIN"; }elseif (isset($_POST["$input2"])){ $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM MAIN2"; } //Connect MySQL Server $my_Con = mysql_connect($url,$user,$pass); mysql_query("SET NAMES utf8",$my_Con); if ($my_Con == false){ die("MySQL Server接続に失敗しました。"); } //Connect MySQL DataBase if (!mysql_select_db($db,$my_Con)){ die("MySQL DataBase選択に失敗しました。"); } //MySQL Deta Read $my_Row = mysql_query($sql,$my_Con); if (!$my_Row){ die(mysql_error()); } $a = 1; while ($row = mysql_fetch_array($my_Row) or $a <= 50) { echo ' <p>'; echo ' A'.$a.':<input name="date" type="text" size="4" value="'.$row["a"].'">'; echo ' B'.$a.':<input name="date" type="text" size="4" value="'.$row["b"].'">'; echo ' C'.$a.':<input type="checkbox" name="example"'.check($row["c"]).'>'; echo ' D'.$a.':<input type="checkbox" name="example"'.check($row["d"]).'>'; echo ' </p>'; $a++; } //Close MySQL Server $my_Con = mysql_close($my_Con); if (!$my_Con) { exit("MySQL Server閉じられませんでした。"); } ?> ----------------------------- この状態で送信側のボタンをクリックすると、input.php側では”Query was empty”とエラーがでます。 送信側の2つあるボタンによって表示されるテーブルを変えたいのですが、何が原因なのでしょうか? そもそもSQLの内容をif文での条件分岐は出来ないのでしょうか? 最近PHPを勉強し出した初心者です。 出来れば分かりやすく教えていただけないでしょうか。 よろしくお願い致します!

    • ベストアンサー
    • PHP
  • PHP+MySQLでのINSERTについての質問です。

    insert.html(入力フォーム)で <input type="text" name="company_nm" size="80"> を <form name="form1" method="post" action="insert_kakunin.php"> <input type="submit" value=" 次 へ "> で送って insert_kakunin.php(確認画面)で <input type="hidden" name="company_nm" value="<?= $company_nm ?>"> <?php print $_POST["company_nm"]; ?> で表示させます。 それを <form name="form1" method="post" action="insert.php"> <input type="submit" value=" 決 定 "> で insert.php(DB処理)で DB接続した後に $sql='INSERT INTO Sample (company_nm) VALUES("'.$_POST['company_nm'].'"); というふうにINSERTしたいんですが、VALUESに入力した値が入りません。 print $sql; print ($_POST['company_nm']); で見ても「""」となっています。 値の渡し方を教えてください。

    • ベストアンサー
    • PHP
  • php 投票システム

    データベースと連動した投票システムを考えております。 phpとMySQLを使用したもので、対応するボタンを押すと1票投じられるというものです。 この仕組み自体は実現できたのですが、 ブラウザの更新ボタンを押すと、『情報を再送信する必要があります』と表示され、『はい』を押すと、自動的に1票投じられてしまいます。 スクリプトは以下のようになるのですが、上記のような不具合を修正するためにはどうすればよいのでしょうか。 アドバイス、具体的なソース、また、他の部分における修正すべき箇所など、ご指摘いただきたいと思います。 よろしくお願いいたします。 <?php echo "<table border=0>"; echo "<tr><td colspan=4 align=left><img src=logo-touhyou.gif></td></tr>"; echo "<tr><td><form method=post action="; echo $_SERVER["PHP_SELF"]; echo "><input type=hidden value=1 name=posi><input type=image src=logo-posi-s.gif border=0></form></td>"; echo "<td><form method=post action="; echo $_SERVER["PHP_SELF"]; echo "><input type=hidden value=1 name=deep><input type=image src=logo-deep-s.gif border=0></form></td></tr></table>"; $posi=$_POST["posi"]; $deep=$_POST["deep"]; if ($posi==1){ $server="mysql..jp"; $dbname="LA"; $user="LA"; $pass=""; $conn = mysql_connect($server,$user,$pass); $conndb = mysql_select_db($dbname); $sql="SELECT posi FROM test WHERE id =1 LIMIT 1"; $res=mysql_query($sql); while($row = mysql_fetch_assoc($res)) { $row_con=mb_convert_encoding($row["posi"], "shift_jis", "auto"); echo $row_con; echo "<br>"; $number1=1; $after=$row_con+$number1; echo $after; echo "<br>"; mysql_query("LOCK TABLES test WRITE"); $sql_1="UPDATE test SET posi='$after3' WHERE id =1 LIMIT 1"; $ins=mysql_query($sql); mysql_query("UNLOCK TABLES"); if ($ins_1){ echo "ポジティブ投票完了"; } $sql_2="SELECT posi FROM test WHERE id =1 LIMIT 1"; $res_2=mysql_query($sql_2); while($row_2 = mysql_fetch_assoc($res_2)) { $row_con_2=mb_convert_encoding($row_2["posi"], "shift_jis", "auto"); echo $row_con_2; } } mysql_close($conn); } if ($deep==1){ $server="mysql..jp"; $dbname="LA"; $user="LA"; $pass=""; $conn = mysql_connect($server,$user,$pass); $conndb = mysql_select_db($dbname); $sql2="SELECT deep FROM test WHERE id =2 LIMIT 1"; $res2=mysql_query($sql2); while($row2 = mysql_fetch_assoc($res2)) { $row_con2=mb_convert_encoding($row2["deep"], "shift_jis", "auto"); echo $row_con2; echo "<br>"; $number1=1; $after2=$row_con2+$number1; echo $after2; echo "<br>"; mysql_query("LOCK TABLES test WRITE"); $sql2_2="UPDATE test SET deep='$after2' WHERE id =2 LIMIT 1"; $ins2=mysql_query($sql2_2); mysql_query("UNLOCK TABLES"); if ($ins2){ echo "ディープ投票完了"; } $sql2_2="SELECT deep FROM test WHERE id =4 LIMIT 1"; $res2_2=mysql_query($sql2_2); while($row2_2 = mysql_fetch_assoc($res2_2)) { $row_con2_2=mb_convert_encoding($row2_2["deep"], "shift_jis", "auto"); echo $row_con2_2; } } mysql_close($conn); } ?>

    • ベストアンサー
    • PHP
  • PHP 未定義の変数について

    以前にも質問しましたが、新たに壁にぶつかってしまったので再度投稿させていただきます。 ToDoリストを作っており、予定を入力フォームからデータベースへ登録、表示することまではできました。 現在は、表示されている全ての予定レコードの右端に"更新"と"削除"のボタンを設置し、それぞれの動作を行いたいと考えております。 それぞれのボタンに<input type=hidden name=No value='.$row[No].'>と記述し、更新箇所を入力するフォームを別ファイルで用意してあります。 しかし"更新"ボタンを押しても、 Notice: Undefined variable: No in C:\××××××××××\input_update.php on line 17 データは削除済か、もしくは存在しません。 というエラーメッセージが出てしまいます。(※"データは削除済みか~"は自分で記述したメッセージです。)実際にデータはあるので、変数の受け渡しがうまくいってないと思うのですが・・・ 調べると、「未定義の変数があるよ」という事なのでしょうが、未定義の変数というものが分かりません。 all_todo.php <?php $conn = mysql_connect("localhost","root","×××"); if($conn == false) {die("MySQL 接続エラー");} mysql_set_charset("sjis"); mysql_select_db("todo"); $sql="SELECT * FROM `todo`"; $todo_list=mysql_query($sql); while($row=mysql_fetch_array($todo_list)) { echo("<tr id='honbun'>"); echo("<td>"."<input id='c_change' type='checkbox' name='check' value='check'>".$row["済"]."</td>"); echo("<td id='No'>".$row["No"]."</td>"); echo("<td id='title'>".$row["タイトル"]."</td>"); echo("<td id='todo'>".$row["内容"]."</td>"); echo("<td id='limit'>".$row["期限"]."</td>"); echo("<td id='priority'>".$row["優先度"]."</td>"); echo("<form action=input_update.php method=post>"); echo("<input type=hidden name=No value='.$row[No].'>"); echo("<td><input type=submit value=更新></td>"); echo("</form>"); echo("<form action=input_update.php method=post>"); echo("<input type=hidden name=No value='.$row[No].'>"); echo("<td><input type=submit value=削除></td>"); echo("</form>"); echo("</tr>\n"); } mysql_free_result($todo_list); mysql_close(); ?> input_update.php <?php $conn = mysql_connect("localhost","root","×××"); if($conn == false) {die("MySQL 接続エラー");} mysql_set_charset("sjis"); mysql_select_db("todo"); $sql="SELECT `No`,`タイトル`,`内容`,`期限`,`優先度` FROM `todo` WHERE `No`='$No'"; $todo_list=mysql_query($sql); if(!$row=mysql_fetch_array($todo_list)) {die("データは削除済か、もしくは存在しません。");} echo "<form action=update.php method=post>"; echo "タイトル<input type=text name=タイトル value=\"" . $row["title"] . "\"> "; echo "内容<input type=text name=内容 value=\"" . $row["todo"] . "\"> "; echo "期限<input type=text name=期限 value=\"" . $row["limit"] . "\"> "; echo "優先度<input type=text name=優先度 value=" . $row["priority"] . "> "; echo "<input type=hidden name=id value=" . $id . ">"; echo "<input type=submit value=更新>"; echo "</form>"; mysql_free_result($todo_list); mysql_close(); ?> というコードです。 私の推測では、 >{die("データは削除済か、もしくは存在しません。");} というメッセージが表示されていることから、フォームからデータの受け渡しは出来ているのだと思います。ただ、意図した変数が渡されていないと思うのですが、フォームのvalue='.$row[No].'という記述に問題があるのか、はたまたname=Noの部分か、SELECT文の記述が悪いのかまったく分かりません。 どなたか知恵をお貸しください。 お願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう