Вопрос

Я использую запрос jQuery ajax на страницу под названием like.php Это подключается к моей базе данных и вставляет строку. Это 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 работает нормально, я сам проверил это самостоятельно.

Любая помощь значительно ценится, спасибо.

Это было полезно?

Решение

Вы уверены, что на 1000% $_POST["likeMsg"] на самом деле содержит что-то?

Что касается mysql_real_escape_string() возвращение пустого значения, руководство говорит, что есть только одна ситуация, когда это может случиться:

ПРИМЕЧАНИЕ. Перед использованием MySQL_REAL_ESCAPE_STRING () подключение MySQL требуется. Если Link_identifier не определен, используется последнее соединение MySQL.

Это, похоже, это не так, как у вас есть связь открыта. Странный.

Другие советы

Поскольку другие ответы не дают ясно, что именно делать, вот мой:

Когда вы делаете

$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE);

Вы должны сбежать так:

$newEscapedString = $db_connection->real_escape_string($unescapedString);

Примечание. Поскольку люди снижают это (WTF!?), Вот официальная страница официального руководства PHP, которая говорит именно то, что я опубликовал: Real_escape_String @ PHP руководство.

Для людей, которые могут найти это снова сейчас, я просто побежал в эту проблему, так как я мигрирующую из PHP5 до PHP7. Я меняюсь из-за

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

к:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Итак, другими словами, база данных $ link больше не является необязательной и перемещается к первому позиции аргумента. Если оставлено, он возвращает пустую строку без ошибки, по-видимому,.

Делайте var_dump of $ _POST ['lakemsg'], а var_dump of $ likemsg. Это дает вам информацию о том, что идет не так.

MySQL_REAL_ESCAPE_STRING () вернет пустой ответ, если вы не сделали подключения к базе данных ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top