2010-01-19 7 views
-1

에서 로그인 폼을 가지고 노력하는 것은 내가 일하고 있어요 코드입니다 :는 PHP 여기

  login.php: 

       <?php 
     $con = mysql_connect("localhost","root",""); 
      mysql_select_db("koro",$con); 

      $result= "SELECT * FROM users WHERE      
      UNAME='".mysql_real_escape_string($_POST['Uneym'])."'"; 
      echo $result; 
      $num=mysql_num_rows($result); 
         echo $num; 
        for($i=1;$i<=$num; $i++){ 
      while($row=mysql_fetch_array($result)) 
     { 
      $user=$row['UNAME']; 
      $pass=$row['PW']; 
      } 
      } 


      if($username == $user && $password ==$pass) 
     { 
      echo "<script>alert('Login Successful!')</script>"; 
      } 
      else if($password!= $pass ||$username != $user) 
      { 
      echo("Please Enter Correct Username and Password ..."); 
      ?> 

loginform.php :

 <html> 
    <form action="login.php" method="post"> 

     Username:<input type="text" name="Uneym" value="" /><br/> 
       Password:<input type="password" name="Pass" value="" /><br/> 

     <br/> 
      <input type="submit" name="Submit" value="" /> 

      </form> 
</head> 
      <body> 
     </body> 
      </html> 

가 결정됨이 같은 초보자를위한 간단한 코드 me? :)

+1

현재 코드 (들여 쓰기 제외)의 문제점과 phpmyadmin과 관련된 내용을 설명해야합니다. –

+0

나는 로그인 스크립트이기 때문에 그가 phpadmin을 잘못 읽은 것으로 생각하고 도구에 대해 몰랐다. – Cryophallion

답변

1

코드가 너무 복잡하지 않습니다. 작업을 수행하는 것이 훨씬 간단해질 수는 없습니다. 그러나 암호화되지 않은 암호를 데이터베이스에 저장하면 안됩니다. hashing passwords in mysql에 관한이 기사를보세요.

2

당신이 교육 운동으로 그 일을하는 경우, 더 그것을 할, 당신은 하나의 페이지로 모든 것을 할 수 있지만이 오류가있는 경우 시도 할 수 있도록이 (작동하는지 확인하기 위해 더 쉬운 방법이 없다 다시).

현실적으로 너무 간단합니다. 암호를 해시하고 소금을 사용하고 좋은 암호를 적용하고 최대 로그인 횟수를 계산하고 모든 사용자 정보를 세션에 저장해야합니다. 당신이있어)

$dbh=mysql_connect(...); 
mysql_select_db(...,$dbh); // note see below 
$result=mysql_query(....$dbh); 
while ($row=mysql_fetch_assoc($result)) { 
    ... 
} 

2 : 코드처럼 보일 것이다 - 그러나 나중에 올 수있는 모든이 ....

1

1) 첫 번째 버그는 DBMS에 질의를 제출하지 않을 것입니다 쿼리에서 행을 검색하는 코드 주위에 2 개의 루프 (for 루프와 while 루프)가 있어야합니다. 하나만 있어야합니다. 9 번 주위 그래서 쿼리, 3 개 행을 반환하는 경우 실제로 루프 :

1) 루프 반복 한 2) 루프 반복 1 행 1을 가져 오는 동안, 기록에 대한 루프 반복 2 행 2를 가져 오는 동안 3) 기록 결과 루프 2 7 루프 반복에 대한 후속 반복 6)에 장애가있는 동안 루프 후속 반복 8 실패 동안 결과 루프 반복 3 열 (3)을 인출하면서, 기록) 4 루프 반복 3 9) 동안))) 5 결과 후속 반복에서 루프가 실패합니다.

3) mysql_fetch_assoc에서 반환 한 값을 스칼라 변수 (즉, 매번 te 결과를 덮어 쓰게되므로 $ user와 $ pass는 항상 반환 된 마지막 행의 값을 포함합니다.

4) 루프 내에서 조기 종료 기준을 설정하기 위해 좋은 방법 - 추가로 중복 실행을 방지하기 위해이 또한 위에서 설명한 3 버그, 예를 해결할 것

$valid=false; 
while($row=mysql_fetch_array($result)) 
{ 
     if (($username==$row['UNAME']) && ($password==$row['PW'])) { 
      $valid=true; 
      break; 
     } 
} 
if ($valid) {.... 

4) 이전은 $ _POST [ 'Uneym']와 동일해야합니다 말한 때 사용자 이름이 $ 사용자 이름과 일치하는 경우 확인하려는 이유는 다음 문제입니다.

5) 다음 문제는 register_globals를 활성화 한 상태에서이 코드를 작성한 것입니다.

6) 다음 문제는 데이터베이스에서 데이터를 불필요하게 가져 오는 것입니다. 비밀번호에 필터를 추가하면 1 또는 0 행만 가져옵니다 (결과를 반복하지 않아도됩니다.

$user=mysql_real_escape_string($_POST['Uneym'], $dbh); 
$pass=mysql_real_escape_string($_POST['password'], $dbh); 
$result=mysql_query("SELECT * FROM users WHERE UNAME='$user' AND PW='$pass'",$dbh); 
$valid=mysql_num_rows($result); 

을 더욱 더이있다 :)를 설정

7) 경우 ($ 사용자 이름 == $ 사용자 & & $ 암호 == $ 패스) { 는 "경고 ('로그인 성공 에코! ') "; } else if ($ password! = $ username! = $ user) { echo ("올바른 사용자 이름과 암호를 입력하십시오 ..."); >

이 구문 분석하지 않습니다 - 단지 이제까지 다른 절에 가서 코드가 실패하는 경우 -은 타의 추종을 불허하는 '{'는 다른

8) else 문에서 조건이 중복 후 거기 if 절 및 정의에 따라

($ username == $ user & & $ password == $ pass) ===! mysql_select_db()를 사용하면 여러 개의 mysql 데이터베이스로 작업하는 경우 인생을 매우 복잡하게 만들 수있다. 일반적으로 어떤 종류의 mysql_select_db()를 사용 하는지를 명시하는 것은 더 좋은 생각이다. 데이터베이스는 테이블이 DML 문에 상주합니다.

C.