2013-02-23 2 views
0

회원 로그인 시스템을 사용하여 간단한 PHP 웹 사이트를 만들려고합니다. 웹 사이트의 등록 부분을 만들었고 엔트리가 성공적으로 업데이트되어 MySQL 데이터베이스에 추가되었습니다. 그러나 나는 login.php을 사용하여 세부 정보를 사용하여 로그인 할 수 없습니다. login.php에 대한 내 PHP 코드는 다음과 같습니다.PHP에서 스크립트에 로그인 할 수 없습니다.

<?php 
if ($_POST['mem_email']) { 
//Connect to the database through our include 
include_once "storescripts/connect_to_mysql.php"; 
$email = stripslashes($_POST['mem_email']); 
$email = strip_tags($email); 
$email = mysql_real_escape_string($email); 
$password = ereg_replace("[^A-Za-z0-9]", "", $_POST['mem_password']); // filter everything  but numbers and letters 
$password = md5($password); 
// Make query and then register all database data that - 
// cannot be changed by member into SESSION variables. 
// Data that you want member to be able to change - 
// should never be set into a SESSION variable. 
$sql = mysql_query("SELECT * FROM members WHERE mem_email='$email' AND   mem_password='$password' AND mem_emailactivated='1'"); 
$login_check = mysql_num_rows($sql); 
if($login_check > 0){ 
while($row = mysql_fetch_array($sql)){ 
    // Get member ID into a session variable 
    $id = $row["mem_id"]; 
    session_register('mem_id'); 
    $_SESSION['mem_id'] = $id; 
    // Get member username into a session variable 
    $username = $row["mem_username"]; 
    session_register('mem_username'); 
    $_SESSION['mem_username'] = $username; 
    // Update last_log_date field for this member now 
    mysql_query("UPDATE members SET mem_lastlogin=now() WHERE mem_id='$id'"); 
    // Print success message here if all went well then exit the script 
    header("location: member_profile.php?id=".$id); 
    exit(); 
} // close while 
} else { 
// Print login failure message to the user and link them back to your login page 
print '<br /><br /><font color="#FF0000">No match in our records, try again </font><br /> 
<br /><a href="login.php">Click here</a> to go back to the login page.'; 
exit(); 
} 
}// close if post 
?> 

동일한 페이지에있는 양식은 다음과 같습니다.

<table align="center" cellpadding="5"> 
<form action="login.php" method="post" enctype="multipart/form-data" name="logform" id="logform" onsubmit="return validate_form ();"> 
<tr> 
<td class="style7"><div align="right">Email Address:</div></td> 
     <td><input name="mem_email" type="text" id="mem_email" size="30" maxlength="64" /></td> 
    </tr> 
    <tr> 
     <td class="style7"><div align="right">Password:</div></td> 
     <td><input name="mem_password" type="password" id="mem_password" size="30" maxlength="24" /></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td><input name="Submit" type="submit" value="Login" /></td> 
    </tr> 
    </form> 
</table> 

내 데이터베이스이

mem_id int(11) 
mem_username varchar(255) 
mem_country varchar(255) 
mem_county varchar(255) 
mem_address varchar(255) 
mem_email varchar(255) 
mem_password varchar(255) 
mem_signupdate datetime 
mem_lastlogin datetime 
mem_accounttype enum('a', 'b', 'c') 
mem_emailactivated enum('0', '1') 
mem_postcode varchar(255) 
mem_city varchar(255) 

처럼 정확한 데이터가 내 로그인 양식에 입력 할 때마다 보이는, 나는 실패 메시지와 함께 다른 문으로 처리하고

+0

생성중인 SQL 문을 에코하여 데이터베이스에서 실행 했습니까? 그 때 작동합니까? – andrewsi

+0

mysql_ * 및 ereg_ *가 둘 다 사용되지 않습니다. 사실 ereg_ *는 PHP의 최신 버전에서 완전히 빠져 있다고 생각합니다. 호스트가 소프트웨어를 업그레이드하자마자 스크립트가 중단됩니다. – GordonM

+0

먼저 기본 디버깅을 요청합니다. 어떤 점에서 정확히 실패합니까? 디버거를 사용하거나 라인별로 테스트 출력을 수행하여 아웃을 찾는 것이 가장 먼저해야 할 일입니다. 라이브 출력이 없기 때문에이 작업을 수행 할 수 없습니다. –

답변

0

ereg_*mysql_* 기능 가치가있다! 데이터베이스 상호 작용에는 preg_* 함수와 PDO 또는 Mysqli를 사용하십시오.

또한 매개 변수화 된 쿼리를 사용하여 PDO와 mysqli에서 모두 지원되는 SQL 주입을 방지하십시오.

레코드 수를 반환하려면 sql에서 계산을 수행하도록 할 수 있습니다. 예를 들어 :

SELECT COUNT(*) FROM `members` WHERE `mem_emailactivated` = '1' 

지금 PDO의 fetchColumn() 방법을 사용하거나 쿼리에 주어진 조건에 맞는 레코드의 수를 얻을 수 mysqli의 대안을 사용!

세션이 올바르게 작동하는 또 다른 방법은 각 페이지의 맨 앞에 session_start()을 사용하는 것입니다.

희망이 있습니다. :)

0

mysqli_ calls를 사용하십시오. mysql_은 더 이상 지원되지 않습니다 http://www.php.net/mysql_fetch_row

이 문제는 적절한 디버깅에 관한 것입니다. 이것은 PHP echos 또는 Eclipse PDT에서와 같이 더 나은 디버거로 수행 할 수 있습니다. 어쨌든 1. if ($ _POST [ 'mem_email']) {가 입력되었는지 확인하십시오. 2. 데이터베이스에서 쿼리를 실행하십시오. 성공했습니다 : 3. mysqli_fetch_row를 사용하여 행을 가져옵니다. 나는 한 줄만 필요하다고 생각합니다. 4.이 모든 것이 정상이면 데이터베이스에서 업데이트 쿼리를 실행하여 성공했는지 확인하십시오.

관련 문제