मैंने अपनी पहली कक्षा बनाई है और मुझे वस्तुओं को वापस तारों में बदलने में परेशानी हो रही है।

class Cryption
{
    var $data;
    var $salt;

function __construct($data, $salt)
{
    $this->data = $data;
    $this->salt = $salt;
}

function sha512()
{
    $sodium = 'Na';
    return hash_hmac("sha512", $this->data . $this->salt, $sodium);
}

function encrypt()
{
    $salt = substr(sha512(($this->key), 'brownies'), 0, 30);
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $this->data, MCRYPT_MODE_CBC, md5($salt)));
}

जब मैं इसका इस्तेमाल करता हूं:

$password = new Cryption(mysql_real_escape_string(trim($_POST['password'])), 'pepper');
$password->sha512();

यह कहता है 'PHP पकड़ने योग्य घातक त्रुटि: क्लास क्रिप्टन का ऑब्जेक्ट स्ट्रिंग में परिवर्तित नहीं किया जा सका'

मैं वास्तव में नहीं जानता कि इसे वापस एक स्ट्रिंग में कैसे लाया जाए। क्या कोई मेरी मदद कर सकता है?

धन्यवाद।

संपादित करें:

<?php
require("config.php");
include("includes/cryption/cryption.php");

$username = mysql_real_escape_string(trim($_POST['username']));
$password = new Cryption(mysql_real_escape_string(trim($_POST['password'])), 'pepper'); //use a different salt next time such as a special salt for each user
$password->sha512();

$result = mysql_query("SELECT * FROM `administrators` WHERE username='$username' and password='$password'");
$row = mysql_fetch_row($result);
$count = mysql_num_rows($result);

if ($count == 1) {
    if (isset($_POST['remember'])) {
        session_start();
        $_SESSION['user'] = array(
            'id' => $row[0],
            'username' => $row[1],
            'password' => $row[2]
        );
        $userid = new Cryption($_SESSION['user']['id'], 'kkfishing');
        $session = new Cryption($_SESSION['user']['username'], 'kkfishing');
        $validated = new Cryption($_SESSION['user']['password'], 'kkfishing');

        setcookie("uniqueid", $userid->encrypt(), time() + 60 * 60 * 24 * 100, "/"); //100 days
        setcookie("kksessionid", $session->encrypt(), time() + 60 * 60 * 24 * 100, "/");
        setcookie("kkuserid", $validated->encrypt(), time() + 60 * 60 * 24 * 100, "/");//disguised cookie name
    }
    session_start();
    $_SESSION['authenticated'] = $row[0];
    echo '1'; //true
    exit;
}
else
{
    echo '0'; //false
    exit;
}
?>
php
10
Kyle 23 अगस्त 2011, 08:58
1
आपके द्वारा हमें दिखाया गया कोड उस त्रुटि को वापस नहीं कर सकता है। आप इसे कहीं और एक स्ट्रिंग के रूप में उपयोग करते हैं।
 – 
zerkms
23 अगस्त 2011, 09:02
क्या आप पूरा कोड पोस्ट कर सकते हैं? यह स्निपेट उस अपवाद को उत्पन्न नहीं कर सकता है।
 – 
Dani
23 अगस्त 2011, 09:03
@ केली: और त्रुटि किस रेखा को इंगित करती है? यदि आप चाहते हैं कि आपकी समस्या का समाधान हो - सभी संभावित जानकारी दें। आपके साथ विवरण के बारे में पूछने के लिए यहां कोई भी खतरे में नहीं है।
 – 
zerkms
23 अगस्त 2011, 09:26
मुझे खेद है ज़र्क। एंड्रियास ने सिर्फ उस स्निपेट की ओर इशारा किया जिस पर त्रुटि निहित है।
 – 
Kyle
23 अगस्त 2011, 09:29
@ केली: मैंने भी किया, लेकिन मैंने अपना जवाब हटा दिया, क्योंकि मैं बाद में था। वैसे भी, यार, अगली बार संबंधित कोड निर्दिष्ट करें और सटीक पंक्ति निर्दिष्ट करें जिसमें आपको समस्या है।
 – 
zerkms
23 अगस्त 2011, 09:32

2 जवाब

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

इस पंक्तियों को देखें:

$password->sha512();

$result = mysql_query("SELECT * FROM `administrators` WHERE username='$username' and password='$password'");

$password एक वस्तु है। यह होना चाहिए:

$pw = $password->sha512();

$result = mysql_query("SELECT * FROM `administrators` WHERE username='$username' and password='$pw'");
16
Andreas 23 अगस्त 2011, 09:27
धन्यवाद, मुझे नहीं पता था कि यह था। यह मुझे वस्तुओं के रूप में सेट किए गए अन्य चर के साथ भी मदद करता है। बहुत बहुत धन्यवाद एंड्रियास। :)
 – 
Kyle
23 अगस्त 2011, 09:30
मुझे नहीं पता था कि आप वस्तु की समस्याओं को कैसे हल करते हैं। आप सही कह रहे हैं, इसने मुझे बताया कि इसे कहाँ देखना है, बस मुझे यकीन नहीं था कि वस्तु की समस्याओं के बारे में क्या करना है। अगर यह वर्ग था या अगर यह दूसरा हिस्सा था, तो मैं उलझन में था।
 – 
Kyle
23 अगस्त 2011, 09:35

नीचे की तरह गलत तरीके से कंस्ट्रक्टर वैरिएबल को इनिशियलाइज़ करते समय एक ही त्रुटि का सामना करना पड़ सकता है:

 function __construct($data, $salt)
{
    $this->$data = $data; //mistakenly using $ (dollar) sign after `$this->`
    $this->$salt = $salt;
}

जहां प्रारंभ करने का सही तरीका है:

function __construct($data, $salt)
{
    $this->data = $data;
    $this->salt = $salt;
}
1
Rakibul Haq 10 अगस्त 2021, 11:12
ओपी पोस्ट की गई इस समस्या के लिए यह मामला नहीं है, लेकिन उसी तरह से प्रारंभ करते समय मुझे उसी त्रुटि का सामना करना पड़ा। आशा है कि यह किसी के लिए समय बचाएगा :)
 – 
Rakibul Haq
10 अगस्त 2021, 11:14