הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   בעיה עם מחלקות בPHP (https://hosts.co.il/forums/showthread.php?t=51869)

DCB 12-08-07 10:41

בעיה עם מחלקות בPHP
 
או קי בניתי את המחלקה הפשוטה הזאת לטיפול במסדי נתונים לפני 10 דקות הכל עבד מעולה פתאום זה לא :S
מה הבעיה??
יש לי 3 קבצים אחד מכיל את המחלקה, database.php
PHP קוד:

class database {
    function 
query($mysql){
        global 
$db_host;
        global 
$db_user;
        global 
$db_pass;
        global 
$db_db;
        
$con = @mysql_connect($db_host$db_user$db_pass) or die(_DB_ERROR01);
        @
mysql_select_db($db_db) or die(_DB_ERROR02);
        return @
mysql_query($mysql$con) or die(_DB_ERROR03);
    }
    function 
fetch_array($mysql){
        return 
mysql_fetch_array(database::query($mysql)) or die (_DB_ERROR03);
    }


קובץ שני הוא הראשי והוא קורא למחלקה ומריץ את השאילתה, index.php
PHP קוד:

include ("config.php");
include (
"classes/database.php");

$sql database::fetch_array("SELECT * FROM test WHERE id = 1");
print_r($sql); 

ויש את קובץ ההגדרות שמכיל את הנתונים להתחברות למסד, config.php
PHP קוד:

$db_host "localhost";
$db_user "*****";
$db_pass "*****";
$db_db "*****"

מישהוא רואה כאן את הבעיה? :\

בניה 12-08-07 11:01

תוריד את ה@ אתה לא צריך אותם.
ומה הכוונה לא עובד?
וגם עדיף להשתמש ב mysql_fetch_assoc ולא array

Elad-A 12-08-07 13:57

קודם כל למה אתה משתמש ב ee::ee זה כבר ישן משתמשים ב new כדי לאתחל..

והנה מחלקה לדוגמא שתראה איך זה עובד:

PHP קוד:

<?php

$db 
= new database;

class 
database 
{
    function 
Query($mysql)
    {
                global 
$db_host $db_user $db_pass $db_db;

        
$con mysql_connect($db_host$db_user$db_pass) or die(_DB_ERROR01);
                
mysql_select_db($db_db) or die(_DB_ERROR02);

                return 
mysql_query($mysql$con) or die(_DB_ERROR03);
        }
    
    function 
FetchArray($query)
    {
                return 
mysql_fetch_array($query) or die (_DB_ERROR03);
        }
}  


$query $db->Query("SELECT * .....");
while(
$c $db->FetchArray($query))
{
    ......
}

?>

זה העיקרון תפתח את זה לאיפה שתצטרך..

DCB 12-08-07 16:48

בניה אני עובד על מחלקה והיא תכיל את רוב הפונקציות האלו למשחק עם המסד נתונים נתתי את הפונקציה הזאת לדוגמא
ואני עובד עם @ כי אם תשים לב במקרה שיש בעיה נפלטת הודעת שגיאה מוגדרת מראש של המערכת
אני מעדיף לעבוד ככה מאחר ומדובר במערכת שעוברת ללקוח ואני לא יכול שפתאום ירוצו לי שגיאות לא קשורות....
(וכן ניסיתי להוריד את כולם ולראות מה הבעיה אבל זה לא כל כך עזר)

אלעד השיטה שלך היא בערך השיטה המקורית שלי פשוט חשבתי לחסוך קוד ולהפוך אותו ליותר אסטתי על ידי הכנסה של פונקצית השאילתה ישר לתוך הפונקציה של הfetch array

ואלעד גם עם כל מה שאמרת:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /****/***/**********/***/classes/database.php on line 18

שורה 18
PHP קוד:

return mysql_fetch_array($mysql) or die (_DB_ERROR03); 


Elad-A 12-08-07 16:57

תציג את כל הקוד שלך, זה יעזור יותר.
ומה שהבאתי לך זה בסך הכל דוגמא שתראה איך זה בנוי..

וד"א בפונקציה FetchRow שכחתי לשים global להתחברות בגלל זה השגיאה.

DCB 12-08-07 16:59

זה כל הקוד מה שהראתי לכם.
(זאת שורה 18 כי יש למעלה הסברים על הקובץ ואיך להשתמש בו אל תתייחס)

Elad-A 12-08-07 17:02

אממ קח מחלקה שפעם השתמשתי בה:

PHP קוד:

<?php

$db 
= new mysql;

class 
mysql 

    function 
Connect($host$name$pass$db)
    { 
        
$connection mysql_connect($host$name$pass); 
          
mysql_select_db($db$connection); 
    }
 
    function 
FetchRow($query)
    { 
        
$rows mysql_fetch_row($query); 
        return 
$rows
    } 
    function 
FetchArray($query)
    { 
        
$array mysql_fetch_array($query); 
        return 
$array
      } 

    function 
FetchNum($query)
    { 
        
$num mysql_num_rows($query); 
        return 
$num
    } 
  
    function 
Query($sql)
      { 
          
$query mysql_query($sql) or die(mysql_error()); 
          return 
$query
    }
}

?>

בקובץ global.php שלך תשים ככה:

PHP קוד:


// the user name of the mysql data base
$DataBase['user'] = "root";

// the password of the mysql data base
$DataBase['pass'] = "";

// the name of the mysql data base
$DataBase['name'] = "xyz";

// the host of the mysql data base, default: "localhost"
$DataBase['host'] = "localhost";

$DB->Connect($DataBase['host'], $DataBase['user'], $DataBase['pass'], $DataBase['name']); 

ככה זה יחסוך לך התחברות למסד כל פעם, אני מאמין שמפה אתה תסתדר כבר..

DCB 12-08-07 17:05

תודה אלעד אבל בכל זאת מישהוא רואה את הבעיה?
אני מנסה להבין מה הולך פה :\

Elad-A 12-08-07 17:06

אני חושב שבגלל שלא שמת global בפונקציה וגם לא התחברת למסד בכלל..

תנסה ככה:

PHP קוד:

    function fetch_array($mysql){
        global 
$db_host $db_user $db_pass $db_db;
        
$con = @mysql_connect($db_host$db_user$db_pass) or die(_DB_ERROR01);
        @
mysql_select_db($db_db) or die(_DB_ERROR02);
        return 
mysql_fetch_array(database::query($mysql)) or die (_DB_ERROR03);
    } 


DCB 12-08-07 17:17

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


כל הזמנים הם GMT +2. הזמן כעת הוא 05:22.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ