Pregunta

Estoy utilizando una solicitud de jQuery AJAX para una página llamada like.php que se conecta a mi base de datos y se inserta una fila. Este es el código 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);

?>

La línea problemático es $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. Parece que acaba de devolver una cadena vacía, y en mi base de datos en la columna de la like_message todo lo que veo es entradas en blanco. Si quito mysql_real_escape_string() embargo, funciona bien.

Aquí está mi código jQuery si ayuda.

$('#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 funciona este código jQuery bien, he probado a mí mismo de forma independiente.

Cualquier ayuda es muy apreciada, gracias.

¿Fue útil?

Solución

¿Estás seguro de que 1,000% $_POST["likeMsg"] realidad contiene algo?

En cuanto a mysql_real_escape_string() devolver un valor vacío, el manual de dice que sólo hay una situación en la que puede suceder :

  

Nota: Se requiere la conexión A MySQL antes de usar mysql_real_escape_string () de lo contrario se genera un error de nivel E_WARNING, y se devuelve FALSE. Si no se define id_enlace, se utiliza la última conexión MySQL.

esto no parece ser el caso aquí, sin embargo, que usted tiene una conexión abierta. Extraña.

Otros consejos

Como las otras respuestas no dejan claro exactamente qué hacer, aquí está mi:

Al hacer

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

tiene que escapar de esta manera:

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

NOTA: Debido a que la gente está downvoting esto (WTF !?), aquí está la página oficial del manual oficial de PHP que dice exactamente lo que he publicado: real_escape_string @ PHP Manual .

Para las personas que podrían ser la búsqueda de este nuevo ahora, sólo se encontró con este problema ya que estoy migrando desde PHP5 a PHP7. Estoy cambiando de

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

a:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Por lo tanto, en otras palabras, la base de datos de enlace $ ya no es opcional y se desplaza a la primera posición argumento. Si se deja fuera, devuelve una cadena vacía, sin un error, al parecer.

Hacer una var_dump de $ _POST [ 'likeMsg'], y una var_dump de $ likeMsg. Eso le da información sobre lo que va mal.

mysql_real_escape_string () devolverá la respuesta en blanco si no se ha realizado la conexión a la base de datos ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top