2012-10-29 6 views
0

저는 PHP와 SQL을 처음 사용하지만 사용자가 웹 사이트에 로그인 할 수 있도록 간단한 PHP 스크립트를 만들려고합니다. 그것은 어떤 이유로 작동하지 않으며 나는 왜 볼 수 없습니다. 올바른 사용자 이름 & 암호로 로그인하려고 할 때마다 "잘못된 사용자 이름 또는 암호"오류가 발생합니다. database-name 및 table-name이 올 바릅니다.기본 PHP 스크립트가 작동하지 않습니다.

connect.php :

<?php 
$db_host = 'localhost'; 
$db_name = 'app'; 
$db_user = 'root'; 
$db_pass = ''; 
$tbl_name = 'users'; 

// Connect to server and database 
mysql_connect("$db_host", "$db_user", "$db_pass") or die("Unable to connect to MySQL."); 
mysql_select_db($db_name)or die("Cannot select database."); 

// Info sent from form 
$user = trim($_POST['user']); 
$pass = trim($_POST['pass']); 

// Protection against MySQL injection 
$user = stripslashes($user); 
$pass = stripslashes($pass); 
$user = mysql_real_escape_string($user); 
$pass = mysql_real_escape_string($pass); 
$sql = ("SELECT * FROM $tbl_name WHERE username='$user' and password='$pass'"); 
$result= mysql_query($sql); 

$count 0= mysql_num_rows($result); 
if($count==1){ 

// Register $user, $pass send the user to "score.php" 
session_register("user"); 
session_register("pass"); 
header("location:score.php"); 
} 
else 
{ 
echo "Wrong Username or Password"; 
} 
?> 

score.php :

<?php 
session_start(); 
if(!session_is_registered(user)){ 
header("location:login.html"); 
} 
?> 

<html> 
<body> 
<h1>Login Successful</h1> 
</body> 
</html> 

나는 누군가가 내 실수를 찾을 수 있기를 바랍니다, 감사합니다!

+2

여기에 구문 오류가 있습니다 :'$ count 0 = mysql_num_rows()' –

+3

하십시오 더 이상 사용되지 않는 mysql 확장을 사용하지 마라. 대신에'PDO'를 사용하십시오 (또는'mysqli') –

+0

$ count 0 = mysql_real_escape_string() ??? – Vultour

답변

2

FYI session_registersession_is_registered은 더 이상 사용되지 않으며 PHP에서 제거됩니다. 또한 mysqli 또는 PDO를 사용하도록 코드를 변경하십시오. articles을 많이 사용하면 어떻게하는지 설명합니다. 마지막으로 사용자가 보낼 내용을 알지 못하기 때문에 사용자가 입력 한 내용 ($ _POST 배열)을 벗어나고 SQL 주입을 원하지 않으므로 반드시 이스케이프 처리해야합니다. 암호를 일반 텍스트로 저장하고 싶지 않으므로 SHA1 또는 MD5을 사용하는 것이 가장 좋습니다.

connect.php :

<?php 
$db_host = 'localhost'; 
$db_name = 'app'; 
$db_user = 'root'; 
$db_pass = ''; 
$tbl_name = 'users'; 

// Connect to server and database 
mysql_connect($db_host, $db_user, $db_pass) or die("Unable to connect to MySQL."); 
mysql_select_db($db_name) or die("Cannot select database."); 

// Info sent from form 
$user = trim($_POST['user']); 
$pass = trim($_POST['pass']); 

// Protection against MySQL injection 
$user = stripslashes($user); 
$pass = stripslashes($pass); 
$user = mysql_real_escape_string($user); 
$pass = mysql_real_escape_string($pass); 
$sql = "SELECT * FROM $tbl_name " 
     . "WHERE username = '$user' " 
     . "AND password = sha1('$pass')"; 

$result = mysql_query($sql); 

// There was an extra 0 here before the equals 
$count = mysql_num_rows($result); 
if ($count==1) 
{ 

    // Register $user, $pass send the user to "score.php" 
    $_SESSION['user'] = $user; 

    // You really don't need to store the password unless you use 
    // it somewhere else 
    $_SESSION['pass'] = $pass; 
    header("location: ./score.php"); 
} 
else 
{ 
    echo "Wrong Username or Password"; 
} 
?> 

score.php :

<?php 
session_start(); 
if (!isset($_SESSION['user'])) 
{ 
    header("location:login.html"); 
} 
?> 

<html> 
<body> 
<h1>Login Successful</h1> 
</body> 
</html> 

가 위의 작성 데, 코드는 (직접 $_SESSION 전역 배열을 사용할 수 있습니다)이된다

+0

도움 주셔서 감사합니다! 그것은 일하고있어 :) –

0

내가 그 아래에 넣어 가지고 가지

변경 오류 검사와 하나이 줄을

$result= mysql_query($sql); 

$result= mysql_query($sql) or die(mysql_error()); 

기회가 SQL 오류가 발생하고 당신이 그것을 따기하지 않는, 그래서 이 라인은 오타인지 아닌지 항상 0 행

또한

확실하지가 않습니다 결과는 0 거기에

$count 0= mysql_num_rows($result); 
,536가 안
관련 문제