2012-04-18 2 views
1

Моя php-функция не распознает переменную, определенную в другом php-файле, который включен в один и тот же файл. dbconnect.php соединяет базу данных. add_user.php имеет функцию add_user, которая использует соединение с базой данных $ dbco. Я получаю сообщение об ошибке, говорящее, что $ 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

'mmowebdb' не ваш реальный DB пароль, не так ли? Кроме того, вы не передали $ dbco в свою функцию. Вам также нужно солить свой пароль. И вы не должны использовать $ _REQUEST, вы должны использовать любой метод, который вы специально использовали для отправки информации типа $ _POST. – DampeS8N

ответ

0

Переменная $dbco не доступна в функции add_user, потому что это не в variable scope функции ,

Вы можете получить к нему доступ, добавив global $dbco; внутри функции add_user, чтобы сделать его доступным, или вместо этого вы можете использовать $GLOBALS['dbco'].

Try:

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

Переменные, определенные вне функции не доступны внутри функции, если не передавать их или использовать global. Аналогично, переменная, определенная в функции, недоступна вне функции (и освобождается при возврате функции).

2

Попробуйте вместо этого использовать класс базы данных Singleton. В вашем случае вы можете столкнуться с множеством различных подключений к базе данных, что плохо.

Что-то вроде этого (взято и отредактированы: http://www.matthewelliston.com/php-singleton-database-class/)

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 
    } 
} 

Вы можете получить от базы данных экземпляра с помощью вызова

$db = Database::getInstance(); 
//and do 
$db.query("INSERT INTO ..."); 
Смежные вопросы