我能找到的最接近当前困境的物理描述是在HTML/PHP if-else语句中,主要问题相似之处在于按钮状态的变化.由于我没有在twitter-bootstrap中尝试任何操作,因此我的问题与该参考点不同.我正在处理克服(最初)可怕的内容发布和撤回系统的编码.
这段代码;
echo '<input type="submit" name="action" value="Edit" />';
if ($row['is_published'] || $row['date_published']) {
if($action == 'Retract') {
echo '<input type="submit" name="action" value="Retract"/>';
} else {
if($action == 'Publish') {
echo '<input type="submit" name="action" value="Publish"/>';
}
}
}
if($row['access_level'] > 1 || $_SESSION['access_level'] > 1){
echo '<input type="submit" name="action" value="$action" />';
}
echo'<input type="submit" name="action" value="Delete"/>';
Run Code Online (Sandbox Code Playgroud)
返回提交输入的结果为;
_____________ ____________ ____________
| | | |
| EDIT | $ACTION | DELETE |
|_____________|____________|____________|
Run Code Online (Sandbox Code Playgroud)
我知道我做了一些简单的错误,因为$ACTION输入的状态应该与$action变量是否受数据库状态变化(体现$row['is_published'] || $row['date_published'])的影响有关.我先前已经声明了$action变量
$action = '';
if (isset($_GET['action'])) $action = $_GET['action'];
Run Code Online (Sandbox Code Playgroud)
而且我很确定我的解决方案在于我if/else在原始if语句中嵌套了嵌套,或者$action输入的回显没有帮助跳转(条件)输入状态.我对发布/撤回内容的能力没有任何问题 - 只是根据内容是否已发布(使用"撤回"输入标签值)或缩回(使用"发布"输入标签)获取输入以反映正确的状态值).我甚至玩弄了开关套管的想法,但这有点像火车残骸 - 但不比我改编的原始版本更多;
if ($row[‘is_published’]) {
$buttonType = “Retract”;
} else {
$buttonType = “Publish”;
}
echo “<input type=’submit’ class=’submit’ “ .
“name=’action’ value=’Edit’ /> “;
if (($row[‘access_lvl’] > 1) or ($_SESSION[‘access_lvl’] > 1)) {
echo “<input type=’submit’ class=’submit’ “ .
“name=’action’ value=’$buttonType’ /> “;
}
Run Code Online (Sandbox Code Playgroud)
(多么糟糕,哈哈!)
令我沮丧的是,无论是重复阅读手动控制结构还是协商原始脚本控制流程都无法解决问题.也许我只是看不到森林里的树木.我恐怕我只是读自己很傻......但我很确定这是人为错误,因为我永远无法$ACTION根据内容状态改变输入状态.
更新
现在,我正处于数据库内容状态和输入标签状态同步同步的状态(数据库内容处于PUBLISHED状态);
echo '<input type="submit" name="action" value="Edit" />';
if ($row['is_published'] || $row['date_published']) {
}
if($row['access_level'] > 1 || $_SESSION['access_level'] > 1){
if ($action=='Retract') {
echo '<input type="submit" name="action" value="Publish"/>';
} else {
echo '<input type="submit" name="action" value="Retract"/>';
}
}
}
echo'<input type="submit" name="action" value="Delete"/>';
}
Run Code Online (Sandbox Code Playgroud)
上面的代码;
_____________ ____________ ____________
| | | |
| EDIT | RETRACT | DELETE |
|_____________|____________|____________|
Run Code Online (Sandbox Code Playgroud)
确切地说,我想看到的.但是,相当不幸的是,即使数据库内容状态确实发生变化(即在这种情况下)允许内容收回,单击时输入标签状态仍保持不变.我很亲密,我可以品尝它.
我的大脑真正困扰的是我必须手动改变$action变量和echo语句值以使输入/内容状态正确地同步同步 - 这是if/else语句的全部要点(lol) !).
我的意思是,我甚至对比较运算符上的一个小小的巨魔起作用,因为我试图在某个地方引起一个意外导致解决的无意义错误,但是是否使用了=,==或===,它似乎没有影响诉讼程序(我当然认为=会动摇一些事情).据我所知,如果IF CONDITION为假,else则用于替代编码块.在这一点上试图避免"代码连枷",但更多阅读似乎是必要的.
感谢所有人的眼睛/观点,以及@Darren和@take的精彩见解.我会打破这个单位......
2ND更新
有一个"哎呀"的时刻;
echo '<input type="submit" name="action" value="Edit" />';
if (empty($action) == 'Retract') {
echo '<input type="submit" name="action" value="Publish"/>';
} else {
if ($row['is_published'] || $row['date_published']) {
if(empty($action) == 'Retract') {
echo '<input type="submit" name="action" value="Publish"/>';
}
}
}
echo'<input type="submit" name="action" value="Delete"/>';
}}}
Run Code Online (Sandbox Code Playgroud)
只是因为我很烦,不需要邋iness(代码重构给出完全相同的结果).
3RD更新
echo '
<br>
<div class="searh_form">
<form method="POST" action="transact_blog.php">
<div>
<input type="submit" name="action" value="Edit"/>
<input type="submit" name="action" value="Delete"/>';
if($row['access_level'] > 1 || $_SESSION['access_level'] > 1){
if(!empty($row['date_published']) and !empty($row['is_published'])){
echo '<input type="submit" name="action" value="Publish"/>';
} else {
echo '<input type="submit" name="action" value="Retract"/>';
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在中风的笑声和Derp级代码肆虐之间,我正处于心理/身体疲惫的程度.感谢form@Sharky和@Darren提交的建议,$action变量被$_POST初始化了.遗憾的是,我发现潜在的关键可能是我必须允许所有输入存在,然后进行某种is_array爆炸以创建严格执行的条件功能.
对我来说,存在关于如何翻转输入标签状态以匹配数据库内容是否已发布或未发布的问题.它真的不能那么难.我几乎正在考虑我可以包装的一些JS或jQuery,但我只是不想去那条路线,除非绝对必要(我确实有"实用工具",我用它回声了PHP - 主要用于重复性任务,但我不愿意在JS上利用大型用户功能).手动改变这一部分;
if(!empty($row['date_published']) and !empty($row['is_published'])){
echo '<input type="submit" name="action" value="Publish"/>';
} else {
echo '<input type="submit" name="action" value="Retract"/>';
}
Run Code Online (Sandbox Code Playgroud)
通过剥离!empty()和交换$action变量值,我实现了使输入标签和数据库内容发布状态运行(所需)代码执行的能力.这方面让我笑而不是哭(哈哈!)... 更多阅读......
重要编辑
我决定删除该行
echo '<input type="submit" name="action" value="'.$_POST['action'].'" />';
Run Code Online (Sandbox Code Playgroud)
因为它对于发布/撤销的功能并不重要,因为该过程仍然按照设计和实施的方式执行.对我来说,分裂是(仍然),我无法弄清楚如何使$action变量抓到'Retract'/ 'Publish'值....更多阅读.
最后更新
即将失去它...自从我完全停在我的轨道上以来的十一天.我已经阅读了,直到我昏倒了,代码连续fla骂,有一些功能,我认为我已经钉牢了再次成为问题(再次钉牢),并且在快速成为我的个人第九圈的圆形和圆形编码地狱;
if($row['access_level'] > 1 || $_SESSION['access_level'] > 1){
if(empty($row['is_published']) || $action != 'Retract'){
echo '<input type="submit" name="action" value="Publish"/>';
}
elseif($row['is_published'] || $action != 'Publish'){
echo '<input type="submit" name="action" value="Retract"/>';
}
}
Run Code Online (Sandbox Code Playgroud)
该$action变量(我POST根据@Darren和@Sharky提出的建议编写)isset在代码中较早;
$action = false;
if(isset($_POST['action'])){
$action = $_POST['action'];
}
echo $action;
Run Code Online (Sandbox Code Playgroud)
在这一点上,我已经处于一种先进的隐居状态,并且快速接近心理失修.在整个肮脏的混乱中唯一的积极因素是,我发现自己从以下事实中发出幽默的事实:手动交换前代码块中两个回声的位置是改变输入标签状态以响应数据库内容状态的原因(已发布或已撤消)而不是if ... else if语句.我无法相信在我最近推翻的任何岩石下面都没有一个指针碎屑.只是一大堆不好的建议和弃用的解决方案(甚至不起作用,哈哈!).如果我能找到一种方法来迫使回声交换位置,那我就是金色的.:longsigh:现在,这是必要的......
最后一刻(必须杀人/要求杀人)
我只是不知道还能做什么...似乎我已经筋疲力尽所有可能性使输入标签状态从"撤回"<=>"发布""翻转".我在这一点上怀疑这可能是一个纯粹的PHP解决方案.实际上与这个(可怕的)代码概念起源的出版商取得了联系,并被一个"我们将这些信息传达给响应方(哈哈!)".在这一点上,我只是在乞求如何解决这个问题的任何暗示.
我把它分离出来(我在想的是)那ELSE部分if/else是罪魁祸首,但是我不知道如何像我在if部分中成功做到的那样强制实施它;
CODE:
-----
echo '<br><div class="searh_form"><form method="post" action="transact_article.php"><div>';
echo '<p><br>';
echo '<input type="submit" name="action" value="Edit"/>';
foreach ($_POST as $key => $value) {
$submitted_array = array_keys($_POST, [0], $action);
echo ($_POST['action'][$submitted_array[0]] . " " . $submitted_array[0]);
}
if (empty($row['is_published']) || !$row['is_published'] && empty($row['date_published']) || !$row['date_published'] && $action != $_POST['action'] || $action != '') {
$action = "Publish";
}else{
if (!empty($row['is_published']) || $row['is_published'] && $row['date_published'] || $row['date_published'] && $action == $_POST['action'] || $action != $_GET['action']) {
$action = "Retract";
}}
if (($row['access_level'] > 1) || ($_SESSION['access_level'] > 1)) {
echo '<input type="submit" name="action" value="'.$action.'" />';
}
echo '<input type="submit" name="action" value="Delete" />';
}}
?>
<input type="hidden" name="article_id" value="<?php echo $_GET['id']; ?>"/>
</p>
</form>
RESULT:
-------
_____________ ____________ ____________
| | | |
| EDIT | PUBLISH | DELETE |
|_____________|____________|____________|
Run Code Online (Sandbox Code Playgroud)
重新使用该行
echo '<input type="submit" name="action" value="$action" />';
允许我达到上述结果 - 这就是我需要在编辑/发布之前显示所有待处理内容.拜托,我已经谦卑地询问,当我们批准更新数据库内容状态时,我可以做什么让我的标签翻转到"撤消".感谢您提供的任何其他指示.我就在这根绳子的尽头......
什么以理智的名义会采取什么?!?!?
双元素数组声明:
$buttonType = array('Publish', 'Retract');
一旦我发现这if/else是指一个数组结构 - print_r()存在的事实,解决方案开始出现
Array ( [0] => Publish [1] => Retract )
大!但是,遗憾的是我无法点击其中的数字索引if/else来强制$buttonType变量显示Retract值,因为我得到致命错误,因为[]不允许在PHP中读取
$buttonType = array('Publish', 'Retract');
if (isset($_POST['buttonType']) && $buttonType == $_POST['buttonType']) {
foreach ($_POST as $key => $value) {
return $value;
}
}
if ($row['is_published'] && $row['date_published'] && $buttonType != 'Publish') {
$buttonType = "Retract";
} else {
if (empty($row['is_published']) && empty($row['date_published']) && $buttonType != 'Retract') {
$buttonType = "Publish";
}
}
if (($row['access_level'] > 1) || ($_SESSION['access_level'] > 1)) {
echo '<input type="submit" name="action" value="'.$buttonType.'" />';
}
Run Code Online (Sandbox Code Playgroud)
当前重写产生'未发布'的期望结果;
_____________ ____________ ____________
| | | |
| EDIT | PUBLISH | DELETE |
|_____________|____________|____________|
Run Code Online (Sandbox Code Playgroud)
但是,在提交表单后,即使我将内容变为"已发布",输入值仍保持不变.必须有一种更简单的方法来翻转输入值状态.我仍然陷入困境,试图看看如何访问数字索引.
糟糕的代码有时很难克服。我的错误是一开始就尝试遵循毫无意义的逻辑。一旦我想到要专注于阵列业务,作为我之前渴望的输入状态翻转的关键;
echo '<br><div class="searh_form"><form method="post" action="transact_article.php"><div><p><br>';
echo '<input type="submit" name="action" value="Edit" />';
foreach ($buttonType as $key=>$value){
if ($row['is_published'] && array_key_exists([0], $buttonType, TRUE)) {
if (($row['access_level'] > 1) or ($_SESSION['access_level'] > 1)) {
$buttonType[] = '<input type="submit" name="action" value="Retract"/>';
} else {
$buttonType[] = '<input type="submit" name="action" value="Publish"/>';
}}
echo "<input type='submit' name='action' value=\"$buttonType[$key]\" />";
}
echo '<input type="submit" name="action" value="Delete" />';
}}
?>
<input type="hidden" name="article_id" value="<?php echo $_GET['id']; ?>"/>
</p>
</div>
</form>
<br>
Run Code Online (Sandbox Code Playgroud)
我必须对一些代码进行一些物理重新定位 - 移动语句if/else内的foreach内容,调整$buttonType变量与目标输入的连接(已$buttonType在页面中进一步声明数组),同时仍然不改变预期输入的方式采取行动履行发布/撤回的职能。
完全按照要求工作...又一次完美的胜利...