2012-07-01 5 views
0

저는 MySql을 처음 사용하면서 데이터베이스에서 값을 가져 오는 데 문제가 있습니다. 나는 그것이 정확한 방법으로 가고 있다고 생각했지만 내 echo 문장은 아무 것도 출력하지 못했다.MySQL 데이터베이스에서 값을 가져 오는 데 문제가 있습니다.

몇 가지 도움을 주시면 감사하겠습니다. 내 코드는 아래와 같습니다. 나중에 사용자 입력을 살균하는 것과 같은 보안 기능을 추가해야 할 것입니다.

<?php 
      $email = $_POST['email']; 
      $password = $_POST['password']; 
      $hashedPass = sha1($password); 

      if ((!isset($email)) || (!isset($password))) { 
       //Visitor needs to enter a name and password 
       echo "Data not provided"; 
      } else { 
       echo "Received details $email and $password <br/>"; 
       // connect to mysql 
       $mysql = mysqli_connect("localhost", "root", "root"); 
       if(!$mysql) { 
       echo "Cannot connect to PHPMyAdmin."; 
       exit; 
       } else { 
       echo "Connected to phpmyadmin <br/>"; 
       } 
      } 
      // select the appropriate database 
      $selected = mysqli_select_db($mysql, "languageapp"); 
      if(!$selected) { 
       echo "Cannot select database."; 
       exit; 
      } else { 
       echo "DB Selected"; 
      } 
      // query the database to see if there is a record which matches 
      $query = "select count(*) from user where email = '".$email."' and password = '".$hashedPass."'"; 
      $result = mysqli_query($mysql, $query); 
      if(!$result) { 
       echo "Cannot run query."; 
       exit; 
      } 

      $row = mysqli_fetch_row($result); 
      $count = $row[0]; 

      $userdata = mysqli_fetch_array($result, MYSQLI_BOTH); 
      echo $userdata[3]; 
      echo $userdata['firstName']; 

      if ($count > 0) { 
       echo "<h1>Login successful!</h1>"; 
       echo "<p>Welcome.</p>"; 
       echo "<p>This page is only visible when the correct details are provided.</p>"; 
      } else { 
       // visitor's name and password combination are not correct 
       echo "<h1>Login unsuccessful!</h1>"; 
       echo "<p>You are not authorized to access this system.</p>"; 
      } 
      ?> 
+0

* 나중에 보안을 추가해야 할 것입니다. * 나중에 코드를 버리고 올바르게 다시 쓰거나 잊어 버리는 것을 의미합니다. 첫 번째로 올바르게하십시오. – Quentin

+2

[PHP 비밀번호 FAQ] (http://php.net/manual/en/faq.passwords.php) 읽기 - sh1을 사용하지 말고 소금을 사용하십시오. – Quentin

+1

데이터베이스 이스케이프를 너무 많이 사용하는 경우 필요하지 않은 최신 데이터베이스 API를 사용하는 것이 어떻습니까? [PDO] (http://php.net/manual/en/mysqlinfo.api.choosing.php)와 준비된 문구를 사용하는 것이 더 간단합니다. 게으른 사람들에게 딱! – mario

답변

1

내가 문제가 전화 할 것을 믿고 두 번 * 은 $ 유저 데이터가 비어하게됩니다 * 가족 기능을 가져옵니다.

설명서 mysql_fetch_row에서 다음 행을 가져오고 내부 데이터 포인터를 앞으로 이동합니다. 따라서 mysqli_fetch_array ($ result, MYSQLI_BOTH)를 호출하면 사용자/암호가 고유하다고 가정하고 검색 할 것이 없다. 또 다른 실수는 SELECT가 실제 사용자 데이터를 검색하는 것이 아니라 사용자/암호 조합의 카운트 번호를 검색한다는 것입니다. 따라서 데이터를 올바르게 가져 오더라도 사용자 데이터가 항상 올바르지 않습니다.

그래서 그런 식으로 뭔가 쿼리를 변경 : 항목이 존재하고 사용자 데이터를 검색 할 경우

$query = "select * from user where email = '".$email."' and password = '".$hashedPass."' LIMIT 1"; 

그런 다음 확인로 MYSQL_ASSOC를 사용합니다.

관련 문제