$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');
它说...
Problemas insertando datos
我尝试使用$_POST
但它不起作用!
非常感谢你帮助我,我发现错误是一个错字
在我的数据库中,我写了Emal而不是Email,因此数据无法处理
答案 0 :(得分:3)
现在已经没有了,错误消息告诉您插入查询存在问题。我想建议你试试这个:
$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
扩展名的一个主要优点是它将自动采用上次打开的连接。
答案 1 :(得分:1)
您的代码存在一些问题。
首先,你不能简单地在这样的字符串中调用"$_REQUEST[Email]"
。它不会获得变量的值,因为包含了括号。您必须改为使用"{$_REQUEST[Email]}"
。
其次,密钥Email
和Nombre
是字符串,它足以使用"{$_REQUEST['Email']}"
正确地声明它们。
此外,获取来自客户端的值并直接将它们放入SQL查询中而不进行过滤非常危险。您将自己的网站公开为SQL injection。
来自客户端的所有数据都应使用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。
答案 2 :(得分:0)
您需要$_POST
$_REQUEST['Nombre']
"INSERT INTO RegUsuarios (Nombre,Email,PW) values
('".$_REQUEST['Nombre']."','".$_REQUEST['Email']."','".$_REQUEST['PW']."')"
正如人们指出的那样,这段代码对SQL注入是开放的。考虑使用PDO