php pdo login

Status
Niet open voor verdere reacties.

jwz104

Gebruiker
Lid geworden
4 feb 2013
Berichten
47
Ik heb een login gemaakt (van internet gehaalt) in php, hij werkt via pdo(mysql maar dan beter)
Hij werkt helemaal maar ik het email activeren wil niet..
Hier is de code:
PHP:
public function activate($email, $email_code) {
		
		$query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `email` = ? AND `email_code` = ? AND `confirmed` = ?");

		$query->bindValue(1, $email);
		$query->bindValue(2, $email_code);
		$query->bindValue(3, 0);

		try{

			$query->execute();
			$rows = $query->fetchColumn();

			if($rows == 1){
				
				$query_2 = $this->db->prepare("UPDATE `users` SET `confirmed` = ? WHERE `email` = ?");

				$query_2->bindValue(1, 1);
				$query_2->bindValue(2, $email);				

				$query_2->execute();
				return true;

			}else{
				return false;
			}

		} catch(PDOException $e){
			die($e->getMessage());
		}

	}
Ik heb hem in een function
Er zou een 1 in de colom confirmed moeten komen maar die komt er niet, hij doet altijd: return false;
En ik heb de code steeds goed
Hoe kan ik dit oplossen? Ik zie de fout niet
 
hoe heb je confirmed ingesteld in je database?
 
zet een in de eerste regel van de functie var_dump(func_num_args()); dit laat zien welke variabelen naar je function gestuurd worden!
 
mysql maar dan beter


PDO is net zo slecht als de standaard interface, het enige voordeel is iets wat je momenteel niet gebruikt: named parameters in prepared statements, ter vervanging van de bug geveolige vraagtekens:


$query_2 = $this->db->prepare("UPDATE `users` SET `confirmed` = :confirmed WHERE `email` = :email");
$query_2->bindValue(':confirmed', 1);
$query_2->bindValue(':email', $email);

Als je query het wel doet dan kom je dus blijkbaar nooit in die query, dus ga je debuggen.
De moeilike manier van debuggen is overal echo, var_dump en debug_print_backtrace neerzetten en letterlijk uitzoeken waar het script allemaal langskomt.

De makkelijker manier is om xDebug op je ontwikkelomgeving te installeren en te gaan werken meteen IDE zoals PHPStorm of NetBeans. Dan kun je een breakpoint in je code plaatsen op de plek waar jij verwacht dat de activatie functie wordt aangeroepen zodra PHP langs die regel komt wordt het het script gepauseed en kun je in je IDE regel voor regel door de code stappen en zien wat alle variabelen op elke regel precies bevatten en dus ook of de query wordt uitgevoerd en welke waarden er in de query terecht komen.
 
Al opgelost bij het registreren kwam er geen 0 bij confirmed waardoor dit script niet meewerkte
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan