Check empty array before check checkbox - php

I use an array to get a checkbox list and the code below to get active options flagging respective checkbox (checked):
echo '<tr><td><input type="checkbox" name="user_company[]" value="' . $company_id . '"' . (in_array($company_id, $bar) ? ' checked="checked"' : '') . '"/><label><b>' . $company_nome ."</b>, ". $company_das . " / " . $company_state . "</b><label></td></tr>";
All seems to work correctly, but if I have an Empty Array, I see this Warning:
Warning: in_array() expects parameter 2 to be array, null given in
How can I check if my array is empty before hitting this problem?

Use PHP's empty() function:
if(!empty($arr)) {
echo '<tr><td><input type="checkbox" name="user_company[]" value="' . $company_id . '"' . (in_array($company_id, $bar) ? ' checked="checked"' : '') . '"/><label><b>' . $company_nome ."</b>, ". $company_das . " / " . $company_state . "</b><label></td></tr>";
}

Related

Changing radiolist to dropdown

I have stuck ;/ I have activeradiolist and works ok, but I need to create another list bud with dropdowns item's
my code with $model for activeradioList
echo Html::activeradioList($add, 'type_contact',
$items, ['item' => function ($index, $label, $name, $checked, $value) {
$return = '<div style="max-height:178px!important;" class="radio col-xs-12 col-lg-6"><input type="radio" name="' . $name . '" value="' . $value . '" tabindex="3" id="' . $name . $index . '" ' . ($checked ? 'checked' : '') . '>';
$return .= '<label style="padding-top:0!important" for="' . $name . $index . '">' . $label . '</label></div>';
if ($checked && $index === 1) {
$return .= '<script>$(document).ready(function(){$(\'#ref-form\').slideDown()});</script>';
}
return $return;
}]
); ?>
Now i try to convert this to dropdownList like ->
echo CHtml::dropDownList($add, 'type_contact',
$items, ['item' => function ($index, $label, $name, $checked, $value) {
$return = '<div style="max-height:178px!important;" class="radio col-xs-12 col-lg-6"><input type="radio" name="' . $name . '" value="' . $value . '" tabindex="3" id="' . $name . $index . '" ' . ($checked ? 'checked' : '') . '>';
$return .= '<label style="padding-top:0!important" for="' . $name . $index . '">' . $label . '</label></div>';
if ($checked && $index === 1) {
$return .= '<script>$(document).ready(function(){$(\'#ref-form\').slideDown()});</script>';
}
return $return;
}]
); ?>
and have htmlspecialchars() expects parameter 1 to be string, object given
1) The CHtml is class from old Yii 1.x framework. Yii2 doesn't use the C prefix for its class names.
2) You are pairing the form field with your model instance so you should use the activeDropDownList() method instead of dropDownList().
3) In your radio button options you have item callback that is used to generate the html code for radio button. The drop down list doesn't have anything like that so you should remove it from its options. You can completly omit the fourth parameter because the item callback is the only option there.
So the code for drop down list should look like this:
echo Html::activeDropDownList($add, 'type_contact', $items);

php: edit selected "select" on button click

I have a select (dropdown) box. On each button click, I'd like it to load previously saved position. My code is:
<select name="myVariables" style="width:150px">
<?php
foreach ( $variables as $var ) {
echo "<option value=\"" . $var . "\"". $var . " </option>";}
?>
</select>
I have a variable $previouslySelected, and every time the button is clicked, this variable can change. I'd like to also change the currently selected option in the select box to the same value. I've tried with:
echo "<option value=\"" . $var . "\" <?=$previouslySelected==$var ? ' selected=\"selected\"' : '';?\>>". $var . " </option>";}
but this doesn't seem to work.
Also, I've tried this but it only works the first time.
How do you submit the form. With GET or POST?
With GET, than you must take the submitted value in this way:
$previouslySelected = isset($_GET['myVariables']) ? $_GET['myVariables'] : '';
Otherwise with POST:
$previouslySelected = isset($_POST['myVariables']) ? $_POST['myVariables'] : '';
In PHP 7 you can also do:
$previouslySelected = $_POST['myVariables'] ?? '';
EDIT: Write your echo more readable.
$selected = ($previouslySelected === $var) ? ' selected="selected"' : '';
echo '<option value="' . $var . '" ' . $selected . '>' . $var . '</option>';

php echo info database using foreach change 0 to no

I have a database with some information. Using an for each statement im getting all the records from the database.
$row2['test'] is in the database 0 or 1 with 0 being no and 1 being yes. My foreach statement works as it shows the records but i want to change the 0 in the test record into no and 1 into yes. I have tryed with an if statement but shamefully it doesn't seem to work.
foreach( $result as $row2 )
{ echo '<table ><tr><td>' . $row2['name'] . '</td></tr>' . '<tr><td>' . $row2['test'] . '</td></tr>' .'<tr><td>' . $row2['comments'] . '</td></tr> </table><p>'; } ?></p>
Use empty function with the ternary operator to test the value with (check the manual for a full write up of what empty means, 0 is one of the values).
foreach( $result as $row2 ) {
$value .= !empty($row2['test']) ? 'yes' : 'no';
echo '<table ><tr><td>' . $row2['name'] . '</td></tr>' . '<tr><td>' . $value . '</td></tr>' .'<tr><td>' . $row2['comments'] . '</td></tr> </table><p>';
} ?></p>
Use ternary operator, for example:
'<tr><td>' . ($row2['test']? 'yes' : 'no') . '</td></tr>'
Full code:
foreach( $result as $row2 )
{
echo '<table ><tr><td>' . $row2['name'] . '</td></tr>'
. '<tr><td>' . ($row2['test']? 'yes' : 'no') . '</td></tr>'
. '<tr><td>' . $row2['comments']
. '</td></tr> </table><p>';
}

Keeping selected dropdown value

I have this drop-down and user can select multiple options ,how can i keep selected value on form after submit button, if error comes on form
<select onclick="document.getElementById('cand_qual4').style.display='none'; " name="oca[]" id="oca" multiple="multiple">
<?php
$odrop = array('B COM','M COM','BBA','MBA','LLB','LLM','CPA','CIMA','MS FINANCE','DISA','CISA','OTHER');
foreach ($odrop as $odrop1)
{
echo '<option value="' . $odrop1 . '"' . (isset($_POST['oca']) && in_array($odrop1,$_POST['oca']) ? ' selected' : '') . '>' . $odrop1 . '</option>';
}
?>
</select>
instead of
$_POST['oca'] == $odrop1
condition as $_POST['oca'] would be an array, try
in_array($odrop1,$_POST['oca'])
TRY THIS-
echo '<option value="' . $odrop1 . '"' . (is_array($_POST['oca']) && in_array($odrop1,$_POST['oca'] ) ? ' selected' : '') . '>' . $odrop1 . '</option>';

variable inside variable in a PHP function?

I have the following function.
The problem is that the $lang variable will vary depending on the $this->setts['site_lang']; . The actual problem is the following:
$condition_details['description_$lang']
(which isn't working). How do I get this to display
$condition_details['description_us']
or
$condition_details['description_fr']
depending on the $lang setting?
And here is the full function:
function shipped_drop_down($box_name = 'item_shipped_via', $selected = null, $form_refresh = null)
{
(string) $display_output = null;
$lang = $this->setts['site_lang'];
$sql_select_conditions = $this->query("SELECT id, description_".$lang." FROM " . DB_PREFIX . "advanced_shipping_carriers ORDER BY theorder,description_".$lang." ASC");
$display_output = '<select name="' . $box_name . '" ' . (($form_refresh) ? 'onChange = "submit_form(' . $form_refresh . ', \'\')"' : '') . ' style="font-size:10px; width: 120px;"> ';
while ($condition_details = $this->fetch_array($sql_select_conditions))
{
$display_output .= '<option value="' . $condition_details['id'] . '" ' . (($condition_details['id'] == $selected) ? 'selected' : '') . '>' . $condition_details['description_$lang'] . '</option> ';
}
$display_output .= '</select> ';
return $display_output;
}
You could do
$condition_details['description_'.$lang]
or use "
$condition_details["description_$lang"]
You could store your lang settings in arrays like this :
$lang['fr']['condition_details']
so you could use $lang[$selected_lang]['condition_details']
Use "double quotes" instead of 'single quotes'. That way the $lang will be parsed and replaced with the relevant value.
Use double quotes like so:
$condition_details["description_$lang"]

Categories