0

現在、HTML ページを出力する印刷関数で php 関数を適切にエスケープする方法がわかりません。

たとえば、ID に従ってクライアントを削除したい removeClient というページがあります。ドロップダウン ボックスは、現在利用可能なクライアント ID をユーザーに提供し、いずれかをクリックできるようにする必要があります。

URL によって提供されるビューに従って関数が呼び出されるメイン ページがあります。

ここで、ページに、Postgres データベースから提供された ID を含むドロップダウン メニューを印刷し、新しいユーザー データを入力するフォームをいくつか印刷します。

呼び出される関数は次のとおりです。

    function removeClient() {

    include 'dbconnect.php';

    if ((isset($_POST['add']))) {

        if (isset($_POST['ID']) && (isset($_POST['FirstName'])) && (isset($_POST['LastName'])) && (isset($_POST['IP'])) && (isset($_POST['Status']))) {
            $clientid = $_POST['ID'];
            $FirstName = $_POST['FirstName'];
            $LastName = $_POST['LastName'];
            $ip = $_POST['IP'];
            $status = $_POST['Status'];

            $result = pg_query($dbconnection, "somequery");

            if (@pg_affected_rows($result) === 1) {

                echo "<p> Client removed!</p>";
            } else {

                echo "<p> Something went horribly wrong. Contact a system adminstrator </p>";
            }
        }
    }


    echo

    "<form name=\"addClient\" method=\"post\" action=\"?view=addClient\"/><br/>" .
    "<select name=\"clientID\" id=\"clientID\">         " .
    "<td>ID</td> <tr><input type=\"text\" maxlength=\"32\" name=\"ID\" /></tr><br/>" .
    "<td>First Name</td> <tr><input type=\"text\" maxlength=\"32\" name=\"FirstName\" /></tr><br/>" .
    "<td>Last Name</td> <tr><input type=\"text\" maxlength=\"32\" name=\"LastName\" /></tr><br/>" .
    "<td>IP Addr.</td> <tr><input type=\"text\" maxlength=\"32\" name=\"IP\" /></tr><br/>" .
    "<td>Status</td> <tr><input type=\"text\" maxlength=\"32\" name=\"Status\" /></tr><br/>" .
    "<input type=\"submit\" name=\"add\" value=\"Send\" /></form><br/>";
}

今、私がやりたいのは、行 " " を変更することです。

Postgres が PHP を介してデータベースの値をロードする行に移動します。

PHP の部分については、これを取得しました。

    <option>Select userID</option>
<?php
$db = pg_connect("connection details") 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>
<input type="hidden" name="userid" id="userid" value="<?php echo htmlspecialchars($user_id); ?>">

さて、HTMLページを印刷するエコー呼び出しでこれを実装する方法がわかりません。私は多くのエスケープを試みましたが、まだ役に立ちません。このコードをフォーム構造に効率的に追加するにはどうすればよいですか?

4

3 に答える 3

0

TimeSPLiNTER が指摘したように、これを変更する必要があります。

echo '<option value="'.htmlspecialchars($row['title']).'"></option>';}

echo '<option>'.htmlspecialchars($row['title']).'</option>';}
于 2013-11-04T10:11:38.640 に答える
0

htmlspecialcharsENT_QUOTESにパラメーターが欠落している可能性がありますか?

htmlspecialchars($row['title'], ENT_QUOTES)

また、htmlspecialchars(および/またはhtmlentities)ドキュメントをチェックして、他のパラメータを確認してください(3番目は charset に関するものです)

編集:<option value="something"></option>値を表示できるかどうかわからないので、これも試してみてください:

echo '<option>'.htmlspecialchars($row['title'], ENT_QUOTES).'</option>';}
于 2013-11-04T10:08:00.473 に答える