2013-10-22 1 views
-1

다음은 등록자와 로그인을 포함하는 전체 색인 페이지 코드입니다. 어떤 이유로, 레지스터 부분이 제대로 작동하고 올바르게 삽입됩니다. 그러나 SELECT * FROM에서 $ queryrun (mysql_query ($ query))을 호출 할 때마다 로그인 부분이 작동하지 않아 작동하지 않습니다. 레지스터 부분 코드가 작동하기 때문에SELECT * FROM이 작동하지 않는 이유는 무엇입니까?

<?php 

require('includes/dbconnect.php'); 

$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$password = md5($password); 

$logemail = $_POST['logemail']; 
$logpassword = $_POST['logpassword']; 
$logpassword = md5($logpassword); 

// Register Script 

if (isset($firstname) && !empty($firstname) && !empty($lastname) && !empty($email) && !empty($password)) { 
$query = "INSERT INTO users VALUES('', '$firstname', '$lastname', '$email', '', 'm', '9', '$password', 'bio'"; 
    $queryrun = mysql_query($query); 
} else { 
echo 'Please fill out all of the form fields'; 
} 

// Login Script 

if (!empty($logemail) && !empty($logpassword)){ 
$query = "SELECT * FROM users WHERE email = '$email' AND password = '$password'"; 


$queryrun = mysql_query($query); 

while ($row = mysql_fetch_assoc($queryrun)) { 
    $logemail = $row['logemail']; 

} 
echo $logemail; 
$numrows = mysql_num_rows($query); 
if ($numrows > 0){ 
    echo 'User exists'; 
} else { 
    echo 'User does not exist'; 
} 

} else { 

} 

?> 

<html> 
<head> 
<title></title> 

</head> 
<body> 

<form action="index.php" method="POST"> 

Firstname: <input type="text" name="firstname" /><br /> 
Lastname: <input type="text" name="lastname" /><Br /> 
Email: <input type="text" name="email" /><br /> 
Password: <input type="password" name="password" /><br /> 
<input type="submit" value="Submit" /> 

</form> 

<br /><hr /> 

<br /> 
Login:<br /> 
<form action="index.php" method="POST"> 
Email:<input type="text" name="logemail" /><br /> 
Password: <input type="password" name="logpassword" /><br /> 
<input type="submit" value="Log in" /><br /> 
</form> 

</body> 
</html> 

데이터베이스에 대한 연결은 그냥 로그인 코드가 아무것도 반환하지 않으며 사용자가 실제로

+6

[새 코드에 mysql_ * 함수를 사용하지 마십시오.] (http://bit.ly/phpmsql) . 더 이상 유지 관리되지 않으며 공식적으로 사용되지 않습니다 (https://wiki.php.net/rfc/mysql_deprecation). [빨간색 상자] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). ** [SQL injections] (http://stackoverflow.com/q/60174) ** –

+1

데이터베이스에 암호를 저장하는 것은 좋지 않습니다. 대신 암호의 해시를 계산하고 해시를 저장해야합니다. – AllInOne

+0

당신은 로그인 쿼리에서'$ logemail'과'$ logpassword'를 사용한다는 의미입니까? –

답변

1

양식을 존재하는 경우, 사용자가 노트가 존재한다는가요, 괜찮습니다 필드는 $logemail이고 mysql 문은 $email입니다.

$query = "SELECT * FROM users WHERE email = '$logemail' AND password = '$logpassword'"; 

을하지만 존 귀족 언급으로 심각한 보안 문제가 있습니다

이 작업은 당신이 원하는 모양 얻으려면.

1

사용중인 PHP 버전은 무엇입니까? 이 확장 기능은 PHP 5.5.0부터 사용되지 않으며, mysqli 나 PDO를 사용해야합니다.

if (!empty($logemail) && !empty($logpassword)){ 
$query = "SELECT * FROM users WHERE email = '$email' AND password = '$password'"; 

당신이 $의 logemail 및 $ logpassword을 검사하지만 쿼리 문자열에서 $ 이메일 및 $ 암호를 가하고 있습니다 ... 또한 PHP 변수에 대한 귀하의 문자열에서 {} 사용합니다. 문자열 연결을 혼란스럽게하는 데 도움이되며 문자열에 연결된 배열을 사용할 수 있습니다.

echo "This is my string and this is the number {$number}. this is the value in my array: {$arrayvar["something"]}."; 
관련 문제