לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 15-08-2010, 09:22
  fadey fadey אינו מחובר  
 
חבר מתאריך: 15.07.02
הודעות: 1,027
פונקציה מתנהגת מוזר...

אהלן, אז ככה יש לי פונקציה ב2 גרסאות, גרסא ראשונה:
קוד PHP:
 public function authorizeUser($u$pw) {
            
$link = new mysqli(DB_SERVERDB_USERDB_PASSWORDDB_NAME) or die('.בעיה בהתחברות לבסיס הנתונים');
            
$link->query("SET NAMES 'utf8'");
            
$query "SELECT email, password FROM sites WHERE email = ? AND password = ? LIMIT 1";
            if (
$stmt $link->prepare($query)) {
                
$p md5($pw);
                
$stmt->bind_param('ss'$u$p);
                
$stmt->execute();
                
$stmt->bind_result($u$pw);
                if (
$stmt->fetch()) {
                    
$_SESSION['Uauthorized'] = true;
                    
$_SESSION['Uname'] = $u;
                    return 
true;
                } else {
                    return 
false;
                }
                
$stmt->close();
            }
            
$link->close();
        }
    } 


גרסא שנייה:
קוד PHP:
 public function authorizeAdUser($u$pw) {
            
$link = new mysqli(DB_SERVERDB_USERDB_PASSWORDDB_NAME) or die('.בעיה בהתחברות לבסיס הנתונים');
            
$link->query("SET NAMES 'utf8'");
            
$query "SELECT username, password FROM ad_users WHERE username = ? AND password = ? LIMIT 1";
            if (
$stmt $link->prepare($query)) {
                
$p md5($pw);
                
$stmt->bind_param('ss'$u$p);
                
$stmt->execute();
                
$stmt->bind_result($u$pw);
                if (
$stmt->fetch()) {
                    
$_SESSION['adAuthorized'] = true;
                    
$_SESSION['adName'] = $u;
                                     return 
true;
                } else {
                    return 
false;
                }
                
$stmt->close();
            }
            
$link->close();
        } 


מה שמוזר הוא שבגרסא הראשונה הפונקציה עובדת בסדר,
ברגסא השנייה, לא רק שהיא לא מחזירה true אני גם מקבל הודעה כזו:
קוד:
[Sun Aug 15 09:39:37 2010] [error] [client 79.176.9.208] PHP Warning: mysqli_stmt::bind_result() [<a href='function.mysqli-stmt-bind-result'>function.mysqli-stmt-bind-result</a>]: Number of bind variables doesn't match number of fields in prepared statement. in /var/www/vhosts/g1000000.org/httpdocs/core/core.php on line 1506, referer: http://g1000000.org/enterance.php [Sun Aug 15 09:40:45 2010] [error] [client 79.176.9.208] PHP Notice: Object of class gAdUser to string conversion in /var/www/vhosts/g1000000.org/httpdocs/core/core.php on line 1505, referer: http://g1000000.org/enterance.php


כשאני לא מבין איך בדיוק יש הבדל בכמות משתנים.. ומה הוא בעצם רוצה להגיד בהודעה השניה? לא ברור לי.. השורה שאליה הוא מתחייס היא זו:
קוד PHP:
 $stmt->execute(); 


רק עוד הערה, הפונקציה בגרסא הראשונה מחזירה true עם שם משתמש וסיסמא נכונים ולא מוציאה הודעות כאלה.
השניה מחזירה false עם שם משתמש וסיסמא נכונים ומוציאה הודעות האלה..

איך הדבר ייתכן? מה אני מפספס?
_____________________________________
ציטוט:
Different people use different tools, but its mostly morons who pretend that the problems with PHP actually matter.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 15-08-2010, 10:20
  fadey fadey אינו מחובר  
 
חבר מתאריך: 15.07.02
הודעות: 1,027
שים לב להדפסה לאחר קבלת הנתונים חזרה מהדאטהבייס
בתגובה להודעה מספר 6 שנכתבה על ידי שימי שמתחילה ב "מחזיר... איפה? אתה חייב להיות..."

קוד PHP:
 public function authorizeAdUser($u$pw) {
            
$link = new mysqli(DB_SERVERDB_USERDB_PASSWORDDB_NAME) or die('.בעיה בהתחברות לבסיס הנתונים');
            
$link->query("SET NAMES 'utf8'");
            
$query "SELECT username, password FROM ad_users WHERE username = ? AND password = ? LIMIT 1";
            if (
$stmt $link->prepare($query)) {
                
$p md5($pw);
                
$stmt->bind_param('ss'$u$p);
                
$stmt->execute();
                
$stmt->bind_result($u$pw);
                echo 
$u " " $pw;
                if (
$stmt->fetch()) {
                    
$_SESSION['adAuthorized'] = true;
                    
$_SESSION['adName'] = $u;
                                       return 
true;
                } else {
                    return 
false;
                }
                
$stmt->close();
            }
            
$link->close();
        } 


השם משתמש מודפס Object והסיסמא מודפסת 1234.

השם משתמש הוא test והסיסמא היא 1234.

מה קורה כאן? חח

אם אתה רוצה לראות את הלינק לדף עם ההדפסה:
http://g1000000.org/enterance.php

כשהגרסא הראשונה מיועדת לכניסה למעלה, והשניה לכניסה באמצע.
_____________________________________
ציטוט:
Different people use different tools, but its mostly morons who pretend that the problems with PHP actually matter.


נערך לאחרונה ע"י fadey בתאריך 15-08-2010 בשעה 10:23.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 23:54

הדף נוצר ב 0.08 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר