【问题标题】:how to correctly call the error_log to display the value in Controller when option is called from View从 View 调用选项时如何正确调用 error_log 以在 Controller 中显示值
【发布时间】:2015-09-09 10:13:21
【问题描述】:

我正在尝试将值记录在我的控制器-> action.php 中。这些值是来自视图的POST-ed -> 带有字段列表的表单。在我的表单中,我创建了一个带有选项列表的<select> 框,每个选项都有与之关联的详细信息。

例如 -> 在我的选项 A 的下拉列表中,我有以下相关的详细信息:姓名、regNum 和地址。选项 B 还具有以下名称、注册号和地址的详细信息。相关的每个细节都是独一无二的。

因此,当我提交表单时,与每个选项关联的详细信息将POST-ed 到控制器代码。因此,为了确保控制器的正确值是POST-ed,*.php,因此我在控制器中创建了一个错误日志文件,*.php,如下所示:

 <?php

 if ( (isset($_POST)) && (0 < count($_POST)) )
{

//error log for details associated with option A
error_log(date("Y-m-d H:i:s")."_-ipad,agencyName: ".$_POST['agencyName']."\n",3,"/var/tmp/*/post.log");
error_log(date("Y-m-d H:i:s")."_-ipad, agencyRegistrationNum: ".$_POST['agentRegistrationNum']."\n",3,"/var/tmp/*/post.log");
error_log(date("Y-m-d H:i:s")."_-ipad, agencyAddress: ".$_POST['agentAddress']."\n",3,"/var/tmp/*/post.log");
} 
//error log for details associated with option B
error_log(date("Y-m-d H:i:s")."_-ipad,agencyName: ".$_POST['agency2Name']."\n",3,"/var/tmp/*/post.log");
error_log(date("Y-m-d H:i:s")."_-ipad, agencyRegistrationNum: ".$_POST['agent2RegistrationNum']."\n",3,"/var/tmp/*/post.log");
error_log(date("Y-m-d H:i:s")."_-ipad, agencyAddress: ".$_POST['agent2Address']."\n",3,"/var/tmp/*/post.log");
}        
 ....

}
.....
?>

此外,还有多个 error_log 来监控每​​个单独选项的详细信息

这是在视图 [表单] 中显示每个选项的详细信息的代码(我故意没有插入 &lt;select&gt; 代码,因为它不是问题的一部分) :

function val(ddbox) {

    if ( ddbox.options[ddbox.selectedIndex].value == "Others"){
            document.getElementById("extradiv").style.display = "block";
    }else{
            document.getElementById("extradiv").style.display = "none";
    }
     if( ddbox.options[ddbox.selectedIndex].value != "Others"){
            document.getElementById("Agency1").style.display = "block";
    }else{
            document.getElementById("Agency1").style.display = "none";
    }
}


<form name="*" id="*" method="POST" action="*.php" onsubmit="return checkForm(this)">

<div id = "Others" style ="display:none">

                    <li class="bigfield"><input placeholder="Agency Name" type="text" name="agencyOthersName" id="agencyOthersName"/></li>
                <li class="bigfield"><input placeholder="Agency Registration Num" type="text" name="agentOthersRegistrationNum" id="agentOthersRegistrationNum"/></li>
                <li class="bigfield"><input placeholder="Agency Address" type="text" name="agentOthersAddress" id="agentOthersAddress"/></li>

                 </div>

                 <!-- when user select other options-->
                <div  id = "Agency1" style ="display:none" >

               <li class="bigfield"><input value="Agency Name A" type="text" name="agencyName" id="agencyName" readonly></li>
                <li class="bigfield"><input value="Agency Registration Num A" type="text" name="agentRegistrationNum" id="agentRegistrationNum" readonly/></li>
                <li class="bigfield"><input value="Agency Address A" type="text" name="agentAddress" id="agentAddress" readonly/></li>

                 </div>
</form>

因此,问题是当我提交表单并显示error_log时,它会显示冗余日志以及正确的日志。

例如-> 当我从表单的选择列表中选择选项 B 时,选项 B 的详细信息将被拉出并显示,因此当我提交表单时,错误日志仅假设显示选项的详细信息B 并且不显示选项 A 和选项 C 的详细信息。总的来说,它显示了所有详细信息。

因此,我如何正确调用控制器中的错误日志以显示视图中的选项(form)

时显示详细信息

【问题讨论】:

  • 显示当前尝试加载错误日志数据的代码
  • @RiggsFolly,你是什么意思?我只是使用 error_log 从表单中捕获值。
  • 好的,那我不明白这个问题,请尝试扩展因此,当视图中的选项(表单)正在被选中
  • @RiggsFolly 我的 error_log 在控制器代码中,用于捕获与表单中的选择列表关联的值,查看代码。因此,当我选择选项 B 时,控制器代码中监控选项 B 值的错误日志应该只显示。但是此时,当我选择选项 B 时,除了选项 B 之外,还显示了监视选项 A 和选项 C 和选项 D 值的错误日志。因此,我只需要更改 error_log 以使其只会根据表格中选择的选项显示。希望我说清楚了

标签: javascript php jquery forms model-view-controller


【解决方案1】:

一些问题要问自己:

  • 提交表单时,您通过 POST 发送什么?
  • 当 POST 传入时,您接受什么?
  • 根据传入的 POST 数据决定在哪里做/显示某事?

对我来说,您似乎只更改了表单元素的可见性,但并未将发送到服务器的实际表单数据减少到仅选定元素。换句话说:不仅将可见性更改为隐藏/无,而且只发送选定/活动表单元素的值。

或者:通过 POST 发送所有内容并减少传入的 POST 数组。例如,您的 POST 数组将包含空元素(来自隐藏的选择),您可以简单地删除它们。最后你会知道发送了哪些数据。

然后检查您的 $_POST 数组并根据传入的表单标签和值决定要做什么。

最后归结为将 error_log() 调用包装到条件检查中。就用伪代码来解释吧……

if( you have a value for $_POST['agentName1'])) { 
  // then select 1 was send and you only need to log the errors for 1
  error_log(... stuff for 1 ...);
}

if(you have a value for $_POST['agentName2'])) {
  // then select 2 was send and you only need to log the errors for 2
  error_log(... stuff for 2 ...);
}

【讨论】:

  • 没错,我已经考虑使用条件检查来限制错误日志的可见性。需要注意的是,我已经以这种方式接近它 `if($_POST['agency1Name'] != ""){..show error log}`,但是,我也意识到每个代理总是有价值的已经有与每个选项相关的详细信息
  • 好的,这意味着你不能根据值来决定,选择本身就会成为焦点。您可以找出选择了什么并添加一个隐藏的表单元素,该元素也发送到服务器。归结为:当我在表单中有多个选择标签时,如何仅发送一个选择标签的数据,对吧?
  • 是的!!请问你是怎么做到的??我正在绞尽脑汁。我已经编辑了当前代码
  • 我玩过 jquery 并想出了这个:jsfiddle.net/AY7bV/3 我们离解决方案越来越近了吗?你怎么看?当您按下发送时,值将记录到控制台(浏览器中的 F12)。那时,您可能会从原生 HTML 发布到 PHP 端点切换到使用 jQuery 进行 Ajax POST。这取决于。
  • 我认为这很棒。对不起昨天,实在是太累了,无法继续。但是,我想进一步问您:我想改进我所做的事情,我如何将您的 javascript 代码行合并到:javascript 代码行 10 到我所做的事情中。此外,我观察到您的 html 中有 3 个不同的
    标签,但是,此时,我实际上计划只为 3 个不同的“组”使用 1 个
    标签,而另一个
    标签是“其他”的输入文本字段。原因是,我将来会用它来参考 dB。
猜你喜欢
  • 1970-01-01
  • 2015-04-26
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多