अगर मैं ऐसा कुछ लेता हूं और करता हूं:


    $p = 10;
    $n = 3;
    $evalstr = "\$f = 0.99 + ((.025 * \$p) * \$n);";
    eval($evalstr);
    echo $f;

मुझे 1.74 प्रदर्शित होते हैं, कोई त्रुटि नहीं सब कुछ ठीक है, लेकिन जब मेरे पास एक MySQL तालिका है जो इन समीकरणों को रखती है (इस उदाहरण के उद्देश्य के लिए, यह वही समीकरण है) ... जैसे:


    $p = 10;
    $n = 3;
    while ($result = mysql_fetch_assoc($results)) {
        $math = $result['math'];
        //at this point $math = "\$f = 0.99 + ((.025 * \$p) * \$n);"
        eval($math);
    }

मुझे पार्स त्रुटि मिलती है: वाक्यविन्यास त्रुटि, अप्रत्याशित T_VARIABLE, AJAX \ getprices.php (30) में T_STRING की अपेक्षा: eval () लाइन 1 पर कोड

इस बारे में अनिश्चित क्यों, अगर मैं echo $math का प्रिंट करता हूं तो यह पहले उदाहरण में मेरे पास $evalstr के समान है। $p और $n वास्तव में GET चर से सेट किए गए हैं, लेकिन भले ही मैं उन्हें मैन्युअल रूप से सेट कर दूं, उदाहरण के लिए यह काम नहीं करता है।

0
Mike L. 19 अक्टूबर 2011, 02:42
3
सुझाव। अपने PHP को डेटाबेस में स्टोर न करने का प्रयास करें। यदि आपके पास एक sql इंजेक्शन भेद्यता है, तो कोई आपके संपूर्ण कोड आधार से पूरी तरह से समझौता कर सकता है। सिर्फ आपका डेटाबेस नहीं।
 – 
Cyclone
19 अक्टूबर 2011, 02:47
ideone.com/T20A4 क्या आप सुनिश्चित हैं कि $math वास्तव में वही है जो आप कहते हैं?
 – 
Dejan Marjanović
19 अक्टूबर 2011, 02:49
eval() को var_dump($math) से बदलने का प्रयास करें और हमें बिल्कुल बताएं कि यह क्या प्रिंट करता है।
 – 
Ilmari Karonen
19 अक्टूबर 2011, 02:54

2 जवाब

सबसे बढ़िया उत्तर

मुझे ऐसा लगता है, कि आपने डेटाबेस में एस्केप्ड $ सहित एक्सप्रेशन को स्टोर किया है। यदि आप पहले स्लैश हटाते हैं, तो आप कोशिश कर सकते हैं, अगर यह काम करता है:

eval(stripslashes($math));

मैं भी इस तरह के कोड को डेटाबेस में संग्रहीत करने और इसे निष्पादित करने के लिए eval का उपयोग करने में बहुत सावधानी बरतने की सलाह दूंगा। यहां सुरक्षा छेद की संभावना है। लेकिन मुझे लगता है, आप यह जानते हैं।

1
aurora 19 अक्टूबर 2011, 02:49
यह काम करता है, वही जवाब जो मैं लेकर आया था, मैं स्लैश को मैन्युअल रूप से हटा रहा हूं (केवल 18 समीकरण) और सुरक्षा यहां कोई समस्या नहीं है, धन्यवाद
 – 
Mike L.
19 अक्टूबर 2011, 02:52

मुझे यह मिल गया, ऐसा लगता है कि एक चर के रूप में eval कोड को परिभाषित करते समय मुझे $ से बचना होगा, लेकिन इसे एक चर के रूप में MySQL से खींचते समय यह काम करता है यदि मैं $ को अनदेखा करता हूं

0
Mike L. 19 अक्टूबर 2011, 02:51