2015-11-23 2 views
0

Следующий код используется для создания простой формы входа в систему. Однако, когда он запускается, возникает ошибка:Необходима помощь с простой формой регистрации php

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

N:\ftp\compc\cw12gh\COM570\check_login.php on line 34 Wrong Username or Password

Line 34 is $count=mysql_num_rows($result);

Любые предложения относительно того, как исправить это?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Check Log In</title> 
</head> 

<body> 
<?php 

$host="localhost"; // Host name 
$username="*****"; // Mysql username 
$password="******"; // Mysql password 
$db_name="******************"; // Database name 
$tbl_name="teachers"; // Table name 

// Connect to server and select database. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 
?> 
</body> 
</html>    
+0

Здесь [Ответ] (http://stackoverflow.com/a/33665819) Я написал для страницы регистрации и настройки страницы входа в 'mysqli' и' pdo'. Использует хешированные пароли, а не cleartext. Вы можете посмотреть в нем когда-нибудь – Drew

+0

Вы не можете выводить содержимое перед использованием функции 'header'. 'Помните, что header() должен быть вызван до отправки любого фактического вывода либо с помощью обычных тегов HTML, либо пустых строк в файле, либо из PHP.' -http: //php.net/manual/en/function.header. php – chris85

ответ

0

Вы должны использовать возвращаемое значение mysql_connect, и хранить его, как:

$con = mysql_connect($host, $username, $password) 

... затем использовать его в качестве первого аргумента функции mysql_query:

$result=mysql_query($con, $sql); 

Сказав это, пожалуйста, знайте, что эти функции устарели. Вы должны перейти на mysqli или PDO синтаксис.

0

это может быть, что ваш запрос не удается по каким-то причинам, попробуйте

$link = mysql_connect("$host", "$username", "$password")or die("cannot connect"); 

    //.... 

    $sql="SELECT * FROM ".$tbl_name." WHERE username='".$Email."' AND password ='".$Password."'"; 

    $result=mysql_query($sql, $link) or die ('Unable to run query:'.mysql_error()); 

ИЛИ

if(!$result) die ('Unable to run query:'.mysql_error()); 

так Если запрос не удается, он возвращает FALSE, следовательно булевой вы проходящее в mysql_num_rows (); Вы должны всегда проверять, действительно ли результат существует, прежде чем продолжать работу с вашим кодом.

+0

Спасибо! Это избавило от ошибок, теперь это говорит о том, что я ввожу неправильное имя пользователя или пароль, но они не являются неправильными, поэтому я предполагаю, что что-то не так со ссылкой на таблицу базы данных. –

+0

~ Hannah Glasgow вам нужно прокомментировать ваш эхо ваш запрос и выполнить его с помощью своего db, пожалуйста, подтвердите свой ответ, если он работает для вас. Thanx. –