Je pourrais manquer quelque chose ici, je ne suis pas sûr. Une recherche Google n'a pas vraiment aidé non plus.Comment créer une instance d'une classe dans une autre classe
Ce que je veux faire est d'appeler la classe databaseServer et d'utiliser ses méthodes dans ma classe userControl. Voici mon fichier lib_class.php:
<?php
include('definitions.php');
class databaseServer {
var $con;
var $db;
var $close;
var $qry;
var $sql;
function connect($host,$user,$pw,$db) {
$this->con = mysql_connect($host,$user,$pw);
if (!$this->con) {
die('Could not connect: ' . mysql_error());
}
else {
echo "Database Connected";
}
$this->selectDb($db);
}
function selectDb($database) {
$this->db = mysql_select_db($database,$this->con);
if (!$this->db) {
echo "Could not Select database";
}
else {
echo "Database Selected";
}
}
function disconnect() {
$this->close = mysql_close($this->con);
if ($this->close) {
echo "Disconnected";
}
}
function query($test) {
if (!mysql_query($test)) {
die("Error: " . mysql_error());
}
}
} // databaseServer
class cookie {
var $expireTime;
function set($name,$value,$expiry) {
$this->expireTime = time()+60*60*24*$expiry;
setcookie($name,$value,$expireTime);
}
function delete($name) {
setcookie($name,"",time()-3600);
}
function check($name) {
if (isset($_COOKIE["$name"]))
echo "Cookie Set";
else
echo "Cookie failed";
}
} //cookie
class userControl {
public function __construct(databaseServer $server) {
$this->server = new databaseServer();
}
function createUser($uname,$pword) {
$this->server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$result = $this->server->query("SELECT * FROM user_list WHERE uname='" . $this->server->real_escape_string($uname) . "'");
if ($this->result->num_rows() === 0) {
if ($this->server->query("INSERT INTO user_list (uname, pword)
VALUES ('" . $this->server->real_escape_string($uname) . "','" . $this->server->real_escape_string($pword) . "')") {
echo "User Added Successfully!";
}
else {
echo "Error Adding User!";
}
}
else {
echo "User Already Exists!";
}
} // createUser
} // userControl
?>
Cependant, cela ne fonctionne pas et je ne vois pas pourquoi. Mes classes databaseServer et cookie fonctionnent correctement lorsque j'omets la classe userControl du fichier, donc je sais que l'erreur doit être dans cette classe quelque part. La POO est quelque chose que j'essaie d'apprendre et je continue à trébucher.
Les échos de la classe databaseServer sont là uniquement pour que je puisse les tester. Je les cours dans la mise en œuvre d'un fichier index.php comme suit:
<?php
include('definitions.php');
include('class_lib.php');
$bmazed = new databaseServer();
$bmazed->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$sql = "INSERT INTO blah
VALUES ('testing 92')";
$bmazed->query($sql);
$bmazed->disconnect();
// $control = new userControl();
// $uname = "Test1";
// $pword = "test1";
// $control->createUser($uname,$pword);
echo "<br />";
echo "<br />";
?>
Lines ont été commentés à des fins de test, donc je n'ai pas de garder le code récrire. Je n'ai vraiment aucune idée d'où vient le problème, j'ai vérifié la syntaxe et tout semble bien.
J'ai essayé toutes les réponses suggérées, mais aucune d'entre elles ne semble fonctionner. J'ai édité la question originale pour montrer plus de mon code. Comme mentionné, le code est purement à des fins de test a donc quelques choses étranges là-bas comme des échos apparemment aléatoires. –
@Saladin exécute 'php -l lib_class.php' et vous verrez qu'il se plaint de l'inattendu' {'et' else' dans le bloc 'if' où vous faites le' INSERT'. C'est parce qu'il vous manque une fermeture ')' sur ce bloc 'if'. Lorsque vous développez du code, assurez-vous que les options 'error_reporting' et' display_errors' sont activées. – Gordon