تغيير ديناميكي MySQL استعلام داخل ملف PHP باستخدام jQuery .post؟

StackOverflow https://stackoverflow.com/questions/2716838

  •  01-10-2019
  •  | 
  •  

سؤال

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

ما يحدث على موقعي هو أن المستخدم يسجل مع Twitter Oauth ويمكنني عرض تفاصيله (اسم مستخدم Twitter وما إلى ذلك). لديّ قاعدة بيانات أضفها المستخدم معلومات إلى ما أرغب في حدوثه هو عندما يقوم المستخدم بتسجيل الدخول مع Twitter Oauth ، يمكنني استخدام jQuery لأخذ اسم مستخدم المستخدمين وتحديث استعلام MySQL فقط لإظهار النتائج التي user_name = اسم المستخدمين بالذات.

في الوقت الحالي ، يكون استعلام MySQL:

"SELECT * FROM markers WHERE user_name = 'dave'"

لقد جربت شيئًا مثل:

"SELECT * FROM markers WHERE user_name = '$user_name'"

وفي أي مكان آخر في ملف php لدي $ user_name = $ _post ['user_name'] ؛. في ملف منفصل (تم إعادة توجيه المستخدم إليه بعد تسجيل الدخول عبر Twitter) لدي بعض jQuery مثل هذا:

$(document).ready(function(){
$.post('phpsqlinfo_resultb.php',{user_name:"<?PHP echo $profile_name?>"})});

تم تعريف $ profile_name في وقت سابق على تلك الصفحة.

أعلم أنني أفعل شيئًا خاطئًا بوضوح ، ما زلت أتعلم. هل هناك طريقة لتحقيق ما أريد استخدام jQuery لنشر اسم مستخدم المستخدمين إلى ملف PHP لتغيير استعلام MySQL لعرض فقط النتائج المتعلقة بالمستخدم الذي تم تسجيل الدخول. لقد قمت بتضمين ملف PHP مع الاستعلام أدناه :

    <?php
// create a new XML document
//$doc = domxml_new_doc('1.0');
$doc = new DomDocument('1.0');

//$root = $doc->create_element('markers');
//$root = $doc->append_child($root);
$root = $doc->createElement('markers');
$root = $doc->appendChild($root);
$table_id = 'marker';
$user_name = $_POST['user_name'];
// Make a MySQL Connection
include("phpsqlinfo_addrow.php");
    $result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'")
    or die(mysql_error());
// process one row at a time
//header("Content-type: text/xml");
header('Content-type: text/xml; charset=utf-8');
while($row = mysql_fetch_assoc($result)) {
    // add node for each row
  $occ = $doc->createElement($table_id);
  $occ = $root->appendChild($occ);
  $occ->setAttribute('lat', $row['lat']);
  $occ->setAttribute('lng', $row['lng']);
  $occ->setAttribute('type', $row['type']);
  $occ->setAttribute('user_name', utf8_encode($row['user_name']));
  $occ->setAttribute('name', utf8_encode($row['name']));
  $occ->setAttribute('tweet', utf8_encode($row['tweet']));
  $occ->setAttribute('image', utf8_encode($row['image']));
} // while
$xml_string = $doc->saveXML();
$user_name2->response;
echo $xml_string;
?>

هذا للاستخدام مع خريطة Google Mashup IM أحاول القيام به. شكرا جزيلا إذا كنت تستطيع مساعدتي. إذا لم يكن سؤالي واضحًا بما فيه الكفاية ، فيرجى القول وسأحاول توضيح لك. أنا متأكد من أن هذا إصلاح بسيط ، فأنا فقط عديمي الخبرة نسبيًا للقيام بذلك. كنت في هذا لمدة يومين وأنا نفاد الوقت لسوء الحظ.

هل كانت مفيدة؟

المحلول

في البداية ، يجب عليك الهروب

'SELECT * FROM markers WHERE user_name = `' . mysql_real_escape_string($user_name) . '`';

كما يقترح إريك ، لا تخرج من النافذة أكثر التحذيرات فائدة - على الأرجح ، ستظهر الإجابة في الوقت الحالي.

لكن ما لست متأكدًا منه هو الطريقة التي يعمل بها مزجك. قد يصبح الأمر أسهل كثيرًا إذا قمت بكل الأشياء داخل PHP نفسها ، مع حذف JavaScript على الإطلاق. قد ترغب أيضًا في التحقق من عوائد Oauth - يجب أن تمنحك معرف Twitter أو اسم المستخدم.

نصائح أخرى

لا حرج في:

$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'");

بخلاف ذلك يجري النضج لحقن SQL - يجب أن يعمل. قد ترغب في تجربة استعلامك مباشرة على قاعدة البيانات ومعرفة ما إذا كانت النتائج هي ما تتوقعه.

أوصي أيضًا بتشغيل الإبلاغ عن الخطأ أثناء التطوير. أضف الأسطر التالية إلى أعلى المستند:

error_reporting(E_ALL);
ini_set("display_errors", 1);

وسوف يساعدك على اكتشاف العديد من الأخطاء.

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