2012-10-13 4 views
0

Ну, что-то не так. Я печатаю имя пользователя и пароль, которые существуют в моей БД. Она должна echo эта строка в таких ситуацияхPHP-код работает неправильно

необходимо активировать

но эхо этого

Вы должны рег

init.php

<?php 
    //error_reporting(0); 
    session_start(); 

    require 'dbconnect.php';//this works okay so i wouldn't post this file code 
    require 'users.php'; 

    $errors = array(); 
?> 

users.php

 <?php 

     function user_exists($username){ 
      $username = mysql_real_escape_string($username); 

      $query = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username'"); 

      if (!$query) { 
       die('Could not query:' . mysql_error()); 
      } 

      return (mysql_result($query, 0) == 1) ? true : false; 

     } 

     function user_active($username){ 

      $username = mysql_real_escape_string($username); 

      $querytoo = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username' AND 'active' = 1"); 

      if (!$querytoo) { 
       die('Could not query:' . mysql_error()); 
      } 

      return (mysql_result($querytoo , 0) == 1) ? true : false; 

     } 
    ?> 

login.php

<?php 
include 'init.php'; 


if(empty($_POST) === false){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if(empty($username) === true || empty($password) === true){ 
     $errors[]='You need to enter a username and password'; 
    } 
    elseif(user_exists($username) === false){ 
     $errors[]='You need to reg'; 
    } 
    elseif(user_active($username) === false){ 
     $errors[]='need to activate'; 
    } 
    else { 
    // 
    } 

    print_r($errors); 
} 



?> 

часть HTML

<form action="login.php" method = "post"> 
        <ul id="login"> 
         <li> 
          username:<br> 
          <input type="text" name="username" size="30" value=""/></li> 
         <li>password:<br> 
          <input type="password" name="password" size="30" value=""/></li> 
         <li><input type = "submit" value ="Log in"></li> 
         <li> 
          <a href="register.php"> Register</a> 
         </li> 
        </ul> 

P.S. текст запросов работает нормально, я проверил его в mysql. в коде PHP, когда я типа `` вместо '' здесь

SELECT COUNT ('user_id') FROM users WHERE 'имя пользователя' = '$ имя пользователя' И 'активный' = 1

появляется

'не удалось запросить:'

вещь

и я попытался elseif и else if вещей, так что я не думаю, что проблемы есть

+1

Пожалуйста, не используйте функции 'mysql_ *' для записи нового кода. Они больше не поддерживаются, и сообщество начало [процесс устаревания] (http://goo.gl/KJveJ). См. [* Red box *] (http://goo.gl/GPmFd)? Вместо этого вы должны узнать о [подготовленных утверждениях] (http://goo.gl/vn8zQ) и использовать либо [PDO] (http://php.net/pdo), либо [MySQLi] (http://php.net/ MySQLi). Если вы не можете решить, что, [эта статья] (http://goo.gl/3gqF9) поможет вам. Если вы выберете PDO, [здесь хороший учебник] (http://goo.gl/vFWnC). – Robik

ответ

6

Ваш SQL неправильно. Вы сравниваете статические строки к вашему значению, а не имя столбца:

SELECT COUNT('user_id') FROM users WHERE 'username' = '$username' AND 'active' = 1 

должен быть

SELECT COUNT(user_id) FROM users WHERE username = '$username' AND active = 1 

Обратите внимание, что я удалил "из названия столбцов. Это также справедливо использовать кавычку:

SELECT COUNT(`user_id`) FROM users WHERE `username` = '$username' AND `active` = 1 
+0

В нем говорится: «Не удалось выполнить запрос: Неизвестный столбец« user_id »в« списке полей » – DanilGholtsman

+0

, но столбец user_id существует, я проверил его – DanilGholtsman

+0

вы могли бы запустить' SHOW CREATE TABLE users'? –

1

' используя вокруг имен таблиц/полей в запросе превращает их в строки, и они не будут больше рассматриваться как имена полей/таблиц. Вот почему есть backticks, для избежания таких имен полей/таблиц, которые являются ключевыми словами. Единственное время, когда вы должны избегать имен полей/таблиц, - это зарезервированные слова.

Это означает, что ...

SELECT COUNT('user_id') 
      ^-  ^- 
FROM `users` 
WHERE 'username' = '$username' AND 'active' = 1"); 
     ^--  ^--     ^-  ^- 

совершенно неправильно.Вы считаете фиксированную строку, вы сравниваете предоставленное имя пользователя со строкой, значение которой составляет username, а также за active.

1

Ваш запрос, чтобы проверить наличие пользователь, вероятно, одна из вашей проблемы:

$query = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username'"); 

В этом запросе, вы используете одиночные кавычки на ваше имя столбца. Это приводит к сравнению двух строк, и, если у вас нет имени пользователя под названием username, он всегда будет возвращать 0. Выбери свои столбцы с символом `char.

$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"); 

или не использовать ничего

$query = mysql_query("SELECT COUNT(user_id) FROM `users` WHERE username = '$username'"); 
+0

тоже здесь Не удалось выполнить запрос: Неизвестный столбец 'user_id' в 'списке полей' – DanilGholtsman

+0

Я просто использовал то, что вы написали ('user_id'). Тем не менее, я рад, что теперь это сработало, когда вы перезагрузились. –

+0

спасибо! и теперь apache crushes http://gyazo.com/a3e65d30d251d5dd94608893c73d3c59 Мне кажется, я должен переустановить Denwer. еще раз. ой. – DanilGholtsman

1

Вы помнили, чтобы зарегистрировать имя пользователя в сессии, а также получить его потом?

$username = $_SESSION['username']; 
+0

нет, но он должен нормально работать без такой вещи, не так ли? – DanilGholtsman

+0

Ну, откуда взялась переменная $ username? – imp

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