此PHP脚本中没有错误,但未填写SQL数据库

时间:2012-01-19 22:42:51

标签: php sql login

我真的不知道这是怎么回事,我已经把它的脑子拉了两个小时。我所要做的就是从表单中的两个字段获取信息并将其插入数据库。我知道我的脚本非常基本且非常不安全,但我只是在学习......它不会在生产网站上使用。它允许我提交数据,并输出“谢谢,你已经注册了......”,但它从不将它插入数据库。我已经仔细检查了所有连接设置等等......我很无能为力。

我的代码如下:

<?php 
 mysql_connect("localhost", "USERNAME", "PASSWORD") or die(mysql_error()); 
 mysql_select_db("DATABASE_NAME") or die(mysql_error()); 
 if (isset($_POST['submit'])) { 
 mysql_query("INSERT INTO members (username, password) VALUES ('".$_POST['myusername']."', '".$_POST['mypassword']."')") or die(mysql_error());
}
?>

<html>
<body> 
<h1>Registered</h1>
<p>Thank you, you have registered - you may now login</a>.</p>
</body>
</html>

编辑:

这是表单代码:

<table id="mytable" cellspacing="0">
<FORM name="form1" ACTION="register.php" METHOD=get>
<tr>
<th scope="col" class="ttopl">User Name:</th>
<th scope="col" class="ttopl"><input name="myusername" type="text" size"20"></input>      </th>
</tr>
<tr>
<th scope="col" class="ttopl">Password:</th>
<th scope="col" class="ttopl"><input name="mypassword" type="text" size"20"></input>    </hd>
</tr>
<tr>
<th scope="col" class="ttopl"></th>
<th scope="col" class="ttopl"><input type="submit" value="Register" class="loginButton">

5 个答案:

答案 0 :(得分:1)

我的猜测是if (isset($_POST['submit']))没有触发,确保它是name属性而不是id。发布您的表单代码将是一个很大的帮助。

答案 1 :(得分:1)

您在表单中使用了错误的方法:

<FORM name="form1" ACTION="register.php" METHOD=get>

将其更改为:

<FORM name="form1" ACTION="register.php" METHOD="POST">

顺便说一句,我知道安全性还不是一个问题,但有些事情从一开始就做得更好,因为以后更难以改变。例如:

  1. 散列/腌制密码
  2. 将PDO与预备语句一起使用以避免sql注入
  3. 编辑:您还缺少html表单中的name属性,并且您正在php文件中检查它。您需要将提交按钮更改为:

    <input type="submit" name="submit" value="Register" class="loginButton">
    

    但是在php中检查POST的更实用的方法是使用:

    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    

答案 2 :(得分:0)

第一次关闭该查询已准备好进行注入攻击,我强烈建议您查看准备好的语句。

回到你的情况......

添加

var_dump( mysql_error() );
查询后立即

它应该告诉你查询发生了什么......

答案 3 :(得分:0)

这里唯一可能出错的是“if”语句的计算结果为false。如果出现其他任何问题,您将获得SQL错误输出而不是“谢谢”页面。

首先检查'submit'是否是表单元素的实际名称,并检查它是否已设置。还要检查您是否使用POST方法提交表单。

答案 4 :(得分:0)

根据Zac的回答,您的“提交”按钮根本没有名称。因此,isset($_POST['submit'])将始终为false,您的查询将永远不会运行。

由于您刚刚熟悉PHP,因此您可以轻松调试此类情况,即使用var_dump()print_r()来检查变量。如果您查看$ _POST并看到它没有名为“submit”的密钥,您会发现您的提交测试存在缺陷。