如果已经在输入值中,如何回显值?

时间:2018-06-11 06:01:01

标签: php

我在自定义字段中有一些值:

save_post = "1200" 

或者它可能是,因为我最终需要一个列表:

save_post = "1200, 1460, 1334"

现在,当我加载页面时,我会收到这些values并将其设置为input field,我还会添加current value id中的current page

$allPosts = $userPosts.", ".$postid;

$userPosts是自定义字段中的单个值或值列表,$postid是我要添加的当前页面ID。

结果是:

<input type="text" value="1200, 23138, 23138, 23138">

每次点击更新提交按钮时,我总是会获得重复值,因为页面会自动刷新:

<form id="saveId" action="" method="POST" class="" autocomplete="off">
  <input type="text" name="save_post_value" value="<?php echo $userPosts.", ".$postid;  ?>"> 
  <button  type="submit" class="save_post btn btn-danger">Update</button>
</form>

如何检查输入中是否已存在值,如果是,请不要回显它?

一种方法是将它们放在Array中,然后在input field unique array中输出,不确定是否有更短的方式。

尝试:

$allPosts = array($userPosts.", ".$postid); 
$allPosts = array_unique($allPosts); 

<input type="text" name="save_post_value" value="<?php foreach ($allPosts as $value) { echo $value; } ?>">

此外:

$allPosts = array($userPosts.", ".$postid); 
$allPosts = array_unique($allPosts); 
$allPosts = explode(", ", $allPosts);
<input type="text" name="save_post_value" value="<?php echo $allPosts; ?>"

并尝试使用implode()

$allPosts = array($userPosts.", ".$postid); 
$allPosts = array_unique($allPosts); 
$allPosts = implode(", ", $allPosts);
<input type="text" name="save_post_value" value="<?php echo $allPosts; ?>"

2 个答案:

答案 0 :(得分:1)

这是一个非常基本的例子,但我认为这对您的需求很有用:

<?php
// Input data
$userPosts = '19000, 23138, 23138';
$postid = '23138';

// With array
$userPosts = str_replace(' ', '', $userPosts);
if (empty($userPosts)) {
    $a = array();
} else {
    $a = explode(',', $userPosts);
}   
$a = array_unique($a, SORT_STRING);
if (in_array($postid, $a) === false) {
    $a[] = $postid;
}
$userPosts = implode(', ', $a);
echo 'Result using array: '.$userPosts.'</br>';
?> 

<强>更新

可以使用功能。使用empty()检查空帖子。

<?php
function getUniquePosts($xposts, $xid) {
    $xposts = str_replace(' ', '', $xposts);
    if (empty($xposts)) {
        $a = array();
    } else {
        $a = explode(',', $xposts);
    }   
    $a = array_unique($a, SORT_STRING);
    if (in_array($xid, $a) === false) {
        $a[] = $xid;
    }
    $xposts = implode(', ', $a);
    $xposts = ltrim($xposts, ",");

    return $xposts;
}

$userPosts = '19000, 23138, 23138';
$postId = '23138';
echo getUniquePosts($userPosts, $postId).'</br>';
?> 

然后在加载表单时,您可以尝试:

...
$a = array_unique($a, SORT_STRING); 
...
update_user_meta($user_id, 'save_post', getUniquePosts($a, $user_id));

答案 1 :(得分:0)

以下是我提交后检查重复值的代码:

$userPosts = '19000, 23138, 23138';
$postid = '23138';
$pattern = "/(?:^|\W)".$postid."(?:$|\W)/";

if(preg_match($pattern, $userPosts, $matches))
{
    print 'There is a duplicate '.rtrim($matches[0] , ",");
}

基本上我重用Zhorov的变量但是在他的方法中他将它放在一个数组中,然后检查该数组是否包含提交的值,我的方法几乎与他的方法相同,而不是将它放在一个数组中;我使用正则表达式来确定字符串中是否存在该值。