سؤال

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

على صفحة الويب الخاصة بي، أريد أن أكون قادرا على الكتابة [text]1[/text], وماذا ستفعل هو سحب عنوان هذا المعرف.

function textFormat($text) {
    $raw = array(
        '\'\[text\](?P<id>.*?)\[/text\]\'is'
    );

    $out = array (
        '<a href="index.php?function=getData&reference=text&id=$1">' . getTextTitle() . '</a>'
    );

    preg_replace($raw, $out, $text);
    return $text;
}

function getTextTitle($id) {
     $sql = mysql_query("SELECT title FROM text WHERE id = $id");
     return mysql_result($sql);
}

لذلك، إليك المشكلة الصغيرة الجميلة: كما يمكن للمرء أن يخبر، أنا أسمي وظيفة مع متغير بعنوان رقمي، والذي يعمل بشكل رائع في علامات الاقتباس، ولكن كما نعلم، PHP لا يحب ذلك. لذلك، اخترت مجموعة اسمه. استخدام $regs['id'] فشل في العمل.

أفعل شيئا خاطئا؟

هل سأذهب في هذه الطريقة الخطأ؟

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

المحلول

حسنا، أنت بالتأكيد تفعل ذلك بطريقة مختلفة بشكل جذري أكثر من أي وقت مضى، لكنني أعتقد أن شيئا ما لم يكن بعيدا عن ما تحاول العمل قد يعمل. جرب هذا:

function textFormat($text) {
    $raw = array(
        '\'\[text\](?P<id>.*?)\[/text\]\'ise'
    );
    $out = array (
        '\'<a href="index.php?function=getData&reference=text&id=$1">\' . getTextTitle(\'$1\') . \'</a>\''
    );
    preg_replace($raw, $out, $text);
    return $text;
}

function getTextTitle($id) {
     $sql = mysql_query("SELECT title FROM text WHERE id = '" . mysql_real_escape_string($id) . "'");
     $res = mysql_result($sql);
     $row = mysql_fetch_array($res);
     return $row ? $row[0] : 'invalid ID';
}

الأصلي الخاص بك getTextTitle() من شأنه، ما لم يحدث شيء آخر، فأنا لست على علم، دع أحدا يفعل أي شيء يحب أن قاعدة بياناتك عبر حقن SQL، بالمناسبة. على الرحب والسعة.

أيضا، أنا لا أعرف ماذا (?P<id> الضوضاء موجودة في Regex، لذلك أنا أفترض أنه ضروري لسبب ما وتركها وحدها. أنا لا أعرف ما إذا كان هذا صحيحا.

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