因此,在将行返回到文本框中时,我在MySQL中有一个小问题,因此可以对它们进行编辑。
问题是,在列的字符串中包含撇号(')的行echo
可以作为页面上的文本使用,但是当作为文本框的值进行回显时,字符串会被剪切掉撇号以斜线结束。
我使用stripslashes($nam)
删除了斜杠,$nam
是我将名称列加载到mysqli_fetch_assoc
的变量。但是其余的字符串还没有被退回。
同样,当回显到列出所有行的页面时,没有问题,完整的字符串按原样输出,带撇号,没有添加斜杠。
在Chrome的开发者工具中,我可以看到问题是撇号过早关闭了value
标记,其余字符串被视为HTML属性。
那么如何阻止这种情况发生呢,目前我的代码(一个大大减少的版本,以避免填充无意义的无关代码的页面)我用来回应:
while($row = mysqli_fetch_assoc($result)):
$nam = $row["Name"];
$nam = mysqli_real_escape_string($mysqli, $nam);
$nam = mysqli_real_escape_string($mysqli, $nam);
echo "<label for='Name'>Name</label></td>
<td><input type='text' name='Name' id='Name' placeholder='Item Name' value='".$nam."' required></td>";
endwhile;
答案 0 :(得分:0)
所以我开始输入这个问题,然后想“在发布之前我最好试试这个,否则如果简单修复的话,它看起来真的很糟糕。”
原来我是对的。然而,我会发布这个问题,所以开始的人可能会从中学习,因为它是如此基本的东西,部分是因为我已经输入问题。
答案:
以前我使用引号"
来封装我想要回显的内容,并使用撇号'
来设置值,所以在这种情况下,我的代码是:
echo "<input type='text' name='Name' id='Name' placeholder='Item Name' value='".$nam."' required>";
要注意的关键点是代码:value='".$nam."'
。
因为该行返回了一个撇号,我假设PHP将这个撇号识别为value
属性的结尾并缩短了我的字符串,因此奇怪的Chrome Developer Tools源代码包含了我的其余字符串,sans apostrophe。
要解决这个问题,我只需将撇号更改为引号,然后使用反斜杠\
对其进行转义。对于任何不知道的人来说,逃避是通过在你需要逃脱的角色之前加上反斜杠来完成的,这就消除了这个角色的任何特殊能力。如果我没有转义引号,那么引号会结束我的echo
并给我留下语法错误。通过转义它,我告诉PHP,引号是我想要echo
的HTML的一部分,而不是echo
的结尾。
所以我的新代码现在是:
echo "<input type='text' name='Name' id='Name' placeholder='Item Name' value=\"".$nam."\" required>";
所以我学到的经验是:不要试图通过使用它们来封装你的echo
来避免转义引号。