Pergunta

Estou usando uma solicitação jQuery Ajax para uma página chamada like.php que se conecta ao meu banco de dados e insere uma linha. Isto é o like.php código:

<?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);

?>

A linha problemática é $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. Parece apenas retornar uma string vazia e no meu banco de dados sob o like_message Coluna tudo o que vejo são entradas em branco. Se eu remover mysql_real_escape_string() No entanto, funciona bem.

Aqui está o meu código jQuery se ajudar.

$('#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('');
        }
    }
});

Todo esse código jQuery funciona bem, eu o testei de forma independente.

Qualquer ajuda é muito apreciada, obrigado.

Foi útil?

Solução

Você tem 1000% de certeza de que $_POST["likeMsg"] Na verdade, contém algo?

Quanto a mysql_real_escape_string() retornando um valor vazio, o manual diz que existe apenas uma situação em que isso pode acontecer:

NOTA: Uma conexão MySQL é necessária antes de usar o mysql_real_escape_string (), caso contrário, um erro do nível E_WARNING é gerado e o false será retornado. Se link_entifier não estiver definido, a última conexão MySQL será usada.

Porém, esse não parece ser o caso, pois você tem uma conexão aberta. Estranho.

Outras dicas

Como as outras respostas não deixam claro o que exatamente fazer, aqui está o meu:

Quando você faz

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

Você precisa escapar assim:

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

Nota: Como as pessoas estão voando isso (WTF!?), Aqui está a página oficial do manual oficial do PHP que diz exatamente o que eu publiquei: real_escape_string @ php manual.

Para as pessoas que podem estar encontrando isso de novo agora, eu apenas encontrei esse problema, pois estou migrando do PHP5 para o PHP7. Estou mudando de

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

para:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Portanto, em outras palavras, o link do banco de dados $ não é mais opcional e se move para a primeira posição de argumento. Se deixado de fora, ele retorna uma corda vazia, sem um erro, aparentemente.

Faça um var_dump de $ _post ['LIKEMSG'] e um var_dump de $ LIKEMSG. Isso fornece informações sobre o que dá errado.

mysql_real_escape_string () retornará a resposta em branco se você não fizer conexão com o banco de dados ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top