Nie mogę wykonać wpisu do bazy - skrypt nie może wykonać funkcji

0

Witam
Zaczynam z PHP i PDO na przykładzie jakiego kursu robie sobie skrypt rejestracji uzytkownika nie mogę wykonać

 
$regi = $db->prepare("INSERT INTO users(ulogin, uemail, upasword) VALUES (:login, :email, :pass)");

oto moje oba pliki które mam

userClass.php

 
<?php
$db = "";
class user
{
//database connection



 function __construct()
 {
try
{
$db = new PDO("mysql:host=localhost;dbname=plearn",'q4rr', 'quar1988');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
	echo $e->getMessage();
}



}



public function register($login, $email, $pass)
{
try
{

$npasword = password_hash($pass, PASSWORD_DEFAULT);

$regi = $db->prepare("INSERT INTO users(ulogin, uemail, upasword) VALUES (:login, :email, :pass)");
$regi->bindparam(":login", $login);
$regi->bindparam(":email", $email);
$regi->bindparam(":pass", $pass);
$regi->execute();
}
catch(PDOException $e)
{
	echo $e-getMessage();

}

}

}
?>

kolejny plik reg.php


<?php
require_once('userClass.php');


$user = new User();
if(isset($_POST['register'])){

$login = trim($_POST['login']);
$pass = trim($_POST['pass']);
$email = trim($_POST['email']);

if($login == ""){ echo "Podaj login";}
else if ($email == "") { echo "Podaj email";}
else if ($pass == "") { echo "Podaj haslo";}

else {


	try 
	{
//TUTAJ JEST PROBLEM
		$regi = $db->prepare("SELECT ulogin,uemail FROM users WHERE ulogin:login OR uemail:email");
		$regi->execute(array(' :login' => $login, ' :email' =>$email));
		$row=$regi->fetch(PDO::FETCH_ASSOC);
		
		
		if($row['ulogin']==$login){ echo "Zmień login";}
		else if($row['uemail']==$email){echo "Email już istnieje";}
		else {
		
		
		$user->register($login, $email, $pass);
		
		}
	
	}
	catch(PDOException $e)
	
	{
		echo $e->getMessage();	
	}


}
 }








?>

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html"; charset=utf-8 />
<title></title>
</head>
<body>


<div id="form_register">

<form action="reg.php" method="POST" />
<fieldset>

<input type="text" 		name="login" placeholder="Wpisz login" />
<input type="text" 		name="email" placeholder="Wpisz email" />
<input type="password" 	name="pass" placeholder="Wpisz haslo" />
<input type="submit" 	name="register" value="Dodaj konto" />
</fieldset>
</form>

</div>

</body>
</html>

problem pewnie błachy coś pokreciłem ale nie moge skutecznie go naprawić ;/

problem jaki dostaje

Fatal error: Call to a member function prepare() on string in /var/www/html/plearn/reg.php on line 21
0

A ten konstruktor w klasie User to masz prywatny? Tam chyba brakuje public. To tak na marginesie.

Problemem na pewno jest, że korzystasz ze zmiennej $db która jest tam gdzieś w pliku i gdzieś tam w konstruktorze klasy User inicjalizowana. Jeżeli nie utworzysz usera nie masz połączenia do bazy danych - bez sensu.
Utwórz sobie klasę odpowiedzialną za łączenie z bazą danych i tam zamknij to co masz w konstruktorze klasy User.

2
$db = "";
 

Twoja zmienna $db na której próbujesz wywołać metode prepare jest pustym stringiem.

To przypisanie wewnątrz klasy User odnosi się do niezadeklarowanej zmiennej $db która istnieje tylko wewnątrz konstruktora.
Zadeklaruj $db jako zmienna klasy User i wywołuj ją poprzez

$user->db->prepare($query) 

Całe to odwołanie do bazy też można by przerobić na metodę wewnątrz klasy.

0

dziękuję już zrobiłem to o czym pisałeś rzeczywiście zmienna db nie była dostępna :O,

a co powiesz o tym kawałku kodu bo mam go wklepanego prawie znak w znak z tego kursu jednak mam problem z takim komunikatem wiem ze w zwykłym mysql to najprawdopodobniej błąd składni ale tu już nie kumam czy jakiś znak gdzieś żle postawiłem :(

komunikat zwracający blad

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':login OR uemail:email' at line 1
$regi = $db->prepare("SELECT ulogin,uemail FROM users WHERE ulogin:login OR uemail:email");
		$regi->execute(array(' :login' => $login, ' :email' =>$email));
		$row=$regi->fetch(PDO::FETCH_ASSOC);
		
		
		if($row['ulogin']==$login){ echo "Zmień login";}
		else if($row['uemail']==$email){echo "Email już istnieje";}
		else {
		
		
		$user->register($login, $email, $pass);
1
 
$regi = $db->prepare("SELECT ulogin,uemail FROM users WHERE ulogin = :login OR uemail = :email");

0

dziękuję bardzo za odpowiedź :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1