如果num_rows大于零,则为PHP标头

时间:2014-01-08 15:23:09

标签: php header preg-replace preg-match

使用以下代码会发生奇怪的事情。而不是完全重定向。它将重定向的页面加载到登录页面中并混合起来。

Q1 :如何进行完整重定向。 - 会话开始是第一行 - 标题之前没有输出任何内容。 - 至于空格,我不确定下面脚本中的空格是什么。

Q2 :我如何preg_replace一个字符串只允许小案例和大写字母和0-9个数字再次如何preg替换emaail以允许'@'charecter和字母数字。< / p>

Q3 :检查用户尝试登录的用户与注册用户完全匹配的最佳方式是什么?

Q4 :黑客对我的会话变量有什么危险?

PHP代码

<?php
session_start();
require_once 'db_conx.php';
$email = preg_replace ('#[^A-Z, 0-9 ]#i', '', $_POST['email']);
$pwd = preg_replace ('#[^A-Z, 0-9 ]#i', '', $_POST['pwd']);
if ($uname == '' || $pwd == ''){
    echo '<span style="color:#F00">Please fill in all login details.</span>'; 
    } else {
$Result = mysql_query("SELECT * FROM users WHERE uemail = '$uname' && pwd = '$pwd'")
 or die (mysql_error()); 
while($row = mysql_fetch_array($Result)){
$_SESSION['Sname'] = $row['firstname'];
$_SESSION['Slname'] = $row['lastname'];
$_SESSION['SUid'] = $row['uid'];
$_SESSION['Semail'] = $row['uemail'];
$_SESSION['Suid'] = $row['uid'];
$_SESSION['Szip'] = $row['zip'];
}
if (mysql_num_rows($Result) > 0){
    header ('Location: ../user.php');
} else {
    echo '<span style="color:#F00">Your account details do not match, please check your details and try again or try to recover your account if you forgot your password</span>';
    }
}
?>

感谢。

1 个答案:

答案 0 :(得分:4)

<强> Q1 而不是使用header( 'Location...)

你可以使用

 echo '<meta http-equiv="refresh" content="0; URL= http://something.com">';

修改 我相信你也可以使用以下内容。骰子应该允许重定向,但根据我的经验,它并不总是与jquery相处。

 header('Location: http://something.com');
 die();

如果您在同一页面上的jquery中使用event.preventDefault();,这将特别有用,这几乎总是会导致标头位置重定向被忽略。当您使用get请求在索引文件中包含php页面时,此方法也适用,从而导致类似http://somesite.com/index.php?page=home的网址

编辑以上信息错误它不适合我,因为php已经发送了标题。我是个白痴。

而不是这个元刷新,你可以这样做,这应该产生所需的结果。

echo '<script type="text/javascript">window.location = "yoururlhere"</script>';die;

<强> Q2

 $step1 = preg_replace('#[^A-Z, 0-9 ]#i', $_POST["variable"]);
 $step2 = strtolower($step1);
 echo $step2;

<强> Q3

这是一个难以回答的问题,但基本上你想要在那里哈希密码,然后检查它是否与数据库中的密码匹配。这是一个简短的伪代码。

 $username = $db->real_escape_string(strip_tags($_POST["username"]));
 $password = hash('sha512', $salt.$_POST["Password"});
 $db->query("SELECT * FROM `usertable` WHERE `Username`='$username' AND `Password`='$password' AND Username IS NOT NULL AND Username != '' LIMIT 1");
 $result = $db->get();
 if(!$result){
  //the query returned a null result, so the username or password was incorrect.
 }else{
  //set user session and log them in.
 }

<强> Q4 我不是专家,但这完全取决于应用程序的体系结构以及如何设置会话和cookie。我认为使用formkeys并阻止xss,rfi,sql注入和lfi,然后担心会话变量。在尝试保护用户会话时,获得解决上述问题的经验将为您提供信心和更广泛的理解。

可以从php.net/manual/en/session.security.phpstackoverflow.com/questions/328/php-session-security

获取更多信息

感谢DanFromGermany的建议,他改进了这个答案。