我创建了一个简单的脚本,用于将表单中的文本插入数据库。但是出于某种原因,有些文字不会插入!如果我从lipsum.com复制文本,它插入正常。但有时当我输入时,无论我尝试多少次,它都不会插入。随机单词和段落将始终插入,其他只是不会!
这是我的表格代码
<?php
session_start();
if(!$_SESSION['logged']){
header("Location: ../../System/login_page.php");
exit;
}
?>
<?php
require '../db_config.php';
$place_holder;
$result = mysql_query("SELECT alerts FROM alerts ORDER BY id DESC LIMIT 1;") or die ("Could not make query");
while($row = mysql_fetch_array($result))
{
$place_holder = $row['alerts'];
}
?>
<div class="row">
<br/> <br/>
<div class="container">
<div class="row">
<div class="col-sm-4 contact-form">
<form id="alert" method="post" class="form" role="form" action="../alert.php">
<textarea value='hello' class="form-control" id="message" name="message" rows="5"><?php echo $place_holder;?></textarea>
<br />
<div class="row">
<div class="col-xs-12 col-md-12 form-group">
<button class="btn btn-primary pull-right" type="submit">Submit</button>
</form>
这是我的行动代码(alert.php)
<?php
require 'db_config.php';
mysql_query("INSERT INTO alerts (alerts) VALUES('$_POST[message]')");
?>
答案 0 :(得分:5)
您正在插入的数据未被清理:
mysql_query("INSERT INTO alerts (alerts) VALUES('$_POST[message]')");
如果$_POST['message']
包含单引号,则会出现SQL错误。
使用mysql_real_escape_string()
尝试以下内容:
$message = mysql_real_escape_string($_POST['message']);
mysql_query("INSERT INTO alerts (alerts) VALUES('$message')");
但是,我建议您切换到MySQLi
或PDO
库,以便利用预准备语句。
MySQLi的一个例子(从here修改):
// Connect to the database
$mysqli = new mysqli("host", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
// Prepare the statement
if (!($stmt = $mysqli->prepare("INSERT INTO alerts (alerts) VALUES (?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
// Bind the values
if (!$stmt->bind_param("s", $_POST['message'])) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
// execute the query
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
答案 1 :(得分:0)
在将字符串插入SQL语句时始终使用mysql_real_escape_string。这将阻止SQL Injection以及转义语法字符,因此它们不会破坏您的插入查询。