0

このコードを 2 ステップ フォームの 1 つで使用しています。ここでは、ステップ 2.php でフォーム入力を検証してセッションに保存し、ステップ 3.php ページでセッションからフォーム入力を取得しています。また、最終段階で検証コードを再実行する必要があるため、それらを $formData 配列に割り当てています。

    $name = $formData["name"] = $string->formatInput($session->getSession("mechanic_buy_name"), 1);
    $garage_name = $formData["garage_name"] = $string->formatInput($session->getSession("mechanic_buy_garage_name"), 1, "None");
    $address = $formData["address"] = $string->formatInput($session->getSession("mechanic_buy_address"), 1);

$string->formatInput("STRING GOES HERE" , 1) は、addslashes 関数を追加するラッパー関数です。

ASWT の Tech をガレージ名に入力するとします。

このSQLクエリを使用して、レコードをデータベースに保存します

    $sql = "INSERT INTO ". TABLE_MECHANICS ."";
    $sql .= "(name, garage_name, address, town, county, postcode, mobile, landline, fax, email, website, services_other, start_date, duration, expiry_date, datecreated, datemodified) VALUES";
    $sql .= "('$name', '$garage_name', '$address', '$town', '$county', '$postcode', '$mobile', '$landline', '$fax', '$email', '$website', '$services_other', '$start_date', '$duration', '$expiry_date', NOW(), NOW())";
    $query = $mysql->query($sql);

しかし、phpmyadmin を介してデータベースを表示すると、引用符の前にエスケープ文字が表示されません

これは、garage_name が phpmyadmin ASWT で表示されているものです。

一方、addslashes ($string->formatInput(...)) が適用された後は、ASWT\'s\' のようになるはずです。

どこが間違っているのか、addslashes 関数が適用されない理由を教えてください。

この構文は正しいですか?

$name = $formData["name"] = $string->formatInput($session->getSession("mechanic_buy_name"), 1);

$name をエコーし​​てもエスケープ文字が表示されません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

mysql 拡張機能を使用している場合 (使用すべきではありません)、addslashes の代わりに mysql_real_escape_string を使用します。または、mysqli 拡張機能を使用する場合は mysqli_real_escape_string です。または、準備済みステートメントを使用します。

于 2013-03-23T22:19:58.220 に答える