2015-05-18 6 views
0

Итак, вот сделка. Я хотел создать экран входа для своего веб-приложения, но кажется, что я застрял в доступе к таблице (korisnici) в моей базе данных.Проблемы с подключением к базе данных с использованием класса PDO

я получаю эту строку текста, когда я пытаюсь войти в систему:

Фатальная ошибка: Uncaught исключение «PDOException» с сообщением «SQLSTATE [HY093]: Неверный номер параметра: параметр не был определен»

Вот мой код:

<?php 
session_start(); 

// sadrži podatke potrebne za spajanje na bazu 
define('DB_HOST', 'localhost'); // naziv servera - najčešće nije potrebno mijenjati ako je server lokalni 
define('DB_NAME', 'razvrstane_ceste'); // naziv baze 
define('DB_USER', 'razvrstane'); // korisnik za spajanje 
define('DB_PASS', 'razvrstane'); // lozinka baze 


//PDO Database Connection 
try { 
$databaseConnection = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASS); 
$databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
echo 'ERROR: ' . $e->getMessage(); 
} 


//PDO Database Connection 


if(isset($_POST['submit'])){ 
$errMsg = ''; 
//ime and password sent from Form 
$ime = trim($_POST['ime']); 
$lozinka = trim($_POST['lozinka']); 

if($ime == '') 
$errMsg .= 'You must enter your Username<br>'; 

if($lozinka == '') 
$errMsg .= 'You must enter your Password<br>'; 


if($errMsg == ''){ 
$records = $databaseConnection->prepare('SELECT id,ime,lozinka FROM korisnici WHERE lozinka = :lozinka'); 
$records->bindParam(':ime', $ime); 
$records->execute(); 
$results = $records->fetch(PDO::FETCH_ASSOC); 

if(count($results) > 0 && password_verify($lozinka, $results['lozinka'])){ 
$_SESSION['ime'] = $results['ime']; 
header('location:razvrstane_ceste.php'); 
exit; 
}else{ 
$errMsg .= 'Username and Password are not found<br>'; 
} 
} 
} 

?> 


<html> 
<head><title>Login Page PHP Script</title></head> 
<body> 
<div align="center"> 
<div style="width:300px; border: solid 1px #006D9C; " align="left"> 
<?php 
if(isset($errMsg)){ 
echo '<div style="color:#FF0000;text-align:center;font-size:12px;">'.$errMsg.'</div>'; 
} 
?> 
<div style="background-color:#006D9C; color:#FFFFFF; padding:3px;"><b>Login</b></div> 
<div style="margin:30px"> 
<form action="" method="post"> 
<label>Korisnik :</label><input type="text" name="ime" class="box"/><br /><br /> 
<label>Zaporka :</label><input type="password" name="lozinka" class="box" /><br/><br /> 
<input type="submit" name='submit' value="Submit" class='submit'/><br /> 
</form> 
</div> 
</div> 
</div> 
</body> 
</html> 
+0

Ваш 'bind_param' ошибочен. – Daan

ответ

1

Изменить эту строку кода:

$records = $databaseConnection->prepare('SELECT id,ime,lozinka FROM korisnici WHERE lozinka = :lozinka'); 
$records->bindParam(':ime', $ime); 

здесь вы находитесь в WHERE условие имя параметра: lozinka и в методе bindParam() у вас есть имя параметра как: ime, сделать имена параметров одинаковыми в обоих местах

использовать следующий код:

$records = $databaseConnection->prepare('SELECT id,ime,lozinka FROM korisnici WHERE lozinka = :lozinka'); 
$records->bindParam(':lozinka', $ime); 

Я надеюсь, что это поможет вам.

+0

Thx для быстрого решения. Действительно, он исправил предыдущую ошибку PDO (** PDOException **), поэтому спасибо всем вам за быстрый и правильный ответ (+1). Но теперь он поднял новый вопрос. Теперь кажется, что у меня проблема с именем пользователя и паролем. Я получаю сообщение об ошибке '$ errMsg. = 'Имя пользователя и пароль не найдены
''; – Svinjica

+0

@Svinjica, вы можете показать сообщение об ошибке? –

+0

возвращает переменную '$ errMsg' со значением _Username и пароль не найден_ – Svinjica

1

вы положили в неправильном имени для параметра при использовании :lozinka

$records->bindParam(':ime', $ime);

должен быть

$records->bindParam(':lozinka', $ime);

Или изменить параметр в подготовке заявления.

1

Это потому, что вы указали неправильный заполнитель и обвязки значение с другими,

if($errMsg == ''){ 
$records = $databaseConnection->prepare('SELECT id,ime,lozinka FROM korisnici WHERE lozinka = :lozinka'); 
$records->bindParam(':ime', $ime); 

it should be like: 
if($errMsg == ''){ 
$records = $databaseConnection->prepare('SELECT id,ime,lozinka FROM korisnici WHERE lozinka = :lozinka'); 
$records->bindParam(':lozinka', $ime); 

Bind lonzinka