2013-10-05 3 views
0

Здравствуйте, у меня возникли проблемы с пониманием того, почему моя аутентификация продолжает работать. Ive пробовал много методов отладки, и я предполагаю, что это сильно. Продолжайте понимать, что я новичок, и пока безопасность не является проблемой. Я просто хочу, чтобы он работал.Ошибка входа в функцию входа в систему, PHP

Так что для моего сценария, регистрирующего у меня есть пользователь вводит имя пользователя и пароль

  $username = $_POST['username']; 
      $password = $_POST['password']; 

// Сообщения Данные сохраняются

  $createTable = $db->prepare("CREATE TABLE `$username` (Title varchar(40) , 
                About varchar(1000) , 
                Chapter int(4), 
                Img varchar(100) , 
                Url varchar(50)) "); 

      $createTable->execute(); 

/// создает таблицу для пользователя

  $Register = $db->prepare("INSERT INTO library (id, 

username, password) VALUES ($id , 
'$username','$password')"); 
      $Register ->execute(); 

// вставляем данные в таблицу библиотеки. Библиотека имеет пользователей и пароли

   echo 'user sucessfully registered'; 

       $_SESSION['user'] = $username; 
       $_SESSION['pass'] = $password; 

Проблема у меня есть аутентификация для входа. Функция входа вызывается с двумя переменными SESSION, которые используются в качестве параметров.

function login($SentUser , $SentPass) 

     { 

echo 'trying to log in '.'<br>'; 

    require_once 'Connection.php'; 
    $user = $SentUser; 
    $pass = $SentPass; 

    /// check data base for match user and pass 
     $sth = $db->prepare('SELECT username , password from `library` where username = ? And password = ? '); 

     $sth->bindParam(1, $user); 
     $sth->bindParam(2, $pass); 
     $sth->execute(); 


     while ($row = $sth->fetch(PDO::FETCH_ASSOC)) 
      { 
     echo 'user : ' . $row['username'] , '<br>'; 
     echo 'pass: ' . $row['password'] , '<br>'; 
     echo '<br>'; 
      } 
     . 
     // fetchcolumn returns true false if select took a row or not. 
if($sth->fetchColumn() != false) { /// This is where the code fails as it almost always goes to the else case. 

      $_SESSION['user'] = $user; 
      $_SESSION['pass'] = $pass; 
      $_SESSION['passed'] = TRUE; 
      echo 'Welcome '.$user.'<br>';} 
     else 
      { 

       echo 'failed authenticate'.'<br>'; 

      } 

Подробнее об этом здесь - connection.php. Он в основном просто соединяет меня с базой данных, дающей мне объект $ db.

<?php 


$config['db'] = array(
    'host' => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'dbname' => 'mywebsite' 
    ); 




$db = new PDO('mysql:host=' . $config['db']['host']. ';dbname=' . $config['db']['dbname'] , $config['db']['username'] , $config['db']['password']); 

?> 
+0

Почему вы создаете таблицу для каждого пользователя? – joschua011

+0

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

ответ

1

Вы упомянули library стол имеет пользователей/пароли. Таким образом, он должен иметь только одну строку для каждого пользователя. Изменить код, как показано ниже:

if($sth->rowCount() == 1) { 
     //row exists, so user exists 
     $row = $sth->fetch(PDO::FETCH_ASSOC); 
     echo 'user : ' . $row['username'] , '<br>'; 
     echo 'pass: ' . $row['password'] , '<br>'; 
     echo '<br>'; 

     //set session 
     $_SESSION['user'] = $user; 
     $_SESSION['pass'] = $pass; 
     $_SESSION['passed'] = TRUE; 
     echo 'Welcome '.$user.'<br>'; 
    } else { 
     //auth failed 
     echo 'failed authenticate'.'<br>'; 
    } 
+0

спасибо, можно сказать, что я сделал неправильно. im все еще новый в sql-функциях – Dahnny012

+0

В строке 'while ($ row = $ sth-> fetch (PDO :: FETCH_ASSOC))' вы уже выбрали строку. Теперь не осталось строк для извлечения. Итак, 'if ($ sth-> fetchColumn()! = False) {' всегда будет возвращать 'false' – Rajesh

+0

Итак, когда вы выберите что-то, положите его в резерв. И когда вы забираете его, он берет его из резерва? – Dahnny012

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