[英]PHP Display Multi-Select From Array Values with Pre-Selected Options User Previously Saved
我一直在嘗試讓 PHP 使用基於用戶先前保存的預選值填充 HTML 多選表單。 我在這里和其他地方找到了有用的示例,這些示例有助於從概念上理解需要做什么,但我無法讓語法正常工作。
這是相關的代碼片段
<?php
// This array will hold all options to be displayed in multi-select form
$allservices = array('amazon','facebook','twitter','reddit');
// $blockedservices is variable comes as a string from database like amazon,facebook.
// Initially the value of the array is NULL for new users or user that never submitted.
// I am exploding here as array to make it easier to work with like ['amazon','facebook']
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?
//looping through all options
foreach($allservices as $option){
//trying to see if option was preselected
if($selectedservices == $option) {
?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?
}
}
?></select>
目前,這會導致Undefined variable: option in...
更新
根據反饋,使用<?php
而不是<?
解決了未定義的錯誤問題。 但是,未顯示預先選擇的選項。 相反,即使存在預選,也會顯示所有選項而沒有預選。
我還嘗試了in_array
,結果與未識別預選選項的結果相同。
這是in_array
的另一個片段:
<?php
$allservices = array('amazon','facebook','twitter','reddit');
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?php
foreach($allservices as $option){
if(!empty($selectedservices)){
if(in_array($option,$selectedservices)){
?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}else{
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}
?></select>
更新 2
我在下面發布了一個答案,解決了所有代碼和語法問題。 發布的答案在所有瀏覽器中都按預期工作。 希望它可以幫助將來需要完成同樣事情的人。 感謝大家在此過程中提供幫助的評論。
只需替換<? 到<?php並且此錯誤將消失,因為您在 php.ini 文件中禁用了短標簽選項更新
<?php
$allservices = array('amazon','facebook','twitter','reddit');
$blockedservices ="amazon,facebook";
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?php
//looping through all options
foreach($allservices as $option){
//trying to see if option was preselected
if(in_array($option, $selectedservices)) {
?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}
?></select>
還有另一種解決方案 go 到 C/php/php.ini 文件並搜索short_open_tag
默認情況下它將是Off將其更改為short_open_tag=On
感謝大家為此提供的所有幫助。 根據所有評論和回復,原始代碼存在三個問題:
<?php
而不是<?
in_array
<option>
標記中selected
值的 HTML 語法不合適此更新的代碼完全解決了所有問題並按預期工作:
<?php
$allservices = array('amazon','facebook','twitter','reddit');
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?php
foreach($allservices as $option){
if(!empty($selectedservices)){
if(in_array($option,$selectedservices)){
?><option value="<?php echo $option;?>" selected><?php echo $option;?></option><?php
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}else{
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}
?></select>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.