通过javascript/PHP和specialchars通过ajax表单传递MySQL数据
我最近创建了一个基本的PHP网页,其中列出了从MySQL表中提取的信息,并以各种方式显示这些信息。我希望允许用户在不刷新页面的情况下向表中添加新项、编辑列表中的项以及删除列表中的项(Ajax) 现在是这样,;通过javascript/PHP和specialchars通过ajax表单传递MySQL数据,php,ajax,htmlspecialchars,Php,Ajax,Htmlspecialchars,我最近创建了一个基本的PHP网页,其中列出了从MySQL表中提取的信息,并以各种方式显示这些信息。我希望允许用户在不刷新页面的情况下向表中添加新项、编辑列表中的项以及删除列表中的项(Ajax) 现在是这样,; 要添加/编辑文章,请单击提示popover ajax表单的链接,并通过执行以下函数setEdit(comment)来填充其内容(如果编辑) <a class="popup-button" title="<?php echo $row['comment']; ?>"
<a class="popup-button" title="<?php echo $row['comment']; ?>" onclick="setEdit('<?php if($row['comment']){ echo $row['comment']; } else { echo "Enter comment here..."; } ?>');"><?php echo $row['listitem']; ?></a>
if(isset($_POST['comment_text']))
$comment=$_POST['comment_text'];
$sql = "INSERT INTO table SET
comment='$comment'";
问题:我在试图通过1、2、3获取数据库内容时遇到了持续的问题,而不会在新行(单引号或双引号)出现问题。我尝试了无休止的替换标签、htmlspecialchars和nl2br的组合,但没有半点成功——现在它变得如此复杂,编码/解码,以至于我认为有一种更简单、更明显的方式我错过了
主要问题发生在尝试将数据加载到表单中时,通常是表单出现故障并拒绝填充(通常是由于链接被提取的数据(即单引号或新行)打断),或者表单填充了特殊字符而不是要编辑的纯文本
我试着尽可能详细地介绍,但如果还需要更多,我很乐意提供。如果这是一个明显的修复/错误,我也表示歉意,我是个白痴。这里有两个问题:存储和显示 要显示,您应该查看
htmlentities
(它为您执行所有引号替换、html编码等操作),以便您的字符串可以安全地显示为纯文本或输入值
要存储数据,您应该清理查询。您可以使用mysqli
和,或者使用手动转义输入
否则,;) 我一直按照您的指示做,花了几个小时研究如何使用htmlentities和类似的方法来确保HTML编码的安全。它适用于链接标题(title=“echo htmlentites()”。它适用于现在可以愉快地存储任何字符的数据库。但是它仍然拒绝接受表单中的字符串(这会破坏编辑)。我希望问题源于我将编码字符串回显到javascript函数调用中,然后在将字符串分配给输入字段值时对字符串进行解码,使其再次变得不安全。例如,1.$cleancomment=HTMLEntitys($row['comment',ENT_QUOTES);…2.onclick='setEdit(echo$cleancomment)“…3.document.getElementById('field-comment')。value=cleancomment;4.在ajax表单中查看,加载时不会返回任何内容(已断开)…我预计第2阶段->第3阶段会发生断开,这会使字符串不安全。如何避免此问题?id='help-us-comment'的元素是什么?是文本区域还是类型为“text”的输入无论
$cleancomment
中有什么内容,都应该这样做:onclick='setEdit(“”;“
(如果它是输入,那么它应该可以工作,如果它是文本区域,那么它就不同了……很抱歉回复太晚。我做了一些快速测试,对于文本区域,它看起来也应该像这样工作。(在jQuery中它是不同的,这就是为什么我认为它也在这里)。
if(isset($_POST['comment_text']))
$comment=$_POST['comment_text'];
$sql = "INSERT INTO table SET
comment='$comment'";