Reputation: 2508
i'm just wondering how are you suppose to put a function within an echo statement?
function Catselect($abc){
global $category;
if($category == $abc){
echo 'selected ="selected"';
}
}
echo'
<select style="width: 260px;" name="category">
<option value="01" '.Catselect("01").'>Site Related</option>
<option value="02" '.Catselect("02").'>Tournaments</option>
<option value="03" '.Catselect("03").'>Articles</option>
<option value="04" '.Catselect("04").'>Interviews</option>
<option value="05" '.Catselect("05").'>General</option>
</select>
';
I'm trying to make a update page where you'll get to see what the previous category was, so let's say before that, the category is Tournaments with value 2, if you were to go to the update page, the tournament category would be automatically selected.
But what i get is just the word selected ="selected" on top of my header.
Any help ?
Upvotes: 0
Views: 188
Reputation: 21882
I'm sure someone will have a more elegant solution... but this will work.
function Catselect($abc){
global $category;
$sel1 = ''; $sel2=''; $sel3=''; $sel4=''; $sel5 = '';
switch($abc) {
case '01': $sel1='selected'; break;
case '02': $sel2='selected'; break;
case '03': $sel3='selected'; break;
default:
case '04': $sel4 = 'selected'; break;
case '05': $sel5 = 'selected'; break;
}
return $sel1; return $sel2; return $sel3; return $sel4; return $sel5;
}
echo'
<select style="width: 260px;" name="category">
<option value="01" '.Catselect("01").' '.$sel1.'>Site Related</option>
<option value="02" '.Catselect("02").' '.$sel2.'>Tournaments</option>
<option value="03" '.Catselect("03").' '.$sel3.'>Articles</option>
<option value="04" '.Catselect("04").' '.$sel4.'>Interviews</option>
<option value="05" '.Catselect("05").' '.$sel5.'>General</option>
</select>
';
Upvotes: 0
Reputation: 1
Instead of
echo 'selected="selected"';
Do
return 'selected="selected"';
That will return the string and in turn concatenate it to your output string.
You could also use ternary operators instead of using a function, like so:
echo'
<select style="width: 260px;" name="category">
<option value="01" '.($category == "01" ? 'selected="selected"' : '').'>Site Related</option>
<option value="02" '.($category == "02" ? 'selected="selected"' : '').'>Tournaments</option>
<option value="03" '.($category == "03" ? 'selected="selected"' : '').'>Articles</option>
<option value="04" '.($category == "04" ? 'selected="selected"' : '').'>Interviews</option>
<option value="05" '.($category == "05" ? 'selected="selected"' : '').'>General</option>
</select>
';
Upvotes: 0
Reputation: 6039
Rather than printing in your function, you'll want to return a value. If $abc
is the selected category then you would write $return = "selected=\"selected\""; return $return;
inside the function's if
statement.
Upvotes: 0
Reputation: 522081
You need to return
the value from the function, not echo
it inside the function. What you're doing is you're concatenating a string with the return value of a function, which is perfectly fine. Like:
'A random number: ' . rand()
. The function gets executed and whatever is returned from the function is concatenated to the string. If the function also outputs something by itself, that's output at the time the function is called, before its return value is concatenated to the string.
Upvotes: 1
Reputation: 6045
Change the echo
in the function for a return
, it should work.
To explain briefly, since you're already using the echo statement in your html to output your list items, you only need a return value in your function and the previous echo will take care to print it.
Upvotes: 1
Reputation: 10646
Instead of echo 'selected ="selected"';
try return 'selected ="selected"';
Upvotes: 2