如何使用PHP在数据库中插入HTML标签

时间:2014-10-21 14:37:57

标签: php html mysql

我在向数据库插入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);
?>

任何帮助将不胜感激。

3 个答案:

答案 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_*函数。它们已被弃用。我建议mysqliPDO作为广泛使用的替代品。

其次,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">