0

編集: コードが変更され、最新のエラーについて質問が更新されました。

などのクエリを使用して postgreSQL データベースから本のタイトルのドロップダウン リストを作成しSELECT title FROM books WHERE ownedBy = [users facebook ID]、ユーザーによる選択を使用してその本の残りの情報を表示する必要があります。このページは Facebook アプリであり、Facebook ID を取得する方法です。

これはこれまでのコードの関連セクションであり、主に私が見つけた同様の質問に対するさまざまな回答から作成されています。

<form action="updateform.php" method="post">
  <input type="hidden" name="userid" id="userid" value="<?php echo htmlspecialchars($user_id); ?>"
  <select name="booktitle" id="booktitle">
  <option>Select book</option>
  <?php
    $db = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432 dbname=d6fh4g6l0l6gvb user=zmqygfamcyvhsb password=1Apld4ivMXSK8JZ_8yL7FwIuuz sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());
    $sql = pg_query("SELECT title FROM books WHERE ownedby='$user_id'";
    while ($row = pg_fetch_assoc($sql)) {
    echo '<option value="'.htmlspecialchars($row['title']).'"></option>';}
    pg_close($db);
    ?>
    </select>
//other form elements here
</form>

現在、ドロップダウンボックスは表示されておらず、サーバーログにはpg_query() expects parameter 1 to be resource, string given in /app/www/update.php on line 275pg_fetch_assocの同じエラーが表示されています

誰かがドロップダウンボックスの部分を機能させるのを手伝ってくれるなら、それは今のところ素晴らしいことです.

4

4 に答える 4

1

この線

$sql = pg_query("SELECT title FROM books WHERE ownedby=("$user_id")");

$user_id の前の二重引用符が文字列 "SELECT ... を閉じているため、エラーが含まれています。簡単な修正は、"$user_id" を '$user_id' に変更し、中かっこ () を削除することです。

コードが SQL インジェクションに対して脆弱になるため、一般に、変数を SQL クエリに直接配置することはお勧めできません。準備、バインド、および実行ステートメントの使用を検討してください。

于 2013-03-27T17:26:20.413 に答える
1

引用符内のエスケープされていない引用符

これ

$sql = pg_query("SELECT title FROM books WHERE ownedby=("$user_id")");

する必要があります

$sql = pg_query("SELECT title FROM books WHERE ownedby='$user_id'");

または

$sql = pg_query("SELECT title FROM books WHERE ownedby=\"$user_id\"");
于 2013-03-27T17:25:09.677 に答える
1

これを試して:

<form action="updateform.php" method="post">
<select name="bookTitle">
  <?php
        $db = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432 dbname=d6fh4g6l0l6gvb user=zmqygfamcyvhsb password=[removed] sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());
        $sql = pg_query(sprintf("SELECT title FROM books WHERE ownedby=%d", $user_id));
        while ($row = pg_fetch_assoc($sql)) {
            echo '<option value="'.htmlspecialchars($row['title']).'"></option>';
        }
        pg_close($db);
  ?>
</select>

PHP タグを閉じる代わりに「echo」を使用していることに注意してください。

また、オプション値のタイトルではなく、おそらくIDを使用する必要があります:)

よろしく、フィル

于 2013-03-27T17:25:38.583 に答える
0

275 行目の引用符をエスケープしていません。

$sql = pg_query("SELECT title FROM books WHERE ownedby=\"$user_id\"");

また

$sql = pg_query('SELECT title FROM books WHERE ownedby="'.$user_id.'"');
于 2013-03-27T17:24:41.963 に答える