如果内容处于while循环中,则不处理页面
问题描述:
<?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循环中,则不处理页面
答
你的逻辑有点靠不住。在这种情况下,不需要一个时间循环(使用一个最多只能生成一行数据就是货物崇拜编程的证据)。逻辑流程应该是:
$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
查询点?你实际上并没有从这个查询中获取任何东西,所以基本上这是一个无用的操作。
答
可能结果集是空的,你可以改变de而做一段时间,所以它会被执行至少一次。
事情是这样的,你想,如果有在里面,而行,如果没有,它永远不会经过那里来算。
答
您的代码的逻辑错误:您的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());
}
?>
答
<?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);
}
}
}
?>
其实我固定它。感谢您的所有帮助!