在"&"时提交表单的问题在描述框中

时间:2014-04-21 14:31:05

标签: php mysql

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

例如:

"快速的棕色狐狸跳过狗& 这只猫"不行。

"快速的棕色狐狸跳过狗猫#34;会工作的。

在其中一个页面上插入声明:

$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:没有名字   第15行/home/xxxxx/public_html/main/includes/mail2.php

     

警告:simplexml_load_string():&lt; p&gt;说明:&lt; br   /&gt;&lt; b&gt;插入3a&amp; 3b修改&lt; / b&gt;&lt; / p&gt;在   第15行/home/xxxxx/public_html/main/includes/mail2.php

     

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

     

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

在转义后使用$ desc上的htmlspecialchars()解决它。

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

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