2013-03-07 4 views
0

У меня есть два способа получить имя пользователя для игроков, другое, когда они заходят в систему, а другое - при входе в систему по электронной почте. Тем не менее, когда они регистрируются как новый игрок, он подключается к базе данных Minecraft.net и проверяет правильность имени пользователя/пароля/электронной почты, если это так, он добавит их в нашу базу данных без пароля.mysql_num_rows не работает, но он работает над другим запросом

Но я не могу заставить второй MYSQL-запрос работать, нет ошибок mysql или ошибок соединения, но строки продолжают выходить как 0, когда внутри есть 1 строка.

if (strpos($_POST['username'],'@') === false) { 
       $username = $_POST['username']; 
       $res = mysql_query("SELECT * FROM users WHERE user_email='$username'"); 
       $ign_exists_check = mysql_num_rows($res); 
       $username_exists_check = 0; 
       if(!$res) die ('Unable to run query1:'.mysql_error()); 
      } 
      else { 
       $username = $_POST['username']; 
       $res2 = mysql_query("SELECT * FROM users WHERE user_name='$username'"); 
       $username_exists_check = mysql_num_rows($res2); 
       $ign_exists_check = 0; 
       if(!$res2) die ('Unable to run query1:'.mysql_error()); 
      } 
      die($username_exists_check . $ign_exists_check); 
      if ($usernamea_exists_check == 0 && $ign_exists_check == 0) 
       { 
+0

Это все верно? 'strpos ($ _ POST ['username'], '@') === false' =>' user_email = '$ username'', кажется, вы неправильно установили это условие. – sofl

+0

Позвольте мне посмотреть, если это сработает. – Lewes

+0

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

ответ

0

Если вы не получили ошибок и 0 строк тогда запрос «работал», он просто не нашел строк, которые соответствовали критериям. Что вам нужно сделать, это эхо из запроса, таким образом:

echo "SELECT * FROM users WHERE user_name='$username'"; 

тогда Вы будете видеть именно то, что он ищет. Действительно, возьмите эхо-запрос и попробуйте запустить его в базе данных, используя что-то вроде phpMyAdmin.

Тем не менее, что-то, о чем я говорю, заключается в том, что ваша логика говорит, что если вы НЕ НАЙТИ @ в опубликованном поле имени пользователя, затем найдите имя пользователя в столбце user_email, а если есть @, то найдите его в поле user_name. Возможно, ваш чек должен быть:

if (strpos($_POST['username'],'@') !== false) { 
0

Ваша логика кажется перевернутой.

Когда нет @ s в имени пользователя, вы запрашивая user_email
Есть также слишком много повторов в коде

if (strpos($_POST['username'],'@') === false) { 
    $username = mysql_real_escape_string($_POST['username']); 
    $sql = "SELECT * FROM users WHERE user_name='$username'" 
    $username_exists_check = 1; 
} else { 
    $email = mysql_real_escape_string($_POST['username']); 
    $sql = "SELECT * FROM users WHERE user_email='$email'" 
    $username_exists_check = 0; 
} 
$res = mysql_query($sql) or trigger_error(mysql_error().$sql); 
$user = mysql_fetch_array($res); 
if ($user) { 
    $ign_exists_check = !$username_exists_check; 
} else { 
    $ign_exists_check = $username_exists_check = 0; 
} 
var_dump($row,$username_exists_check,$ign_exists_check); 
Смежные вопросы