2013-07-20 3 views
-4

여기에 내 코드가 있습니다. if 문이 작동하지 않을 수 있습니다. 이름이 존재하지 않으면 "레코드를 찾았습니다"라고 표시하고 page3.php는 비밀번호가 일치하지 않는다고 말합니다. 이걸 도와 줘서 고마워.이 작업을 수행하려면 무엇을해야합니까?

<?php 
session_start(); 
//$_SESSION["authorized"]=0; 
$name = $_POST["name"]; 
$pass = ($_POST["password"]); 

$connect = mysql_connect("localhost","tina","tinapassword") or die("Could not connect"); 

$selected = mysql_select_db("tinadatabase", $connect) or die("Could not connect to database"); 

$query = "SELECT * FROM users WHERE Uname='$name'"; 
$result = mysql_query($query, $connect); 

$row = mysql_fetch_assoc($result); 

if ($result) 
{ 
    //$row ==1; 
    print "Record found"; 

} 
else 
{ 
    //$row == 0; 
    print "Record not found"; 
} 
print "<br>"; 

md5($pass); 
if($name == $result["Uname"] && md5('$pass') == $result["Upassword"]) 
{ 
    $_SESSION["authorized"] = 1;  
} 
else 
{ 
    $_SESSION["authorized"] = 0; 
} 
print "<br>"; 
print"<a href='page3.php'> continue</a>"; 
?> 
+0

프로그래머를 환영합니다. [about] (http://programmers.stackexchange.com/about) 페이지를 읽어보십시오. 이 질문은 StackOverflow에 속합니다. 내가 이주 할 것이라고 플래그를 지정합니다. –

+0

죄송합니다.이 페이지를 사용하는 방법을 모르 셨습니다. 도움을 주셔서 감사합니다. –

+2

[오래된 ** 데이터베이스 API] (http://stackoverflow.com/q/12859942/19068)를 사용하고 있으며 [현대 대체] (http://php.net/manual/en/mysqlinfo.api.choosing.php). 또한 ** [SQL 주입 공격] (http://bobby-tables.com/) **에 현대적인 API를 사용하면 쉽게 방어 할 수 있습니다 ** (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)을 사용하십시오. – Quentin

답변

0

다른 사람들이 언급 한대로 mysql_num_rows()이 귀하의 답변입니다. 여기서 중요한 점은 $row을 사용할 때 $result을 연관 배열로 사용한다는 것입니다. 귀하의 코드를 다시 작성했습니다 :

<?php 

session_start(); 

$name = $_POST["name"]; 
$pass = $_POST["password"]; 

$conn = mysql_connect("localhost","tina","tinapassword") or die("Could not connect to MySQL server."); 

if (!$conn) { 
    echo "Unable to connect to DB: " . mysql_error(); 
    exit; 
} 

if (!mysql_select_db("tinadatabase")) { 
    echo "Unable to select <strong>tinadatabase</strong>: " . mysql_error(); 
    exit; 
} 

$sql = "SELECT * FROM users WHERE Uname='$name'"; 

$result = mysql_query($sql); 

if (!$result) { 
    echo "Could not successfully run query (<strong>$sql<strong>) on DB: " . mysql_error(); 
    exit; 
} 

if (mysql_num_rows($result) == 0) { 
    echo "Record not found."; 
    exit; 
} else 
    echo "Record found." 

$row = mysql_fetch_assoc($result); 

print "<br>"; 

md5($pass); 

if($name == $row["Uname"] && md5($pass) == $row["Upassword"]) { 
    $_SESSION["authorized"] = 1; 
    print "<a href='page3.php'>continue</a>"; 
} else { 
    $_SESSION["authorized"] = 0; 
    print "Username or password incorrect."; 
} 

mysql_free_result($result); 

?> 

이제 테스트하지는 않았지만 제대로 된 것 같습니다. 작동하는지 알려주세요!

+0

정말 고마워요. 제대로 된 데이터를 읽었습니다. 지금은 도움을 주셔서 감사합니다. –

0

mysql_query 쿼리가 성공했는지 여부를 반환합니다. Findig zero records는 성공입니다.

$row을 확인하거나 결과 집합의 길이를 확인해야합니다.

참고 : 의견을 확인하십시오. 코드에 많은 문제가 있습니다.

+0

감사합니다. 그러나 당신은 무엇을 의미 했습니까? –

0

$result은 쿼리에 오류가없는 한 - 반환 된 행이없는 경우에도 true 값이됩니다. 일치하는 항목이 있는지 보려면 count the number of rows해야합니다.

(하지만 질문에 대한 내 의견을 참조하십시오. 처음에는 해당 데이터베이스 API를 사용하지 않아야합니다.)

0

위의 설명은 유용한 조언이라고 생각합니다. prepare 명령과 바인드 변수를 사용하십시오. 그렇지만 $ row 대신 $ result를 참조하고 있습니다.

$ 결과를 확인한 후 가져 오기도 수행합니다. (! ($ result === false)) (즉, 특별히 거짓이 아닌지 테스트)을 사용하는 것도 좋은 습관입니다. 또한 strcmp()를 사용하여 문자열을 정확하게 비교하는 것이 좋습니다. 모든 것을 말하면서 사용자 이름과 암호 (해시 된)에 대한 일치 항목을 계산하여 작업을 단순화 할 수 있습니다. 분명히 쿼리의 사용자 테이블에서 다른 세부 정보를 선택해야하는 경우에는 적합하지 않습니다. 이 방법을 사용하면 NUM_ROWS 등의 검사를 할 필요 저장 구문이 약간 잘못이지만 경우

내가 오라클과 포스트 그레스로 mysql을 많이 사용하지 않는 텍스트는 그래서 당신의 UPassowrd가 사용하는 가정 .. 실례 강조 암호의 md5() 해시 ...

$hpass=md5($pass); 
$query = "SELECT count(1) FROM users WHERE Uname='$name' and UPassword='$hpass'"; 
$result = mysql_query($query, $connect); 

$_SESSION["authorized"] = 0; 
if (!($result === false)) 
{ 
    $row = mysql_fetch_row($result); 

    echo "Query Worked<br>"; 
    // count(1) result of anything other than 0 is a match - though any more than 1 might be an issue. 
    $_SESSION['authorized']=((intval($row[0]) == 0)?0:1); 
} else { 
    echo "Query Failed<br>"; 
    exit; 
} 
echo "<br>"; 
echo"<a href='page3.php'> continue</a>"; 

페이지 3에 대한 계속 href가 인증 된 값에 대한 조건인지 여부를 확신하지 못합니다.

+0

예 page3.php는인가 된 값에 조건부이며, 이것이 무엇입니까?
You must log in first"; } ?> 올바른 정보를 입력하고 다른 페이지에 레코드가 있음에도 불구하고 비밀번호가 일치하지 않는다고 말하면

관련 문제