-5
$Con=mysql_connect('localhost', '849326_israel', '123456')
    or die('Problemas al seleccionar la base de datos');
mysql_select_db('pruebastest_zzl_registro', $Con)
    or die('Problemas db');
mysql_query("INSERT INTO RegUsuarios (Nombre, Email, PW) values
    ('$_REQUEST[Nombre]', '$_REQUEST[Email]', '$_REQUEST[PW]')",$Con) or die('Problema insertando datos');

是说...

问题插入数据

我尝试使用$_POST,但它不起作用!

非常感谢您帮助我,我发现错误是错字

在我的数据库中,我写的是 Emal 而不是电子邮件,因此无法处理数据

4

3 回答 3

3

xkcd

既然已经解决了,错误消息告诉您插入查询有问题。我想建议你试试这个:

$esc = "mysql_real_escape_string"; // for brevity
mysql_query($q="INSERT INTO `RegUsuarios` (`Nombre`,`Email`,`PW`) VALUES
    ('".$esc($_REQUEST['Nombre'])."','".$esc($_REQUEST['Email'])."',
    '".$esc($_REQUEST['PW'])."')");
if( $e = mysql_error()) {
  die("Error running the query:<br />".$q."<br />Error: ".$e);
}

这将转储出它试图运行的确切查询,以及确切的 MySQL 错误消息。在理想情况下,您会将其记录到文件中,而不是公开显示,但出于开发目的,这会很好。请注意,我`在您的表格和列名周围添加了反引号 - 许多人会告诉您,只有当您将它们命名为保留字时才需要它们,但我个人认为最好保持将它们放在周围的习惯所有名称:不仅可以更容易地在视觉上识别这些名称(并允许颜色编码更好地工作),而且还有助于避免一些更晦涩的关键字。此外,我已将其更改or die为实际if陈述。这将允许您做不止一件事,例如记录到我提到的文件。

请注意,您不需要一直传递$Con变量 - 扩展的主要优点之一mysql是它会自动假定最后打开的连接。

于 2013-07-11T21:06:26.100 回答
1

您的代码有几个问题。

首先,您不能简单地"$_REQUEST[Email]"在这样的字符串中调用。它不会得到变量的值,因为包含了括号。你必须"{$_REQUEST[Email]}"改用。

其次,将键EmailNombre字符串结合起来,使用 . 正确声明它们就足够了"{$_REQUEST['Email']}"

此外,从客户端获取值并直接将它们放入 SQL 查询中而不进行过滤是非常危险的。您正在将您的网站暴露给SQL 注入

来自客户端的所有和任何数据都应该mysql_real_escape_string()在将其插入 SQL 查询之前正确转义。

话虽如此,您的代码应该是:

$nombre = mysql_real_escape_string($_REQUEST['Nombre']);
$email  = mysql_real_escape_string($_REQUEST['Email']);
$pw     = mysql_real_escape_string($_REQUEST['PW']);
mysql_query("INSERT INTO RegUsuarios (Nombre,Email,PW) values
    ('{$nombre}','{$email}','{$pw}')",$Con) or die('Problema insertando datos');

存储纯文本密码也是一种不好的做法,并且不推荐使用 mysql_* 函数并将很快从 PHP 中删除。考虑将密码存储为sha1()哈希,并迁移您的代码以使用MySQLi

于 2013-07-11T21:11:04.753 回答
0

您需要在$_POST

$_REQUEST['Nombre']

"INSERT INTO RegUsuarios (Nombre,Email,PW) values
('".$_REQUEST['Nombre']."','".$_REQUEST['Email']."','".$_REQUEST['PW']."')"

正如人们指出的那样,这段代码对 SQL 注入是开放的。考虑改用 PDO

于 2013-07-11T21:01:00.273 回答