Function liefert immer false

Divo1984

Erfahrenes Mitglied
Ich habe nun das nächste Problem, ich habe meine Klasse erweitert um eine Funktion UserExist die liefert mir immer false zurück:(

PHP:
<?php
require 'classes/class_DB.php';

class userManagement extends DB
{
	public $dbh;
	public $userExist=false;
	
	
    public function __construct(&$dbh)
    {
    	parent::__construct();
        if(is_object($dbh) && ($dbh instanceof PDO))
            $this->dbh=$dbh;

    }
	public function UserExist($user)
	{
		try
		{
			$sql="SELECT u_id 
				    FROM user
				   WHERE u_uname='$user'";
			$result=$this->dbh->prepare($sql);
			$result=$this->dbh->query($sql);
			$tmp=$result->fetchAll(PDO::FETCH_ASSOC);
			$ta=trim($tmp);
			if(!empty($ta))
			{
				$this->userExist=false;
			}		
		}
		catch (PDOException $e)
		{
			echo $e->getMessage();
		}
	}	
	public function add($daten)
	{
		//Daten eintragen		
		if($this->userExist!==true)
		{
			#return false;
				print"Dieser Username ist bereits vergeben!";
		}
		else 
		{
			try 
			{
				$sql="INSERT INTO user(u_uname, 
									   u_password, 
									   u_email,
									   u_vname, 
									   u_nname, 
									   u_plz, 
									   u_ort, 
									   u_strasse, 
									   u_hnr, 
									   u_geb_tag, 
									   u_geb_mon, 
									   u_geb_jahr, 
									   u_code)
								VALUES(:user,
								       :password,
								       :email,
								       :vname,
								       :nname,
								       :plz,
								       :ort,
								       :strasse,
								       :hnr,
								       :geb_tag,
								       :geb_mon,
								       :geb_jahr,
								       :code)";
				
				$result=$this->dbh->prepare($sql);
				$result->bindParam(':user', $daten['uname'], PDO::PARAM_STR,36);
				$result->bindParam(':password', $daten['pw'], PDO::PARAM_STR,32);
				$result->bindParam(':email', $daten['email'], PDO::PARAM_STR,60);
				$result->bindParam(':vname', $daten['vname'], PDO::PARAM_STR,40);
				$result->bindParam(':nname', $daten['nname'], PDO::PARAM_STR,32);
				$result->bindParam(':plz', $daten['plz'], PDO::PARAM_STR,6);
				$result->bindParam(':ort', $daten['ort'], PDO::PARAM_STR,32);
				$result->bindParam(':strasse', $daten['strasse'], PDO::PARAM_STR,32);
				$result->bindParam(':hnr', $daten['hnr'], PDO::PARAM_STR,7);
				$result->bindParam(':geb_tag', $daten['geb_tag'], PDO::PARAM_STR,2);
				$result->bindParam(':geb_mon', $daten['geb_mon'], PDO::PARAM_STR,2);
				$result->bindParam(':geb_jahr', $daten['geb_jahr'], PDO::PARAM_STR,4);
				$result->bindParam(':code', $daten['code'], PDO::PARAM_STR,32);
				$result->execute();
	            if($result->rowCount()==1)
	            {
	                print"Datensatz wurde eingetragen";
	                return true;
	            }
	            else
	                return false;			
				
			} 
			catch (PDOException $e) 
			{
				echo $e->getMessage();
			}
		}
	}
	
}
?>

Ich weiß nur nicht warum, mir diese IMMER false liefert
 
Punkt 1: Warum führst du hintereinander prepare und query aus? Punkt 2: Ich glaube, dass dir fetchAll mit dem Parameter FETCH_ASSOC ein Array zurückgibt. Darauf kannst du nicht die Funktion trim anwenden.
 
Ich habe nun das nächste Problem, ich habe meine Klasse erweitert um eine Funktion UserExist die liefert mir immer false zurück:(

PHP:
<?php
require 'classes/class_DB.php';

class userManagement extends DB
{
	public $dbh;
	public $userExist=false;
	
	
    public function __construct(&$dbh)
    {
    	parent::__construct();
        if(is_object($dbh) && ($dbh instanceof PDO))
            $this->dbh=$dbh;

    }
	public function UserExist($user)
	{
		try
		{
			$sql="SELECT u_id 
				    FROM user
				   WHERE u_uname='$user'";
			$result=$this->dbh->prepare($sql);
			$result=$this->dbh->query($sql);
			$tmp=$result->fetchAll(PDO::FETCH_ASSOC);
			$ta=trim($tmp);
			if(!empty($ta))
			{
				$this->userExist=false;
			}		
		}
		catch (PDOException $e)
		{
			echo $e->getMessage();
		}
	}	
	public function add($daten)
	{
		//Daten eintragen		
		if($this->userExist!==true)
		{
			#return false;
				print"Dieser Username ist bereits vergeben!";
		}
		else 
		{
			try 
			{
				$sql="INSERT INTO user(u_uname, 
									   u_password, 
									   u_email,
									   u_vname, 
									   u_nname, 
									   u_plz, 
									   u_ort, 
									   u_strasse, 
									   u_hnr, 
									   u_geb_tag, 
									   u_geb_mon, 
									   u_geb_jahr, 
									   u_code)
								VALUES(:user,
								       :password,
								       :email,
								       :vname,
								       :nname,
								       :plz,
								       :ort,
								       :strasse,
								       :hnr,
								       :geb_tag,
								       :geb_mon,
								       :geb_jahr,
								       :code)";
				
				$result=$this->dbh->prepare($sql);
				$result->bindParam(':user', $daten['uname'], PDO::PARAM_STR,36);
				$result->bindParam(':password', $daten['pw'], PDO::PARAM_STR,32);
				$result->bindParam(':email', $daten['email'], PDO::PARAM_STR,60);
				$result->bindParam(':vname', $daten['vname'], PDO::PARAM_STR,40);
				$result->bindParam(':nname', $daten['nname'], PDO::PARAM_STR,32);
				$result->bindParam(':plz', $daten['plz'], PDO::PARAM_STR,6);
				$result->bindParam(':ort', $daten['ort'], PDO::PARAM_STR,32);
				$result->bindParam(':strasse', $daten['strasse'], PDO::PARAM_STR,32);
				$result->bindParam(':hnr', $daten['hnr'], PDO::PARAM_STR,7);
				$result->bindParam(':geb_tag', $daten['geb_tag'], PDO::PARAM_STR,2);
				$result->bindParam(':geb_mon', $daten['geb_mon'], PDO::PARAM_STR,2);
				$result->bindParam(':geb_jahr', $daten['geb_jahr'], PDO::PARAM_STR,4);
				$result->bindParam(':code', $daten['code'], PDO::PARAM_STR,32);
				$result->execute();
	            if($result->rowCount()==1)
	            {
	                print"Datensatz wurde eingetragen";
	                return true;
	            }
	            else
	                return false;			
				
			} 
			catch (PDOException $e) 
			{
				echo $e->getMessage();
			}
		}
	}
	
}
?>

Ich weiß nur nicht warum, mir diese IMMER false liefert
Salve,

also dieses:
PHP:
$result=$this->dbh->prepare($sql);
kannst Du komplett weglassen da Du eh mit query arbeitest.

Und dieses:
PHP:
            if(!empty($ta)) 
            { 
                $this->userExist=false; 
            }
setzt userExist immer auf false, wenn $ta NICHT leer ist.

Desweiteren kannst Du diesen Block:
PHP:
class userManagement extends DB 
{ 
    public $dbh; 
    public $userExist=false; 
     
     
    public function __construct(&$dbh) 
    { 
        parent::__construct(); 
        if(is_object($dbh) && ($dbh instanceof PDO)) 
            $this->dbh=$dbh; 

    }
in diesen ändern:
PHP:
class userManagement extends DB 
{ 
    public $userExist=false; 
     
    public function __construct() 
    { 
        parent::__construct();
    }
da Du $this->dbh in der Elternklasse setzt (falls Du das nicht geändert hast)!

Gruß

//EDIT
Punkt 1: Warum führst du hintereinander prepare und query aus? Punkt 2: Ich glaube, dass dir fetchAll mit dem Parameter FETCH_ASSOC ein Array zurückgibt. Darauf kannst du nicht die Funktion trim anwenden.
Falsch!

trim() kann auch auf Arrays angewendet werden.
 
Zuletzt bearbeitet:
Ich glaube eher nicht, dass trim auch auf Arrays angewendet werden kann:
Code:
string trim ( string $str [, string $charlist ] )
 
Salve,

also dieses:
PHP:
$result=$this->dbh->prepare($sql);
kannst Du komplett weglassen da Du eh mit query arbeitest.

oki is raus

Und dieses:
PHP:
            if(!empty($ta)) 
            { 
                $this->userExist=false; 
            }
setzt userExist immer auf false, wenn $ta NICHT leer ist.

Ob ich das nun auf false oder true setze spielt doch keine Rolle, denn wenn die Datenbank leer sollte da true kommen, denn diese Abfrage sollte 0 ausgeben - klar ich könnte das auch umformulieren in true nur gehts ja deshalb trotzdem nicht:(

Desweiteren kannst Du diesen Block:
PHP:
class userManagement extends DB 
{ 
    public $dbh; 
    public $userExist=false; 
     
     
    public function __construct(&$dbh) 
    { 
        parent::__construct(); 
        if(is_object($dbh) && ($dbh instanceof PDO)) 
            $this->dbh=$dbh; 

    }
in diesen ändern:
PHP:
class userManagement extends DB 
{ 
    public $userExist=false; 
     
    public function __construct() 
    { 
        parent::__construct();
    }
da Du $this->dbh in der Elternklasse setzt! (falls Du das nicht geändert hast)!

Nein habe ich nicht geändert, aber wenn ich das so mache, wie du beschrieben hast, bekomme ich ja nen Notice, das will ich net;)

Nun weiß ich aber leider immernoch net warum das IMMER false liefert:(
 
@Alex_T: Mir ist durchaus bewusst, dass man die Funktion trim als Callback-Funktion auf ein Array anwenden kann, aber man kann der Funktion trim kein Array als ersten Parameter übergeben. Das ist etwas ganz anderes!
 
Selbst wenn ich auf trim verzichte bringt das nichts:(

PHP:
<?php
require 'classes/class_DB.php';

class userManagement extends DB
{
	public $dbh;
	public $userExist=false;
	
	
    public function __construct(&$dbh)
    {
    	parent::__construct();
        if(is_object($dbh) && ($dbh instanceof PDO))
            $this->dbh=$dbh;

    }
	public function UserExist($user)
	{
		try
		{
			$sql="SELECT u_id 
				    FROM user
				   WHERE u_uname='$user'";
			#$result=$this->dbh->prepare($sql);
			#$result->bindParam(':uname', $user, PDO::PARAM_STR,36);
			#$result->execute();
			$result=$this->dbh->query($sql);
			$tmp=$result->fetchAll(PDO::FETCH_ASSOC);
			#$ta=trim();
			if($tmp['u_id']=="")
			{
				$this->userExist=true;
			}		
		}
		catch (PDOException $e)
		{
			echo $e->getMessage();
		}
	}	
	public function add($daten)
	{
		//Daten eintragen		
		if($this->userExist!==true)
		{
			#return false;
				print"Dieser Username ist bereits vergeben!";
		}
		else 
		{
			try 
			{
				$sql="INSERT INTO user(u_uname, 
									   u_password, 
									   u_email,
									   u_vname, 
									   u_nname, 
									   u_plz, 
									   u_ort, 
									   u_strasse, 
									   u_hnr, 
									   u_geb_tag, 
									   u_geb_mon, 
									   u_geb_jahr, 
									   u_code)
								VALUES(:user,
								       :password,
								       :email,
								       :vname,
								       :nname,
								       :plz,
								       :ort,
								       :strasse,
								       :hnr,
								       :geb_tag,
								       :geb_mon,
								       :geb_jahr,
								       :code)";
				
				$result=$this->dbh->prepare($sql);
				$result->bindParam(':user', $daten['uname'], PDO::PARAM_STR,36);
				$result->bindParam(':password', $daten['pw'], PDO::PARAM_STR,32);
				$result->bindParam(':email', $daten['email'], PDO::PARAM_STR,60);
				$result->bindParam(':vname', $daten['vname'], PDO::PARAM_STR,40);
				$result->bindParam(':nname', $daten['nname'], PDO::PARAM_STR,32);
				$result->bindParam(':plz', $daten['plz'], PDO::PARAM_STR,6);
				$result->bindParam(':ort', $daten['ort'], PDO::PARAM_STR,32);
				$result->bindParam(':strasse', $daten['strasse'], PDO::PARAM_STR,32);
				$result->bindParam(':hnr', $daten['hnr'], PDO::PARAM_STR,7);
				$result->bindParam(':geb_tag', $daten['geb_tag'], PDO::PARAM_STR,2);
				$result->bindParam(':geb_mon', $daten['geb_mon'], PDO::PARAM_STR,2);
				$result->bindParam(':geb_jahr', $daten['geb_jahr'], PDO::PARAM_STR,4);
				$result->bindParam(':code', $daten['code'], PDO::PARAM_STR,32);
				$result->execute();
	            if($result->rowCount()==1)
	            {
	                print"Datensatz wurde eingetragen";
	                return true;
	            }
	            else
	                return false;			
				
			} 
			catch (PDOException $e) 
			{
				echo $e->getMessage();
			}
		}
	}
	
}
?>
 
Dann probier doch einfach mal aus, was dir var_dump von $tmp ausgibt. Einmal im Fall, wo du weißt, dass der Nutzer existiert, und einmal, wo du weißt, dass er nicht existiert. Und dann natürlich hier posten.
 
Zurück