我可能遗漏了一些基本的东西,所以在这一点上,我只需要第二双眼睛。我正在我的网站上构建一个简单的输入表单,以便访问者可以提交一些信息。现在,我只是称他们为工作(我只想让它工作)。当我单击提交时,我没有在PHPMYadmin端看到任何信息,因此SQL数据库显然没有更新。我第一次不这么说是不好的。
另外,出于安全考虑,我的密码是隐藏的,但它是正确的。
这是我的PHP和我的HTML。
<?php
$con = mysql_connect("localhost","projedl8_Jason","/////");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("projedl8_quicktern", $con);
$sql="INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription)
VALUES ('JASON', '$_POST[email]','$_POST[job_title]','$_POST[job_description]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>
最后:
<form name="submitjobform" method="post" action="job_submit.php">
<table width="450px">
<tr>
<td valign="top">
<label for="name">Name</label>
</td>
<td valign="top">
<input type="text" name="first_name" maxlength="100" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="email">Email Address</label>
</td>
<td valign="top">
<input type="text" name="email" maxlength="80" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="job_title">Job Title</label>
</td>
<td valign="top">
<input type="text" name="job_title" maxlength="30" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="comments">Job Description</label>
</td>
<td valign="top">
<textarea name="job_description" maxlength="1000" cols="25" rows="6"></textarea>
</td>
</tr>
<tr>
<td colspan="2" style="text-align:left">
<input type="submit" name="submit" value="Submit" size="100"></td>
</tr>
</table>
</form>
以下是PHPMYADMIN的屏幕截图
答案 0 :(得分:1)
我认为这可能是$_POST[...]
中缺少的单引号。
但是您的解决方案可以使用 SQL injection ,因此最好使用预先准备好的语句, 处理引号/反斜杠,在参数中转义。
$db = new mysqli($dbserver, $dbusername, $dbpassword, $dbdatabase);
$stmt2 = $db->stmt_init();
if (!$stmt2->prepare("INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription)
VALUES (?, ?, ?, ?)")) {
die('Error');
} else {
$stmt2->bind_param('ssss', 'JASON', $_POST['email'], $_POST['job_title'], $_POST['job_description']);
if (!$stmt2->execute()) {
die;
} else {
$id = mysqli_insert_id($db);
}
}
$stmt2->close();
(这四个sss表示每个参数都是一个字符串。)
答案 1 :(得分:0)
我认为你的问题只是“mysql将无法连接”部分(我还假设'////'是该字段的正确值)
尝试将“localhost”替换为“127.0.0.1”或使用内部网络接口的IP替换,以防通过Unix套接字进行连接。
但是,你的代码有一个非常糟糕的SQL注入漏洞,在这种形式下使用MySQL相对无害(它是一个INSERT形式,MySQL不允许多个语句执行,所以发布
email=','',''); DROP TABLE jobListForm; --
将导致
INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription)
VALUES ('JASON', '','',''); DROP TABLE jobListForm; --','','');
传递给MySQL,只有第一个查询INSERT才会执行。
但是,在其他地方,即使提交的密码错误,也可能允许SELECT ... LOGIN查询返回TRUE和管理员记录,允许任何人管理您的系统。
将准备好的语句与PDO一起使用,或彻底验证POST中的内容。