按下编辑注释时,它会将?edit = true发送到同一页面。然后它运行第二个if语句chaning>编辑注释<进入>保存评论<。但是当按下>保存评论<它不会改回>编辑评论< ..
如何将其更改回>编辑评论< ?
将contenteditable属性设置为true或false也是如此。它只会变为真,但不会变回假。
另外我不知道要设置什么标题所以随意编辑它大声笑。
function is_logged_in(){
if($_SESSION["admin_logged_in"]){
return true;
} else {
return false;
}
<?php if (is_logged_in()) {
if ($_GET['edit'] === 'edit_false' || $_GET['edit'] == "") {
echo "<a href='kritiek.php?edit=edit_true'>Edit comment</a>";
}
if ($_GET['edit'] === 'edit_true') {
echo "<a href='kritiek.php?edit=edit_false'>Save comment</a>";
}
} ?>
<p <?php if($_GET['edit'] === 'edit_true'){ edit_comment(true);}
if($_GET['edit'] === 'edit_false'){ edit_comment(false); }?>
><?php echo $row['comments']; ?></p>
function edit_comment($link) {
if (is_logged_in()) {
if($link === true) {
echo "contenteditable='true'";
} else {
echo "contenteditable='false'";
}
}
}
?>
编辑:改变了
$_GET['edit'] == true
到
$_GET['edit'] === 'edit_true'
完全消失按钮。
编辑:通过更改
修复此问题if ($_GET['edit'] === 'edit_false'
到
if ($_GET['edit'] === 'edit_false' || $_GET['edit'] == "")
答案 0 :(得分:3)
您正在检查布尔值false而不是字符串&#39; false&#39;所以...
if ($_GET['edit'] == false) {
到
if ($_GET['edit'] === 'false') {
显然也改变了其他检查
答案 1 :(得分:1)
比较来自外部的用户输入的更好方法是使用filter_input,因为所有输入最终都被解析为PHP中的字符串。您不能将类似的布尔值直接与字符串(即'false' != false
)进行比较。
相反,你可以试试这样的......
if (filter_input(INPUT_GET, 'edit', FILTER_VALIDATE_BOOLEAN) == false) {
/* $_GET['edit'] is false */
} elseif (filter_input(INPUT_GET, 'edit', FILTER_VALIDATE_BOOLEAN) == true) {
/* $_GET['edit'] is true */
}
这使得比较更安全,因为filter_input()
将解析"1"
,"true"
,"on"
和&#34; yes"
的字符串作为boolean true
并将解析一个"0"
,"false"
,"off"
,"no"
和""
字符串 - 一个空字符串 - 作为布尔值false
。此外,如果未设置$_GET['edit']
或null
,filter_input()
仍将返回null,仍然使其为假,这仍然比尝试将字符串与布尔值进行比较更加预期和明显的行为。
答案 2 :(得分:0)
我最喜欢的方法是使用正在编辑的项目的ID。缺少edit
密钥是错误的,而不是简单的
isset( $_GET['edit'] )
样式检查,避免所有基于类型的东西。你在编辑什么,为什么这个id
url?edit=1
编辑ID#1或你有什么。