我正在尝试使用PHP数组和内爆函数将Html表单数据插入到我的数据库中。 代码工作正常,没有错误,并给我提示说明已插入值。但是,当我查询我的数据库时,值不存在。
<form action="##" method="Post">
用户名
<input type ="text" name="uname" >
名字
<input type ="text" name="fname" >
电子邮件
<input type ="email" name="email" >
提交
<input type ="submit" name="submit" value="submit">
Db 已创建
$con=mysql_connect("localhost","root","1234");
$db=mysql_select_db("abcd");
通过 POST 方法传递的值
$a=mysql_real_escape_string($_POST['uname']);
$b=mysql_real_escape_string($_POST['fname']);
$c=mysql_real_escape_string($_POST['email']);
将值转换为数组。
$data=array('$a','$b','$c');
使用implode函数在MySql中的feild名称中插入数据。
$f_sql= "'" . implode(',' , array_keys($data)) ."'";
使用implode函数在字段名称中插入数据。这将用于在Mysql中插入值
$v_sql="'".implode ("' ,",$data)."'";
最后MySql命令:
$sql="insert into pracproj1 ($f_sql) VALUES ($v_sql)";
if( $sql== true){
echo "updated";
}
else
"failed";
按提交按钮后,我得到回显的内容。但正如我所说。实时值不会更新到我的数据库中。
如果我不知道如何使用数组或 Implode 功能,我就不会被卡在任何地方。
我正在尝试学习更多可以与我的Html表单一起使用的PHP概念,以及我开始使用 Implode 和数组的原因。 请帮助。
答案 0 :(得分:0)
变量数组$a
,$b
和$c
看起来像这样(根据您的代码):
array(3) {
[0] => string(2) "$a"
[1] => string(2) "$b"
[2] => string(2) "$c"
}
那是因为你要在array
函数中插入字符串。您想插入变量。为此,您只需删除单引号:
$data = array($a, $b, $c);
或者,从PHP 5.4开始:
$data = [$a, $b, $c];
但是,您还必须确保$f_sql
的结果等于数据库表的行名称。此时它只返回以下字符串:0,1,2
。我怀疑你的行名是0,1,2。
如果您真的想使用数组,可以尝试以下内容:
$a = mysql_real_escape_string($_POST['uname']);
$b = mysql_real_escape_string($_POST['fname']);
$c = mysql_real_escape_string($_POST['email']);
// For older PHP versions we use 'array()' instead of brackets
$insertData = array(
'uname' => $a,
'fname' => $b,
'email' => $c
);
$implodedFields = implode(',', array_keys($insertData));
$implodedValue = implode(',', $insertData);
$sql = "INSERT INTO pracproj1 ($implodedFields) VALUES ($implodedValue)";
数组中的'uname'
,'fname'
和'email'
应该等于数据库中行的名称。
如果您不打算动态生成数组或者有任何动态修改数组的逻辑,并且您想要我在我的示例中使用的静态数据,我建议您写出行名并自己回显变量更轻的性能的查询字符串:
$sql = "INSERT INTO pracproj1 (uname, fname, email) VALUES ($a, $b, $c)";
重要提示:请务必阅读并考虑使用MySQLi或PDO以及prepared statements,正如Magnus在您的评论中所说。