10

like.phpデータベースに接続して行を挿入するというページへのjQuery AJAXリクエストを使用しています。これはlike.phpコードです:

<?php

// Some config stuff
define(DB_HOST, 'localhost');
define(DB_USER, 'root');
define(DB_PASS, '');
define(DB_NAME, 'quicklike');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('ERROR: ' . mysql_error());
$sel = mysql_select_db(DB_NAME, $link) or die('ERROR: ' . mysql_error());

$likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));
$timeStamp = time();

if(empty($likeMsg))
    die('ERROR: Message is empty');

$sql = "INSERT INTO `likes` (like_message, timestamp)
        VALUES ('$likeMsg', $timeStamp)";

$result = mysql_query($sql, $link) or die('ERROR: ' . mysql_error());

echo mysql_insert_id();

mysql_close($link);

?>

問題の行は$likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. 空の文字列を返すだけのようで、データベースのlike_message列の下に表示されるのは空白のエントリだけです。ただし、削除すると、正常にmysql_real_escape_string()機能します。

役立つ場合は、これが私のjQueryコードです。

$('#like').bind('keydown', function(e) {
    if(e.keyCode == 13) {
        var likeMessage = $('#changer p').html();

        if(likeMessage) {
            $.ajax({
                cache: false,
                url: 'like.php',
                type: 'POST',
                data: { likeMsg: likeMessage },
                success: function(data) {
                    $('#like').unbind();
                    writeLikeButton(data);
                }
            });
        } else {
            $('#button_container').html('');
        }
    }
});

この jQuery コードはすべて正常に動作します。私は独自にテストしました。

どんな助けでも大歓迎です、ありがとう。

4

5 に答える 5

22

$_POST["likeMsg"]実際に何かが含まれていると 1000% 確信していますか?

空の値をmysql_real_escape_string()返すことに関しては、 マニュアルでは、それが発生する可能性がある状況は 1 つしかないと述べています。

注: mysql_real_escape_string() を使用する前に MySQL 接続が必要です。そうしないと、レベル E_WARNING のエラーが生成され、FALSE が返されます。link_identifier が定義されていない場合、最後の MySQL 接続が使用されます。

ただし、接続が開いているため、ここではそうではないようです。変。

于 2010-06-09T11:00:36.447 に答える
3

今またこれを見つけているかもしれない人のために、私は PHP5 から PHP7 に移行しているときにこの問題に遭遇しました。から変えています

string mysql_real_escape_string(string $unescaped, [resource $link = NULL])

に:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

つまり、データベースの $link はオプションではなくなり、最初の引数の位置に移動します。省略した場合、明らかにエラーなしで空の文字列が返されます。

于 2016-09-18T00:37:45.753 に答える
1

$_POST['likeMsg'] の var_dump と $likeMsg の var_dump を実行します。これにより、何が問題なのかについての情報が得られます。

于 2010-06-09T11:02:14.560 に答える
0

データベースに接続していない場合、mysql_real_escape_string() は空白の応答を返します ...

于 2016-11-13T19:19:00.253 に答える