Php 菲律宾元';t更新MySQL表

Php 菲律宾元';t更新MySQL表,php,mysql,database,Php,Mysql,Database,我的笔记本电脑上有一个“Windows Apache MySQL PHP”服务器。我绝对没有收到任何错误消息,但是当我通过PHP脚本发送东西到MySQL时,MySQL中什么也没有发生(我也通过MySQL命令提示符发送了一些东西,看起来它只是做了一个测试表,没有像我要求的那样在其中放入任何东西,但我不确定我在这种情况下做了所有应该做的事情)。我用另一种方式重新描述了我的整个页面,但仍然不起作用 下面是我的表单的图片,以及MySQL中表格的外观: 系统: Windows 7 Home Premiu

我的笔记本电脑上有一个“Windows Apache MySQL PHP”服务器。我绝对没有收到任何错误消息,但是当我通过PHP脚本发送东西到MySQL时,MySQL中什么也没有发生(我也通过MySQL命令提示符发送了一些东西,看起来它只是做了一个测试表,没有像我要求的那样在其中放入任何东西,但我不确定我在这种情况下做了所有应该做的事情)。我用另一种方式重新描述了我的整个页面,但仍然不起作用

下面是我的表单的图片,以及MySQL中表格的外观:

系统:

Windows 7 Home Premium SP1 64位-- 带ssl0.9.8的Apache 2.4.4 32位-- PHP 5.4.11 32位VC9-- MySQL 5.5.31 64位,带Navicat Lite

<?php  
define('DB_HOST', 'localhost');
define('DB_NAME', 'projectedin');
define('DB_USER','root');
define('DB_PASSWORD','');

$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " .mysql_error());

function NewUser()
{
    $userName = $_POST['username'];
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $password =  $_POST['password'];
    $birthday =  $_POST['birthday'];
    $gender =  $_POST['gender'];
    $query = "INSERT INTO users (username,firstname,lastname,password,birthday,gender) VALUES ('$username','$firstname','$lastname','$password','$birthday','$gender')";
    $data = mysql_query ($query)or die(mysql_error());
    if($data)
    {
        echo "YOUR REGISTRATION IS COMPLETED...";
    }
}

function SignUp()
{
    if(!empty($_POST['username']))   //checking the 'user' name which is from Sign-Up.html, is it empty or have some text
    {
    $query = mysql_query("SELECT * FROM users WHERE username = '$_POST[username]' AND password = '$_POST[password]'") or die(mysql_error());

    if(!$row = mysql_fetch_array($query) or die(mysql_error()))
    {
        newuser();
    }
    else
    {
        echo "SORRY...YOU ARE ALREADY REGISTERED USER...";
    }
    }
}
if(isset($_POST['submit']))
{
    SignUp();
}
mysqli_close ($con);
?>  

这里有许多问题(稍后将详细介绍),但这可能是您的一个问题:

您尝试如下方式调用新用户函数:

newuser();
但是它被命名为
NewUser
。这是区分大小写的,不起作用。查看您的错误日志,查看您在这里遇到的错误

其他问题:

  • 您正在使用已弃用的
    mysql.*
    函数。如果您正在学习PHP,请学习正确的方法并使用
    mysqli
    PDO
  • 您根本没有逃避输入,因此很容易受到SQL注入攻击
  • 当函数没有真正为您带来任何价值时,您会随意使用函数
  • 当函数名以大写字母开头时,有点脱离了典型的PHP编码标准。这对于PHP来说有点不寻常,尽管这实际上是可行的

您的注册查询中有一个错误:

$query = mysql_query("SELECT * FROM users WHERE username = '$_POST['username']' AND password = '$_POST['password']'") or die(mysql_error());
我将
$\u POST[username]
更改为
$\u POST['username']
并将
$\u POST[password]
更改为
$\u POST['password']

此外,您也容易受到MySQL注入的攻击,您应该使用MySQL\u real\u scape\u string函数清理每个$\u POSTvar:
$userName=MySQL\u real\u scape\u string($\u POST['userName')


最后,您不应该使用mysql*函数,它们已被弃用

您使用函数的方式是错误的。您还需要检查采取行动的条件。您的代码需要一种不同的方法。非逻辑为什么您同时拥有mysql和mysqli函数?$con和$db需要在每个函数中声明为全局函数,即全局$con,$db;我已经用mysqli函数更改了代码,并转义了函数newuser中除查询之外的所有内容。(当我这样做时,我应该在$POST之前调用$db连接吗?)我还将函数设置为小写,并在Ignacio建议的地方添加了单引号。它仍然没有任何作用。我点击提交,我得到一个没有反馈的白色屏幕。我使用了另一个脚本,它给了我一些反馈(不正确),但它仍然没有发布到MySQL。@Enki检查您的错误日志。如果你没有;如果没有打开错误日志,请打开它。我找不到默认的错误日志,所以我将其设置为在PHP目录中创建一个。我运行页面并点击提交,但没有创建日志。我想我的PHP MySQL安装可能有问题。我可能不得不重做一遍,因为它表现得好像它甚至没有尝试在两个程序之间进行通信。我已经重新安装了PHP和MySQL。我检查并确保我有VC 9、10和11只是为了确保这不会成为问题。我意识到我已经安装了64位MySQL,并将其重新安装为32位,然后我确保在我的PHP目录中有一个32位libmysql.dll(我很惊讶MySQL没有指出这一点,但这个安装一直以来都与正常情况不同)。它仍然不起作用,我肯定它现在不是脚本,因为我有一个测试脚本也不起作用。有什么想法吗?