0

これで私が得ることができる助けを本当に感謝します。

フォームに本当に問題があり、mysql_real_escape_string がまったく機能しないようです。

私は PHP で MySQL 5.5 を使用しています。それをテストするために、マジック クォートがまったくオンになっていない単純なフォームを作成しました。

このフォームの使用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form name="event_ad" action="test.php" method="post">
    <table>
    <tr>
        <td>Event Name:</td>
        <td><input name="event_name" type="text" size="90" /></td>
    </tr>
    <tr>
        <td>Start Date:</td>
        <td><input name="start_date" type="text" size="90" /></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><input name="Submit" type="submit" id="Submit" value="Add New Event" /></td>
    </tr>
    </table>
</form>
</body>
</html>

次に、test.php を使用してデータをテーブルに入力します。

<?php
    mysql_connect("localhost","username","password") or die(mysql_error());
    mysql_select_db("databasename") or die(mysql_error());

    $name = $_POST['event_name'];
    $sdate = $_POST['start_date'];
    $name = mysql_real_escape_string($name);

    $sql = "INSERT INTO tblevents (event_name, event_date) VALUES ('" . $name . "','" . $sdate . "')";

    mysql_query($sql);

    echo "success";
?>

(接続の詳細が変更されました)

イベント名 O'Rielly "Smith" を入力すると、MySQL テーブルに O'Rielly "Smith" として挿入されます

バックスラッシュもエスケープもまったくありません。

私は本当にこれを解決しようとしてインターネットを精査しましたが、それは他の誰にとってもうまくいくようです.

ここで基本的なことを誤解していますか?誰かが私を正しい方向に導くことができれば、心から感謝します。

これはこのフォーラムでの私の最初の投稿であり、html とコードのフォーマットは、私が訪れたほとんどのフォーラムと同じではないようです。

助けを提供してくれた人に事前に感謝します。乾杯アル。

4

5 に答える 5

3

これは仕様によるものであり、テーブルにエスケープされた入力が表示されないようにする必要があります。入れるだけです。を使用するmysql_real_escape_stringと、クエリは次のようになります

INSERT INTO tblevents (event_name, event_date) VALUES ('O\'Rielly \"Smith\"','1.4.2001')";

これらのバックスラッシュは、アポストロフィを壊さないようにします

MySQL は、バックスラッシュでエスケープされるまで、すべてのバックスラッシュを「削除」します:)

于 2012-05-03T14:35:00.410 に答える
2

イベント名 O'Rielly "Smith" を入力すると、MySQL テーブルに O'Rielly "Smith" として挿入されます

それが起こるはずです。

エスケープすると、元のデータがデータベースに格納されるように、データがクエリを通過します。目的は、保存されたデータに余分な文字を追加することではなく、特別な意味を持つ文字が SQL を壊さないようにすることです。

于 2012-05-03T14:35:39.510 に答える
0

逃げることは、誕生日プレゼントの包装紙に相当すると考えてください。

転送プロセス中にデータ内の特殊文字が特別な意味を失うように、データをエスケープします。それらがターゲット システム (html ページ、データベース レコードなど) の「内部」に入ると、プロセスに影響を与えた可能性のある場所がなくなったため、エスケープは不要になります。

ラッピングされたプレゼントも同様です。プレゼントを受け取ると、ラッピングペーパーは不要になるため、取り除かれます。

于 2012-05-03T14:37:23.360 に答える
0

それはうまくいきました。

を削除するmysql_real_escape_stringと、データが挿入されなくなります。

于 2012-05-03T14:38:10.223 に答える
0
$name = $_POST['event_name'];
$sdate = $_POST['start_date'];


$db = new mysqli("localhost", "username", "password", "databasename");

$query = "INSERT INTO tblevents (event_name, event_date) VALUES (?, ?)";
$statement = $db->prepare($query);
$statement->bind_param("ss", $name, $sdate);

$statement->execute();
$statement->close();

$db->close();

(接続時のエラーチェックは省いています)

于 2012-05-03T14:42:52.207 に答える