Question

J'utilise une demande jQuery AJAX à une page appelée like.php qui se connecte à ma base de données et insère une ligne. Ce code est le 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 ligne problématique est $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. Il semble revenir juste une chaîne vide, et dans ma base de données dans la colonne like_message tout ce que je vois est entrées vides. Si je retire mysql_real_escape_string() bien, cela fonctionne très bien.

Voici mon code jQuery si ça aide.

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

Tout ce code jQuery fonctionne très bien, je l'ai testé moi-même indépendamment.

Toute aide est grandement appréciée, merci.

Était-ce utile?

La solution

Êtes-vous sûr que 1000% $_POST["likeMsg"] contient en fait quelque chose?

En ce qui concerne le retour mysql_real_escape_string() une valeur vide, le manuel dit qu'il n'y a qu'une seule situation où cela peut arriver :

  

Remarque: Une connexion MySQL est nécessaire avant d'utiliser mysql_real_escape_string () sinon une erreur de niveau E_WARNING est générée, et FALSE est retourné. Si link_identifier n'est pas défini, la dernière connexion MySQL est utilisé.

cela ne semble pas être le cas ici même si, comme vous avez une connexion ouverte. Étrange.

Autres conseils

Comme les autres réponses ne font pas clairement ce exactement à faire, voici mon:

Quand vous faites

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

vous devez échapper comme ceci:

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

NOTE: Parce que les gens sont downvoting ce (WTF !?), voici la page officielle du manuel officiel de PHP qui dit exactement ce que j'ai posté: real_escape_string @ Manuel PHP .

Pour les personnes qui pourraient être de trouver ce nouveau maintenant, je viens de rencontrer ce problème que je migration de PHP7 à PHP5. Je change de

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

à:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Donc, en d'autres termes, la base de données $ link n'est plus facultative et se déplace vers la première position de l'argument. Si elle est omise, il retourne une chaîne vide, sans erreur, apparemment.

Faites un var_dump de $ _POST [ 'likeMsg'], et un var_dump de likeMsg $. Cela vous donne des informations sur ce qui va mal.

mysql_real_escape_string () retourne une réponse vide si vous ne l'avez pas fait la connexion à la base de données ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top