【问题标题】:Issue with submitting form when "&" in description box描述框中“&”时提交表单的问题
【发布时间】:2014-04-21 14:31:04
【问题描述】:

我的所有表单都出现了这个问题。如果在描述中,用户有 & 符号,页面将显示带有值的 INSERT 语句,但不会继续或发送电子邮件。

例如:

“快速的棕色狐狸跳过狗&猫”是行不通的。

“快速的棕色狐狸跳过狗猫”会起作用。

在其中一页上插入语句:

$filename = $_GET['filename'];
$size = $_GET['filesize'];
$date = $_GET['filedate'];
$user = $loggedin_id;
$desc = mysqli_real_escape_string($dbc3, $_GET['desc']);
$type = $_GET['type'];
$ver = $_GET['ver'];
$rev = $_GET['rev'];
$sql = "SELECT lineup FROM cad_files WHERE job_num = $job_id AND file_type = '$type' ORDER BY date DESC LIMIT 1";
$result = mysqli_query($dbc3, $sql);
if(mysqli_num_rows($result) < 1){
    $prev_lineup = 0;
} else {
    $prev_file = mysqli_fetch_assoc($result);
    $prev_lineup = $prev_file['lineup'];
}
//$type = getcadtype($type);
$job_id = getjobid($job_num, $dbc3);
$sql = "INSERT INTO cad_files(job_num, user, file_name, file_type, version, revision, date, size, description) VALUES($job_id, '$user', '$filename', '$type', '$ver', '$rev', '$date', '$size', '$desc')";
// echo $sql;
mysqli_query($dbc3, $sql) or die(mysqli_error($dbc3));

$id = mysqli_insert_id($dbc3);

我该如何解决这个问题?

错误:

警告:simplexml_load_string():实体:第 9 行:解析器错误: xmlParseEntityRef:没有名称 /home/xxxxx/public_html/main/includes/mail2.php 在第 15 行

警告:simplexml_load_string():

说明:
插入 3a 和 3b 已修改

/home/xxxxx/public_html/main/includes/mail2.php 在第 15 行

警告:simplexml_load_string(): ^ in /home/xxxxxx/public_html/main/includes/mail2.php 在第 15 行

可捕获的致命错误:传递给 simpleXMLToArray() 的参数 1 必须是 SimpleXMLElement 的一个实例,给定的布尔值,在 /home/xxxxxx/public_html/main/includes/mail2.php 在第 15 行和 定义在 /home/xxxxxx/public_html/main/includes/functions.php 上 第 354 行

【问题讨论】:

  • 所有输入在插入数据库之前都应该得到保护。如果您想要查询中的所有值:$_GET = array_map('mysqli_real_escape_string', $_GET)
  • mysqli_real_escape_string() 使用这个
  • @AwladLiton 他这样做了,但不是到处都有。使用 PreparedStatements 会好很多
  • @AwladLiton 它用于描述? $desc = mysqli_real_escape_string($dbc3, $_GET['desc']);

标签: php mysql


【解决方案1】:

因为您通过查询字符串 (HTTP GET) 发送所有内容,所以您应该在将变量发送到服务器之前对其进行转义。

使用 javascript escape 函数对这样的字符进行编码。 您还需要在服务器端解码它们

【讨论】:

    【解决方案2】:

    转义后在 $desc 上使用 htmlspecialchars() 解决了这个问题。

    $desc = mysqli_real_escape_string($dbc3, $_GET['desc']);
    $desc = htmlspecialchars($desc);
    

    唯一的问题是它将它作为“&”插入到表格中,但这并不是真正的问题,因为页面无论如何都会显示“&”。我想这现在必须做,我将根据每个人的建议来确保其余的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2016-09-28
      • 2014-10-21
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      相关资源
      最近更新 更多