2012-04-18 6 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

'mmowebdb'は右、あなたの本当のDBのパスワードではありませんを呼び出すことにより、データベース・インスタンスを取得することができます

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

:このような

何か(http://www.matthewelliston.com/php-singleton-database-class/から撮影、編集)また、$ dbcoを関数に渡しませんでした。あなたはまた、あなたのパスワードを塩にする必要があります。そして、$ _REQUESTを使用すべきではありません。$ _POSTのような情報を送るために特別に使用した方法を使用するべきです。 – DampeS8N

答えて

0

それは関数のvariable scopeではないので変数$dbco関数add_userに使用できません。

add_userの機能の中にglobal $dbco;を追加してアクセスするか、代わりに$GLOBALS['dbco']を使用できます。

試してください:あなたがそれらを渡したりglobalを使用しない限り、関数の外で定義さ

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

変数は、関数内では使用できません。同様に、関数内で定義された変数は、関数の外部では使用できません(関数が戻るときに解放されます)。

2

代わりにシングルトンデータベースクラスを実行してください。あなたの場合、あなたは悪い複数の異なるデータベース接続で終わることができます。 ?あなたは、その後

$db = Database::getInstance(); 
//and do 
$db.query("INSERT INTO ..."); 
関連する問題