2013-02-10 1 views
-1

У меня была проблема исправлена, но поскольку я пытался исправить ошибки SQL, я создал ошибку и начал с нуля, я снова застрял в этом вопросе и понятия не имеет, что делать. Пожалуйста помоги.Предупреждение: mysql_num_rows(): предоставленный аргумент не является допустимым ресурсом результата MySQL - не удается найти исправление

<? 
ob_start(); 
include 'easygpt_config.php'; 
ob_end_clean(); 
if(isset($_POST['login'])){ 
$username= trim($_POST['username']); 
$password = trim($_POST['password']); 
if($username == NULL OR $password == NULL){ 
$final_report.="Please complete both fields"; 
$check_user_data = mysql_query("SELECT * FROM `members` WHERE `username` = '$username'") or die(mysql_error()); 
}else{ 
if(mysql_num_rows($check_user_data) == 0){ 
$final_report.="This username does not exist"; 
}else{ 
$get_user_data = mysql_fetch_array($check_user_data) or die("A MySQL error has occurred.<br />Your Query: " . $your_query . "<br /> Error: (" . mysql_errno() . ") " . mysql_error()); 
if($get_user_data['password'] == $password){ 
$start_idsess = $_SESSION['username'] = "".$get_user_data['username'].""; 
$start_passsess = $_SESSION['password'] = "".$get_user_data['password'].""; 
$final_report.="<meta http-equiv='Refresh' content='0; URL=http://www.google.com>"; 
}}}} 

if(isset($_SESSION['username']) && isset($_SESSION['password'])){ 
    } 

?> 

Линия, которая в настоящее время в списке вызывает ошибку в строке 12, которая состоит из:

if(mysql_num_rows($check_user_data) == 0){ 
+1

Вы запускаете запрос в отдельном блоке, чем вы используете 'mysql_num_rows' –

+2

Пожалуйста, используйте функции' mysqli_' вместо устаревших 'mysql_' функций. –

+0

Не могли бы вы посоветовать сделать это Марвин? Я собирался переключить весь свой скрипт на PDO, это будет проблема? – user2057939

ответ

0

С только некоторым стандартным отступом становится совершенно ясно, что происходит, как взрыв таблетки уже указывалось :

<? 
ob_start(); 
include 'easygpt_config.php'; 
ob_end_clean(); 
if (isset($_POST['login'])) { 
    $username = trim($_POST['username']); 
    $password = trim($_POST['password']); 
    if ($username == NULL OR $password == NULL) { 
     $final_report .= "Please complete both fields"; 
     $check_user_data = mysql_query("SELECT * FROM `members` WHERE `username` = '$username'") or die(mysql_error()); 
    } else { 
     if (mysql_num_rows($check_user_data) == 0) { 
      $final_report .= "This username does not exist"; 
     } else { 
      $get_user_data = mysql_fetch_array($check_user_data) or die("A MySQL error has occurred.<br />Your Query: " . $your_query . "<br /> Error: (" . mysql_errno() . ") " . mysql_error()); 
      if ($get_user_data['password'] == $password) { 
       $start_idsess = $_SESSION['username'] = "" . $get_user_data['username'] . ""; 
       $start_passsess = $_SESSION['password'] = "" . $get_user_data['password'] . ""; 
       $final_report .= "<meta http-equiv='Refresh' content='0; URL=http://www.google.com>"; 
      } 
     } 
    } 
} 
if (isset($_SESSION['username']) && isset($_SESSION['password'])) { 
} 
?> 

Вы выполнения запроса (и, таким образом, установив $check_user_data) в if блоке, и тестирование его в else.

Хотите избежать такого рода беспорядков в будущем? Отредактируйте свой код вручную или получите один из редакторов кода bazillion, которые могут справиться с этой задачей для вас. Или используйте один из многочисленных онлайн-сервисов для печати (например, [beta.phpformatter.com]) (http://beta.phpformatter.com/).

И последнее, но не менее важное: прекратить использование устаревших функций mysql_. Устаревший, помимо прочего, означает, что вы не должны использовать их в новом коде.

Я также предлагаю забыть о более современном преемнике mysqli_ и сразу же пропустить до PDO - это современный, хорошо продуманный API, используемый несколькими двигателями баз данных и, наконец, не в последнюю очередь, он делает работу с подготовленными операторами бриз и подготовленные заявления, вероятно, являются наименее дорогостоящими, но наиболее эффективными средствами защиты от sql injection.

+0

Я переключаюсь на PDO, я просто никогда не использовал его, и с тех пор, как я создаю плагин, я хочу, чтобы он был совершенным, прежде чем я его опубликую. Спасибо за отзыв о форматировании PHP, выглядит красиво. Все, что вы можете порекомендовать, поможет мне с преобразованием в PDO? – user2057939

+0

Ну, еще одна причина для переключения прямо сейчас, выпуская совершенно новый код, основанный на осужденном API, будет очень неразумным. Взгляните на документы PDO, на которые я ссылался, или на любой из учебников онлайн. Вы увидите, что PDO отображает почти 1: 1 на mysql_, вы также открываете соединение, подготавливаете запрос и получаете его результат. Не должно быть сложно преобразовать. И форматирование вашего кода действительно не о красоте, оно полностью функционально, как я хотел показать вам: как только код будет отступы с отступом, он сразу станет понятным, почему он не работает, как я объяснил в своем ответе. – fvu

+0

Я даже не знал о правильном форматировании, но даже с тем, что он более функциональный, я должен признать, что он выглядит намного лучше. – user2057939

Смежные вопросы

 Смежные вопросы