主要的PHP问题

时间:2009-12-10 17:00:31

标签: php sql database login

我正在尝试创建一个简单的登录系统。当我运行登录表单(使用正确的用户名和密码)时,似乎没有运行php。有什么建议吗?

<?php
$host="linuxserver"; // Host name
$username="jparry2"; // Mysql username
$password=""; // Mysql password
$db_name="jparry2"; // Database name
$tbl_name="customer"; // Table name

// Connect to server and select databse.
mysqli_connect("$host", "$username", "$password")or die("cannot connect");
mysqli_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($sql);

// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file “login_success.php”
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
?>

<html>
<body>

</body>
</html>

编辑添加的登录表单代码

<html>
<head><title>Login</title></head>
<body>


<form action='checklogin.php'
                method='POST' style='margin: .5in'>
    <p><label for='user_name' style='font-weight: bold;
          padding-bottom: 1em'>USER ID: </label>
       <input type='text' name='myusername' id='myusername'
          value='' /></p>
    <p><label for='password' style= 'font-weight: bold'>Password: </label>
       <input type='password' name='mypassword' id='mypassword'
          value='' /></p>
    <p><input type='submit' value='Login'> </p>
       <input type='hidden' name='sent' value='yes'/>

<a href= "/home/jparry2/public_html/register.php">Register</a>

    </form>

</body>
</html>

5 个答案:

答案 0 :(得分:5)

如果您的浏览器要求您下载php文件,则表示未调用php解释器。即您没有正确安装或配置它。

答案 1 :(得分:1)

您收到任何错误消息吗?对我来说似乎没问题。您是否尝试过回显if-block中的某些内容?这可能有助于你理解错误。

您可以查看或尝试的一些事项:

  • 您是否收到错误报告?
  • 把`var_dump($ _ POST);死();在页面顶部查看是否正确提交了$ _POST变量。
  • 确保在header()功能之前没有向浏览器输出任何内容。如果您关闭了error_reporting并将某些内容输出到浏览器,则使用header()将导致致命错误,这可能会导致空白页。

您的代码中的其他一些注释:

  • 您不需要将变量放在双引号内,它们可以自行运行:mysqli_select_db("$db_name")变为mysqli_select_db($db_name)
  • 如果您正在执行stripslashes(),则无需mysql_real_escape_string。后者将自己处理这项工作。

答案 2 :(得分:1)

在某些浏览器中,Location标头区分大小写,因此您的header("location:login_success.php");电话可能无法正常工作(comment上的header documentation page表示发生这种情况在IE7中)。尝试大写位置中的l

答案 3 :(得分:1)

您没有执行任何“session_start()”,因此无法使用您的会话。

也许您需要在“login_success.php”脚本中启动它。

答案 4 :(得分:1)

我同意Daniel,修改header("Location: login_success.php");

此外,作为附注,因为在撰写本文时,没有清楚地解释什么不起作用,但是在添加会话变量时,您需要session_start()

同时尝试使用$_SESSION['variable'],因为从PHP: session_register取得的PHP 5.30不推荐使用session_register()尝试这样的事情

if($count==1){
session_start();
// Register $myusername, $mypassword and redirect to file “login_success.php”
$_SESSION['username'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
session_write_close(); // makes sure nothing was lost during redirect
header('Location: nextpage.php');
}