我正在为打印机公司编写工作表应用程序代码。
我的表格泛滥成灾。
对于每个单个输入字段,我必须检查是否设置了$_POST
变量,以及是否,因此回显该值。 (如果出现某些错误,例如在验证错误之后,用户不应重新键入整个表单)
示例代码:
if(isset($_POST['time'])&&!empty($_POST['time'])){echo $_POST['time'];}
我必须实施这一百次。 所以我试图弄清楚某种功能,使其变得简单易读。
这样的事情:
function if_post_echo($key, $default = "") {
if(isset($_POST[$key])&&!empty($_POST[$key])){
echo $_POST[$key];
}else{
echo $default;
}
}
但这不会奏效。
我试图传递$_POST
$key
变量,如下所示:
if_post_echo($_POST['time'])
function if_request_echo($key, $default = "") {
if(isset($key)&&!empty($key)){
echo $key;
}else{
echo $default;
}
}
我也试过这个:
function if_request_echo($key, $default = null) {
return isset($_REQUEST[$key])&&!empty($_REQUEST[$key]) ? $_REQUEST[$key] : $default;
}
没有任何合理的结果。
如何伪造一个查找必要$_POST
变量并返回它的函数,或者如果它未设置则返回一个空字符串。
有没有办法为$_GET
和$_REQUEST
执行此操作? (或者只是复制?)
答案 0 :(得分:7)
您的PHP测试功能:
<?php
function test_req($key, $default = '') {
if(isset($_REQUEST[$key]) and
!empty($_REQUEST[$key])) {
return $_REQUEST[$key];
} else {
return $default;
}
}
?>
然后在表单HTML:
<input name="my_field" value="<?php echo htmlentities(test_req('my_field')); ?>" />
$_REQUEST
(已链接)是PHP super global,其中包含POST($_POST
)和GET($_GET
)请求参数。
如果您只想捕获POST请求参数,那么它将是:
<?php
function test_req($key, $default = '') {
if(isset($_POST[$key]) and
!empty($_POST[$key])) {
return $_POST[$key];
} else {
return $default;
}
}
?>
例如。
答案 1 :(得分:6)
如果你有大量的字段,我建议你也使用一组默认值:
$defaults = array(
"time" => "default",
"name" => "enter name here",
"text..." => "...",
);
$fields = array_filter($_POST) + $defaults;
然后, $fields
将包含一个包含POST数据或预设默认值的表单值列表。没有,请看?
array_filter man page特别是:如果没有提供回调,则将删除所有输入等于FALSE的条目。在某种程度上解释了这个解决方案背后的工作。
答案 2 :(得分:2)
这应该有效:
function if_post_echo($key, $default = ''){
if(isset($_POST[$key]) AND !empty($_POST[$key]){
echo $_POST[$key];
}
echo $default;
}
如果您遇到问题,我建议您尝试var_dump($_POST)
或print_r($_POST)
查看是否所有内容都已正确发布。
答案 3 :(得分:2)
请注意,这是多余的:
isset($_POST[$key]) && !empty($_POST[$key])
未设置的变量将始终为“空”,因此isset()
来电中隐含empty()
。
对于你的逻辑,你可以通过以下方式获得相同的结果:
!empty($_POST[$key])
答案 4 :(得分:1)
你的第一个功能对我很有效。
为什么你认为它不起作用?
然而,更好的变体是
function _post($key, $default = "") {
if(isset($_POST[$key])){
return $_POST[$key];
}else{
return $default;
}
}
使用它:
echo $_post($key); // You could define the message as a second parameter.
答案 5 :(得分:0)
function requireArray( $array, $required ) {
foreach( $required as $k=>$v ) {
if ( !isset($array[$k]) || empty($array[$k]) )
return false;
}
return true;
}
#call like this:
requireArray($_POST, array('time', 'username', 'foo'));
如果您想具体了解:
function missingFrom( $array, $required ) {
$r = array();
foreach( $required as $k ) {
if ( !isset($array[$k]) || empty($array[$k]) )
$r[] = $k;
}
return $r;
}
像以前的功能一样被调用。
答案 6 :(得分:0)
你的方法似乎在这里工作正常:
function if_post_echo($key, $default = "") {
if(isset($_POST[$key])&&!empty($_POST[$key])){
echo $_POST[$key];
}else{
echo $default;
}
}
我使用名称test进行了简单输入,表单方法为POST
并使用echo if_post_echo('test');
。
它在页面上发布了文本框中的内容。
答案 7 :(得分:0)
此功能在PHP 7中作为“Null Coalesce Operator”使用两个问号添加:
echo ($_GET['message'] ?? 'default-if-not-set');