2011-09-29 78 views
0
<?php 
include("global-settings.php"); 
session_start(); 
mysql_connect($dbhost, $dbuser, $dbpass)or die("Could Not Connect: " . mysql_error()); 
mysql_select_db($dbname) or die(mysql_error()); 
$email  = mysql_real_escape_string(strip_tags($_POST['email'])); 
$password = mysql_real_escape_string(strip_tags(sha1($_POST['password']))); 

$result = mysql_query("SELECT * FROM users WHERE username='$email' AND password='$password'") or die(mysql_error()); 

    while($row = mysql_fetch_array($result)) { 
    if(mysql_num_rows($result) > 0) { 
     $_SESSION['user_pid'] = $row['user_pid']; 
     $_SESSION['firstname']  = $row['first_name']; 
     $_SESSION['lastname']  = $row['last_name']; 
     header("Location: ../protected/home.php"); 
    } else { 
     $userid_generator = uniqid(rand(), false); 
     $date = date("Y/m/d"); 
     mysql_query("INSERT INTO users (user_pid, username, password, datetime_registered) 
     VALUES('$userid_generator', '$email', '$password', '$date')")or die(mysql_error()); 
     $_SESSION['userid'] = $userid_generator; 
     $_SESSION['firstname']  = $row['first_name']; 
     $_SESSION['lastname']  = $row['last_name']; 

     $leaders_query = "SELECT * FROM leaders"; 
     $leaders = mysql_query($leaders_query); 

      $id = $row['id']; 
      mysql_query("INSERT IGNORE INTO friends (node1id, node2id, is_leader, friends_since, friend_type) 
      VALUES('$id', '$userid_generator', 'Yes', '$date', 'full)")or die(mysql_error());  
    } 
     } 
?> 

由於某種原因while循環似乎不起作用。當我在while循環中插入內容時,它留下一個空白屏幕。任何幫助?如果內容處於while循環中,則不處理頁面

回答

2

你的邏輯有點靠不住。在這種情況下,不需要一個時間循環(使用一個最多隻能生成一行數據就是貨物崇拜編程的證據)。邏輯流程應該是:

$sql = "..."; 
$result = mysql_query($sql) or die(mysql_error()); 
if (mysql_num_rows($result) > 0) { 
    $row = mysql_fetch_array($result); 
    $_SESSION stuff 
} else { 
    ... create user record ... 
} 

而且,什麼是SELECT * FROM Leaders查詢點?你實際上並沒有從這個查詢中獲取任何東西,所以基本上這是一個無用的操作。

0

可能結果集是空的,你可以改變de而做一段時間,所以它會被執行至少一次。

事情是這樣的,你想,如果有在裏面,而行,如果沒有,它永遠不會經過那裏來算。

1

您的代碼的邏輯錯誤:您的if(mysql_num_rows(...))應該在while(mysql_fetch_array(...))循環之前。 嘗試是這樣的:

<?php 
    include("global-settings.php"); 
    session_start(); 
    mysql_connect($dbhost, $dbuser, $dbpass)or die("Could Not Connect: " . mysql_error()); 
    mysql_select_db($dbname) or die(mysql_error()); 
    $email  = mysql_real_escape_string(strip_tags($_POST['email'])); 
    $password = mysql_real_escape_string(strip_tags(sha1($_POST['password']))); 

    $result = mysql_query("SELECT * FROM users WHERE username='$email' AND password='$password'") or die(mysql_error()); 

    if(mysql_num_rows($result) > 0) { 
     $row = mysql_fetch_array($result); 
     $_SESSION['user_pid'] = $row['user_pid']; 
     $_SESSION['firstname']  = $row['first_name']; 
     $_SESSION['lastname']  = $row['last_name']; 
     header("Location: ../protected/home.php"); 
    } else { 
     $userid_generator = uniqid(rand(), false); 
     $date = date("Y/m/d"); 
     $res_insert = mysql_query("INSERT INTO users (user_pid, username, password, datetime_registered) 
     VALUES('$userid_generator', '$email', '$password', '$date'); SELECT MAX(user_pid) FROM users;") or die(mysql_error()); 
     $_SESSION['userid']  = $userid_generator; 
     $_SESSION['firstname'] = $row['first_name']; 
     $_SESSION['lastname'] = $row['last_name']; 

     $leaders_query = "SELECT * FROM leaders"; 
     $leaders = mysql_query($leaders_query); 

     $id = mysql_insert_id($res_insert); 
     mysql_query("INSERT IGNORE INTO friends (node1id, node2id, is_leader, friends_since, friend_type) 
     VALUES('$id', '$userid_generator', 'Yes', '$date', 'full)") or die(mysql_error());  
    } 
?> 
0
<?php 
session_start(); 
include("global-settings.php"); 
mysql_connect($dbhost, $dbuser, $dbpass)or die("Could Not Connect: " . mysql_error()); 
mysql_select_db($dbname) or die(mysql_error()); 

$email = mysql_real_escape_string(strip_tags($_POST["email"])); 
$password = sha1($_POST["password"]); 
$sql = "SELECT * FROM users WHERE email = '{$email}' AND password = '{$password}'"; 
$result = mysql_query($sql) or exit("ERROR: " . mysql_error() . "<br>IN QUERY: " . $sql); 

if (mysql_num_rows($result) > 0) { 
    $row = mysql_fetch_array($result); 
    $_SESSION["userid"] = $row['user_pid']; 
    echo "logged in"; 
} else { 
    $userid_generator = uniqid(rand(), false); 
    mysql_query("INSERT INTO users (user_pid, email, password, datetime_registered, is_leader) VALUES ('$userid_generator', '{$email}', '{$password}', NOW(), 'no')"); 
    $id = mysql_insert_id(); 
     $leaders = mysql_query("SELECT * FROM users WHERE is_leader LIKE '%yes%'"); 
     while($rows = mysql_fetch_array($leaders)) { 
      if ($rows['is_leader'] == 'yes') { 
       $leader_id = $rows['user_pid']; 
       mysql_query("INSERT IGNORE INTO friends (node1id, node2id, friends_since, friend_type) 
       VALUES('$leader_id', '$userid_generator', NOW(), 'full')"); 
       $_SESSION["userid"] = $userid_generator; 
       echo "new user created and logged in"; 
       } 

    if(is_dir($userid_generator)) { 
    echo "Something wen't wrong. A bug report has been sent and we are doing what we can to fix it."; 
    $message = 'Registration problem on account number $userid_generator. The user succesfully registered, but there is already 
    a directory with the account id of $userid_generator.'; 
    mail($bug_report_email, "Registration Bug!", $message); 
    } else { 
    mkdir('../media/User-PID{' . $userid_generator . '}', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/photos', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/backups', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/videos', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/documents', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/developer', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/developer/apps', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/developer/themes', 0777); 
    mkdir('../media/User-PID{' . $userid_generator . '}/xml', 0777); 
} 
} 
} 
?> 

其實我固定它。感謝您的所有幫助!