I have some values in a custom field:
save_post = "1200"
Or it could be, since I need a list eventually:
save_post = "1200, 1460, 1334"
Now when I load the page, I get these values
and I set them in an input field
, and I also add the current value id
from the current page
:
$allPosts = $userPosts.", ".$postid;
Where $userPosts
is the single value or the value list from the custom field, and $postid
is the current page id I want to add.
The result is:
<input type="text" value="1200, 23138, 23138, 23138">
I would always get duplicate values each time I hit the update submit button as the page refreshes itself:
<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>
How can I check if a value is already in the input and if so, don't echo it?
A way would be to have them in an Array
and then output in the input field
the unique array
, not sure if there is a shorter way.
Trying:
$allPosts = array($userPosts.", ".$postid);
$allPosts = array_unique($allPosts);
<input type="text" name="save_post_value" value="<?php foreach ($allPosts as $value) { echo $value; } ?>">
Also:
$allPosts = array($userPosts.", ".$postid);
$allPosts = array_unique($allPosts);
$allPosts = explode(", ", $allPosts);
<input type="text" name="save_post_value" value="<?php echo $allPosts; ?>"
And tried with implode()
too:
$allPosts = array($userPosts.", ".$postid);
$allPosts = array_unique($allPosts);
$allPosts = implode(", ", $allPosts);
<input type="text" name="save_post_value" value="<?php echo $allPosts; ?>"
This is very basic example, but I think that this can be useful for your needs:
<?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>';
?>
UPDATE:
It is possible to use a function. Check for empty posts is made using 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>';
?>
Then when loading form you can try with this:
...
$a = array_unique($a, SORT_STRING);
...
update_user_meta($user_id, 'save_post', getUniquePosts($a, $user_id));
Here is my code on checking duplicate values after submission:
$userPosts = '19000, 23138, 23138';
$postid = '23138';
$pattern = "/(?:^|\W)".$postid."(?:$|\W)/";
if(preg_match($pattern, $userPosts, $matches))
{
print 'There is a duplicate '.rtrim($matches[0] , ",");
}
Basically I reuse Zhorov's variables but on his approach he put it in an array, and then check if that array contains the submitted value, mine is almost the same as his approach but instead of putting it in an array; I use regex to determine is the value existed in the string.