只有特定文本才会插入数据库

时间:2014-01-14 19:56:53

标签: php mysql

我创建了一个简单的脚本,用于将表单中的文本插入数据库。但是出于某种原因,有些文字不会插入!如果我从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]')");

?>

2 个答案:

答案 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')");

但是,我建议您切换到MySQLiPDO库,以便利用预准备语句。

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以及转义语法字符,因此它们不会破坏您的插入查询。