2012-04-18 50 views
1

我的php函數無法識別在同一個文件中包含的另一個php文件中定義的變量。 dbconnect.php使數據庫連接。 add_user.php具有使用該數據庫連接$ dbco的add_user函數。我收到一條錯誤消息,說$ dbco沒有爲這個函數調用定義:mysql_select_db("luxcal", $dbco);這一定很明顯,但我不知道發生了什麼。包含的文件和數據庫連接

dbconnect.php


<?php 
    $dbco = mysql_connect("localhost","myuser","mypassword"); 
    if (!$dbco) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 
?> 

add_user.php


<?php include("dbconnect.php"); ?> 

<?php 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

function add_user($username, $email, $password_text, $copasswd_text) { 

    $password = md5($password_text); 
    $copasswd = md5($password_text); 
    $privPost = 1; // 3: max. 
    $privSedit = 0; 

    mysql_select_db("luxcal", $dbco); 

    $q_add_user = "INSERT INTO users (`user_name`, `email`, `password`) VALUES ('".mysql_real_escape_string($username)."', '".mysql_real_escape_string($email)."', '$password')"; 
    $r_add_user = mysql_query($q_add_user); 

    return; 
} 

echo add_user(trim($_REQUEST['uname']), trim($_REQUEST['uemail']), trim($_REQUEST['upass']), trim($_REQUEST['cpass'])); 

?> 
+0

class Database { private static $instance; private $connection; private function __construct(){ $this->connection = mysql_connect("localhost","root","pw"); // or whatever connection you use } public static function getInstance(){ if(empty(self::$instance)){ try{ self::$instance = new Database(); } catch (Exception $e) { echo 'Connection failed: ' . $e->getMessage(); } } return self::$instance; } public function query($query, $args){ ... //general query function } } 

那麼你可以得到一個數據庫實例'mmowebdb'是不是你真正的數據庫密碼,對不對?另外,您沒有將$ dbco傳入您的函數。你還需要用你的密碼。你不應該使用$ _REQUEST,你應該使用你特別用來發送信息的任何方法,比如$ _POST。 – DampeS8N 2012-04-18 18:36:23

回答

0

可變$dbco是在函數add_user不可用,因爲它不是在該函數的variable scope

您可以在add_user函數中添加global $dbco;使其可用,或者您可以使用$GLOBALS['dbco']來訪問它。

嘗試:除非你通過他們或使用global的功能之外定義

function add_user($username, $email, $password_text, $copasswd_text) { 
    global $dbco; 
    // rest of code... 
} 

變量不可用裏面的功能。同樣,函數中定義的變量在函數外部不可用(並且在函數返回時釋放)。