Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 缺少特殊字符_Php_Jquery - Fatal编程技术网

Php 缺少特殊字符

Php 缺少特殊字符,php,jquery,Php,Jquery,我有一个html表格中的相机名称列表。如果愿意,可以点击编辑按钮编辑相机名称 这将打开一个窗体(以及许多其他选项),其中相机名称现在可编辑 var edit = function(t, to, cameratype, cameraname, ...) { var mydiv = js("#editform"); if (mydiv.find("form").length) { mydiv.show(); } else { // fields var

我有一个html表格中的相机名称列表。如果愿意,可以点击编辑按钮编辑相机名称

这将打开一个窗体(以及许多其他选项),其中相机名称现在可编辑

var edit = function(t, to, cameratype, cameraname, ...)
{
   var mydiv = js("#editform");

   if (mydiv.find("form").length) {
      mydiv.show();
   } else {
    // fields
    var $myform = js("<form id='EditCameraForm' name='' method='post' action='" + to + "'></form>");
    var $myfieldset = js("<fieldset><legend>Edit camera settings</legend></fieldset>");
    var $myinput = js("<input type='hidden' name='camera_type' value='" + cameratype + "' />");
    var $mylabel = js("<label for='CameraName'>Camera name:&nbsp;</label>");
    var $myinput2 = js("<input id='CameraName' name='camera_name' size='25' value='" + cameraname + "'  />");

    $myform.append($myinput, $mylabel, $myinput2, ...);
}
cameraname通过单击按钮传入:

<button id="editbutton" onClick='edit(this, "<?php echo htmlentities($_SERVER['REQUEST_URI']); ?>", "<?php echo $result_cameras[$i]["camera_type"]; ?>", "<?php echo $result_cameras[$i]["camera_name"]; ?>", ...)'>Edit</button>

我发现这段代码有一些地方不对劲,但是让我们从check_input()函数开始,因为您认为它是可疑的

只有当你知道神奇的报价是开着的时候,你才应该这么做。您正在进行从UTF-8到UTF-8的转换?这有什么原因吗?工作,但我想你想要

TomPepernic说:


我不太明白。我正在使用check_输入清理任何用户输入,例如:$camera_name=check_输入($\u POST['camera_name']);,然后在将mysql\u real\u escape\u字符串插入数据库之前使用它。这是错误的吗汤姆·佩珀尼奇2小时前

@TomPepernic与许多问题一样,在不了解课程的全部范围的情况下,很难给出明确的“正确”或“错误”答案。根据经验,我可以告诉你,虽然在许多情况下,这通常被认为是可以接受的,但它很少是最佳解决方案

在一开始就基于单个卫生设施假设程序对恶意数据是“安全的”,这是一个有缺陷的模型。因为几乎不可能知道每一个可能的数据出口,所以您将无法使用一种方法对所有这些数据出口进行消毒。在程序开始时,您正在清理HTML,但仅此而已。在以后的程序中,您必须转义SQL,因为清理无效。如果以后您决定存储在不同的数据库类型(不是SQL)中,会怎么样?您必须再次对该特定数据库进行清理。一个更好的方法是假设数据在每一个级别都受到污染,然后在数据到达其出口之前进行必要的清理

另一个原因是,在程序的PHP部分,您正在清理HTML。在这个阶段,恶意数据几乎不可能危害您的PHP。因为您的PHP代码和HTML代码应该是分开的,所以您正在清理错误的语言。HTML的清理应该出现在程序的“视图”部分(假设您使用的是MVC方法)


最后一个让我感到厌烦的原因是,在处理数据之前,您正在更改数据。通常,处理原始数据并存储原始数据是一个好主意。更改数据后,如果以后需要,则更难或不可能恢复数据。很多年前,我通过艰苦的方式学会了这一点。我开发了一个小型论坛应用程序,它使用专有的BBcode语法添加文本格式、图像和链接。在存储数据之前,我对数据进行了消毒和处理,认为我再也不需要原始数据了。后来,我发现语法有问题,需要修改,因为它会导致一些帖子显示不正确。我能够在我的代码中做一个更正,这将在以后的所有帖子中正常工作。不幸的是,以前所有受此问题影响的帖子都无法修复,因为我已将它们存储在已损坏的已处理表单中。如果我存储了原始数据,我就能够重新处理它们,并且不会丢失任何数据。

与其像您那样构建输入框,不如尝试使用更多的Jquery

var $myinput = js('<input/>').attr('type','hidden').attr('name','camera_type').val(cameratype);
var$myinput=js(“”).attr('type','hidden').attr('name','camera_type').val(cameratype);

您的问题很可能是您在
value='“+cameratype+”
部分中创建了双引号问题。

不是您问题的答案,而是。。。扔掉验证函数,它会破坏您的数据,但不能提供足够的SQL注入保护。扔掉?这不是一种常见的技术来阻止XSS(使用@JMack修复程序),然后使用mysql函数进行SQL,比如mysql_real_escape_string吗?函数中的调用似乎都没有用处-相反,
stripslashes()
调用甚至可能会破坏数据
htmlspecialchars()
是防止XSS(不需要转换所有实体)的唯一必要工具,在输出数据时应用它就足够了,正如您所说的
mysql\u real\u escape\u string()
如果在
mysql\u query()
中使用数据。谢谢。我应该多加注意。我发誓我有htmlspecialchars,但是剪切和粘贴了错误的代码。剩下的我没有借口;)@TomPepernic我注意到您的函数名为“check_input()”,但实际上它并没有这样做。此函数正在执行格式化。我建议您将其命名为“sanitize_input()”、“clean_input()”,或类似的名称。@TomPepernic还显示您正在函数中使用htmlspecialchars()在处理前清理输入。这是没有经验的用户在使用PHP时经常遇到的一个陷阱。您不希望在开始时尝试清理输入,因为您正在更改需要处理的数据,并且可能无法在此处正确保护您。您需要获取原始数据,并根据需要进行处理。在将其打印回页面之前,请在其上使用htmlspecialchars(),在将其插入数据库之前,请使用mysql\u real\u escape\u string()。我不太明白。我正在使用check_输入清理任何用户输入,例如:
$camera_name=check_输入($_POST['camera_name']),然后在将mysql\u real\u escape\u字符串插入数据库之前使用它。这是错误的?我已经在答案的底部添加了我的解释,因为它太长了,不能放在这里。我希望它能有所帮助。我还有一个地方需要更新,但我不知道如何重写:
window.open(“file.php?user=“+++”&camerahash+”&name=“+camerahash+”&quality=“+camerahaflashquality+”&motion=“+camerahash+”&Monitor”)。你有什么建议吗?
function check_input($data)
{
    $data = trim($data);
    $data = (get_magic_quotes_gpc()) ? stripslashes($data) : $data;
    $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');

    return $data;
}
var $myinput = js('<input/>').attr('type','hidden').attr('name','camera_type').val(cameratype);