سؤال

أنا أستخدم طلب 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 قبل استخدام mysql_real_escape_string () وإلا يتم إنشاء خطأ في المستوى e_warning ، ويتم إرجاع خطأ. إذا لم يتم تعريف 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)

لذلك ، بمعنى آخر ، لم يعد ارتباط قاعدة البيانات $ اختياريًا وينتقل إلى موضع الوسيطة الأول. إذا تم تركها ، فإنها تُرجع سلسلة فارغة ، دون خطأ ، على ما يبدو.

قم بعمل var_dump من $ _post ['likemsg'] ، و far_dump من $ likemsg. هذا يمنحك معلومات حول ما يحدث.

سيعود mysql_real_escape_string () استجابة فارغة إذا لم تكن قد قمت بالاتصال بقاعدة البيانات ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top