سؤال

لدي مشروع على الإنترنت "سؤال الأسبوع"؛ يسمح هذا المشروع للمستخدمين بتقديم أسئلتهم. يتم حفظ هذه الأسئلة في جدول MySQL؛ يتم إرسال السؤال أيضا إلى SimplePost.php آخر الذي يخزن السؤال في PHPBB. أريد استخدام هذا phpBB لكل سؤال، للمناقشات حول هذا السؤال.

الآن، يخزن مشروعي السؤال الموجود في جدول SQL بالإضافة إلى مشاركات السؤال الموجود في PHPBB.

ولكن عندما يتم نشر السؤال في PHPBB يخزنها في ذلك "http://servername.com/phpbb3/viewtopic.php؟f=5&t=24."أين T = 24 هو السؤال.

أريد بطريقة أو بأخرى الاستيلاء على عنوان URL هذا واستخراج T = 24، بحيث يمكنني الحصول على ارتباط قادر على النقر لكل سؤال في مشروعي الذي يوجه سؤال صفحة PHPBB الخاصة به.

لنفترض أن مشروعي قيد التشغيل: http://servername.com/qotw/profile.html. (يتيح ذلك للمستخدم نشر سؤال ويتم إدراج السؤال في جدول SQL وأيضا المكالمات في PHPBB / SimplePost.php هو مشاركات السؤال في PHPBB)

وهذا السؤال في PHP يمكن أن ينظر إليه على: "http://servername.com/phpbb3/viewtopic.php؟f=5&t=24."

يرجى اقتراح لي ماذا يجب أن أفعل. كيف يمكنني الاستيلاء على هذا "T = 24" من عنوان URL هذا.

عند استدعاء My SimplePoSpost.php، يتم إرسال السؤال باستخدام Posting.php وقيمة الإرجاع مرة أخرى.

يبدو الكود في SimplePost.php

$title = "This is the title of the message.";
//$body = "This is the message body.";
$post_fields = array(
             'subject'   => $title,
             'addbbcode20' => 100,
             'message' => $body,
             'lastclick'          => $lclick[0],
             'post'   => 'Submit',
             'attach_sig'        => 'on',
             'creation_time'      => $lclick[0],
             'form_token'   => $security123[1],
             'filecomment' => '',
             );

//Wait (you might also do this by setting lastclick in the past by 3 seconds
sleep(3);

//Set up curl session for posting the message
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL,$purl);
curl_setopt($ch1, CURLOPT_POST, true);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch1, CURLOPT_HEADER, false );
curl_setopt($ch1, CURLOPT_COOKIE,'cookie.txt');
curl_setopt($ch1, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch1, CURLOPT_COOKIEFILE,'cookie.txt');
$result2= curl_exec ($ch1);
//$result3= curl_exec ($ch1, CURLOPT_URL,$purl);
curl_close ($ch1);

echo $result2;

النتيجة تأتي في $ 2. والصفحات تنتهي http://servername.com/phpbb3/viewtopic.php؟f=5&t=24.".

لكن الشيء هو كل هذا يحدث في النهاية الخلفية. لا يظهر مشروعي صفحة Viewtopic.php الخاصة ب PHPBB.

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

المحلول

إذا لم أكن مخطئا، يجب أن تكون قادرا على استخدام PHP للحصول على "القيمة" (24) مخزنة في متغير "T" في عنوان URL باستخدام $_GET['t']. وبعد هذا سوف يعمل فقط إذا كنت حاليا في عنوان URL حاليا. يرى: http://us2.php.net/manual/en/reserved.variables.get.php.

إذا كنت تحاول الاستيلاء على هذا القسم فقط عندما لا تكون في تلك الصفحة المحددة، فيمكنك تجربة:

ereg("t=[0-9]+", $url, $res)

ثم فقط تجريد "T =" من النتيجة في صفيف $ RES

نصائح أخرى

لاستخراج المكونات من عنوان URL، يمكنك استخدام parse_url - حسنا، إذا كنت ترغب فقط في الحصول على سلسلة الاستعلام، $_SERVER['QUERY_STRING'] سوف تفعل فقط على ما يرام أيضا.

ثم، للحصول على المعالم / القيم من سلسلة الاستعلام، يمكنك إلقاء نظرة على parse_str : هناك مثال يظهر فقط ما تريد:

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
?>

obvisouly، ربما ستفضل الطريقة الثانية، لتجنب حقن (غير معروف ويحتمل أن تكون خطرة، مثل register_globals) المتغيرات في البرنامج النصي الخاص بك.

ليس متأكدا حقا ما تريد، لكنني قد أكون غبيا.

إعطاء عنوان URL في $url يمكنك القيام بذلك:

$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
$t = $params['t'];

إذا تم تمرير الصفحة معلمة Get، فيمكنك القيام به:

$t = $_GET['t'];

ماذا عن:

$var = $_GET['t']; 

تصفية ذلك والقيام بكل شيء معها.

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