我在向数据库插入HTML标签时遇到问题,但没有办法这样做。我的代码在
之下<html>
<body>
<form name = "myForm" >
<label name = 'q1'>Question 01: what Jorge do according to the story</label>
</form>
<?php
require "connection.php";
$qst = $_POST['q1'];
mysql_query("insert into xxx values('$qst')") or die(mysql_error);
?>
任何帮助将不胜感激。
答案 0 :(得分:4)
这里有很多问题。首先让我们谈谈实际阻止这种情况发生的事情。
首先,您需要将method
元素的<form>
属性设置为POST,以使表单在提交时执行POST操作,而不是默认的GET操作。
<form name="myForm" method="post">
请注意,通常认为表单的action
属性也是一种好的形式,但在这种情况下,发布到currnet URI的默认行为恰好适合您。
其次,您需要在表单中实际创建输入字段。这是发布的数据的输入位置:
<label for="q1">Question 01: what Jorge do according to the story?</label>
<input type="text" name="q1" />
第三,你需要一个提交按钮来实际制作表格POST:
<input name="submit" type="submit" value="submit" />
现在,让我们谈谈应该修复的东西,这些东西实际上并没有阻止它工作,但只是代表了良好的编程习惯。
首先,您不应该使用mysql_*
函数。它们已被弃用。我建议mysqli
或PDO
作为广泛使用的替代品。
其次,SQL注入存在很大的漏洞。您不应该使用用户输入数据而不验证和消毒它。这意味着您可能应该在尝试执行插入之前检查值是否甚至是POST(不是空字符串)然后您需要在SQL中使用它之前转义该值,或者更好的是,学习如何使用参数化准备这些语句可以防止输入转义。
第三,我建议养成将代码逻辑放在脚本开头(HTML之前)输出的习惯。在您的情况下,这意味着移动您在PST内容中读取的逻辑,并在HTML之前执行数据库插入。为什么?因为这允许您执行诸如有条件地打印出错误消息的事情,如果用户没有提供输入或以其他方式更改页面以响应POST。这也有助于养成一个好习惯,当你开始用PHP做更复杂的事情时,你可能需要做一些事情,比如将用户从一个页面重定向到另一个页面,或者将显示器的逻辑完全分离成单独的文件。代码卡在HTML输出的末尾是不可能的。
答案 1 :(得分:1)
$_POST
变量与标签元素不对应,它们对应于输入元素。 post数组的关键是输入元素的名称。
<input type="text" name="mytext" />
发布后将$_POST['mytext']
但是,您很容易受到SQL注入攻击。您不应该使用mysql_query()
而是使用预先准备好的语句来使用PDO或Mysqli,但如果您坚持使用它,请先使用mysql_real_escape_string()
$qst = mysql_real_escape_string($_POST['q1']);
mysql_query("insert into xxx values('$qst')") or die(mysql_error);
弗雷德在评论中提出了一个很好的观点。这段代码将在提交表单之前第一次加载页面时执行,并抛出错误(或警告),因为$_POST['q1']
尚不存在。在使用它之前,你需要确保它确实存在。
if(!empty($_POST['q1'])){
$qst = mysql_real_escape_string($_POST['q1']);
mysql_query("insert into xxx values('$qst')") or die(mysql_error);
}
此外,您需要告知表单提交的位置以及使用的方法:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for = 'q1'>Question 01: what Jorge do according to the story</label>
<input type='text' name='q1' value='' />
</form>
BTW,label没有name属性,它有一个“for”属性。
此外,<form>
元素默认使用“GET”并在未设置操作时提交到当前页面,因此在技术上没有必要在这种情况下设置动作,但这是一种很好的做法。
答案 2 :(得分:0)
您需要为表单添加输入字段并更改表单sumbit方法。默认情况下它是“GET”,所以你不能在$ _POST中输入值。
或者你可以从$ _GET获得输入值。
<html>
<body>
<form name = "myForm" method="post">
<label for = 'inp'>Question 01: what Jorge do according to the story</label>
<input type="text" name="q1" id="inp" />
<input type="submit" value="Submit">
</form>
<?php
require "connection.php";
$qst = $_POST['q1'];
mysql_query("insert into xxx values('$qst')") or die(mysql_error);
?>
你还需要有一个sumbit输入字段来提交表格,或者可以用js或keyup输入密钥进行汇总。
<input type="submit" value="Submit">