Итак, у меня есть код. Я знаю, что mysql_num_rows устарела, но так как я уже использовал это, я не хочу переключать все на mysqli_. В любом случае, он работал на моем локальном сервере и возвращал 1 или более результатов в зависимости от записи. Это скрипт входа в PHP, который я пытаюсь заставить работать. Когда я загрузил скрипт на сервер hostgator, он не работал. Я также проверил версию PHP, и в mysql_num_rows () она не должна быть устаревшей в версии 5.4.xxx.
Когда я пытаюсь выполнить тестовый запрос только для SELECT * FROM клиентов, он возвращает одну строку, но ничего не возвращает, когда я ищу, где пользователь и пароль совпадают с опубликованными переменными. Это расстраивает меня, и я мог бы использовать второй набор глаз, чтобы посмотреть на это.
<?php
include('mysql_connect.php');
if(isset($_POST['submit'])) {
if(isset($_POST['cususername']) AND isset($_POST['cuspassword'])) {
$username = $_POST['cususername'];
$password = md5($_POST['cuspassword']);
$query = "SELECT * FROM customers WHERE username = '" . $username . "' AND
password = '" . $password . "'";
$returned_user = mysql_query($query);
$number_of_users = mysql_num_rows($returned_user);
if($number_of_users > 0){
echo "It got this far!";
$customer_array = mysql_fetch_array($returned_user);
$_SESSION['user_logged'] = 1;
$_SESSION['id'] = $customer_array['customer_id'];
$_SESSION['user_name'] = $customer_array['username'];
}
}
}
?>
<?php
if(isset($_REQUEST['loggoff'])) {
unset($_SESSION['user_logged']);
unset($logged_status);
}
if(isset($_SESSION['user_logged'])) {
$logged_status = $_SESSION['user_logged'];
}
if(isset($logged_status)) {
if($logged_status == 1) {
echo "You are logged in as " . $_SESSION['user_name'] . ", Click here to <a href='" . $_SERVER['PHP_SELF'] . "?loggoff=1'>Log off</a>" . "<br>";
}
}
else {?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="customerlogin">
<input type="text" name="cususername" id="cususername" />
<input type="password" name="cuspassword" id="cuspassword" />
<br />
<input type="submit" name="submit" value="Login" />
</form>
<?php}?>
Вы должны проверить, есть ли у вас mysql_error в вашем запросе.
Btw. Вы должны mysql_real_escape ваши данные POST перед использованием в mysql_query
Если вы будете использовать имена столбцов в качестве индекса массива, вы должны использовать mysql_fetch_assoc () вместо mysql_fetch_array ();
Попробуйте этот код:
<?php
include('mysql_connect.php');
if( isset( $_POST['submit'] ) )
{
if( isset( $_POST['cususername'] ) AND
isset( $_POST['cuspassword'] ) )
{
// Prevent mysql injection
$username = mysql_real_escape_string( $_POST['cususername'] );
$password = md5( $_POST['cuspassword'] );
$query = "SELECT * FROM `customers` WHERE `username` = '" . $username . "' AND `password` = '". $password ."'";
$result = mysql_query( $query );
// Check if error
if( mysql_errno() !== NULL )
{
exit( "An mysql_error has occured: \r\n".
"Err-No: " . mysql_errno() . "\r\n".
"Err-Msg: " . mysql_error()
);
}
// Everything is okay .. Go on
$iRows = mysql_num_rows( $result );
// Check if only one user was found
if( $iRows === 1 )
{
echo "It got this far!";
$customer = mysql_fetch_assoc( $result );
// Use boolean value instead of numbers
$_SESSION['user_logged'] = true;
$_SESSION['id'] = $customer['customer_id'];
$_SESSION['user_name'] = $customer['username'];
}
}
}
Я надеюсь, что смогу помочь тебе.
Если этот код не работает, попробуйте вывести сгенерированную SQL-статистику и попробуйте самостоятельно в вашем SQL Admintool (например, phpMyAdmin).
Извините за мой плохой английский :/
Одно предложение Скорее, чем «И». Используйте ‘&&». Некоторые коды не выполняются с использованием AND в условии if. Просто предложение.
if(isset($_POST['cususername']) && isset($_POST['cuspassword']))
Хорошо, ребята, и для всех тех, у кого похожие проблемы с поиском. Вот мой ответ. Поле пароля не совпадает с введенным $_POST
, Итак, я вышел в интернет и посмотрел ответ. Приходите, чтобы узнать пароль был varchar(25)
, который отрезал хеш md5. Это было то, что вызывало MySQL_NUM_ROWS()
чтобы вернуть 0. Не волнуйтесь, я добавлю предотвращение инъекций MySQL в мой скрипт, как предлагают немногие из вас, включая Криса Виттора. Кроме того, я знаю, что md5 — это устаревший способ расшифровки информации, но он лучше простого текста.