Solved

Parse array then run a if function on result

Posted on 2016-08-25
5
47 Views
Last Modified: 2016-09-04
I have an array of items (cheese) in a checkbox format like so

array(
'type' => 'checkbox',
"holder" => "div",
"class" => "",
"heading" => __("Choose your cheese topping", 'rbm_menu_item'),
'param_name' => 'cheesebox',
'value' => array( 'Cheddar'=>'Cheddar', 'Gouda'=>' Gouda', 'Bleu'=>' Bleu' ),
"description" => __("<br /><hr class='gduo'>", 'rbm_menu_item')
	),

Open in new window


      the values of the array are displayed on a page (in a hidden div) using the heredoc declaration with an if to check if the checkbox has been used - if the return is empty the div does not show - if one of the checkboxes is "checked" then it does.

///Cheese selections
if (!empty($cheesebox)) {
          $output .= <<< OUTPUT
            <br />
            <div class="sides">Comes with: <p>{$cheesebox}</p></div>
            <br />
OUTPUT4;
        }

Open in new window


What I need to do is pull any one of the values in the array and if its in the $cheesebox the do something.

Ive tried using an ifelse like this

if ( ('$cheesebox') == "Cheddar" ){
               echo "Your topping is Cheddar";
            }
              	elseif ( ('$cheesebox') == "Gouda" ){
            {
               echo "Your topping is Gouda";
            }
              	elseif ( ('$cheesebox') == "Bleu" ){
            {
               echo "Your topping is Bleu";
            } 

Open in new window

however this does not work - I'm sure I have it wrong somewhere along the line or does the heredoc function only allow for one?

 if so is there a way to accomplish this?
0
Comment
Question by:Daryl Isaacs
  • 3
5 Comments
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 41770963
In the second code snippet ("cheese selections") the HEREDOC tags do not match.  There may be other things in play as well, but that jumps out at me.

Here's some background information on how we handle checkboxes.
https://www.experts-exchange.com/articles/5450/Common-Sense-Examples-Using-Checkboxes-with-HTML-JavaScript-and-PHP.html

Also, it looks as if you may be using some kind of CMS or framework.  If so, please tell us what it is, thanks.
0
 
LVL 54

Expert Comment

by:Julian Hansen
ID: 41770983
if ( ('$cheesebox') == "Cheddar" ){

Open in new window


In PHP there are three types of strings
- Single quoted - string gets dumped as is - no parsing of string - single quotes escaped with a \ double quotes allowed as is.
- Double quoted - strings are parsed and variables (optionally enclosed in {})  are replaced with their values. Double quotes escaped with a \ single quotes allowed as is
- HEREDOC - tag enclosed string - allows mixing of single and double quotes without escaping and does variable substitution.

In your example ('$cheesebox') is interpreted as a string - not its value - take the single quotes from around the variable.

You are not showing us where $cheesebox is being set - so we cannot see if your use of the if statement is correct or not.

Alternative to the if is the switch statement

switch ($cheesebox) {
    case 'Cheddar' : 
// Handle Cheddar
        break;
    case 'Gouda' :
// Handle Gouda
    break;
    case 'Bleu':
// Handle Bleu
    break;
    default: 
// Handle default here (when none of the above match)
     break;
}

Open in new window

0
 
LVL 109

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 41770989
There are many ways of handling HTML form inputs.  Here are some examples.  Try a few combinations to see how it works.  Note that if you make a "default value" be zero, (one of the "falsy" values in PHP) you can test with empty().  It will be true if the input is zero, NULL, FALSE, omitted, etc.
https://iconoun.com/demo/temp_daryl.php
<?php // demo/temp_daryl.php
/**
 * https://www.experts-exchange.com/questions/28965722/Parse-array-then-run-a-if-function-on-result.html
 */
error_reporting(E_ALL);

$cheeses = [ 'Cheddar', 'Gouda', 'Bleu' ];

// PREPARE A SELECT CONTROL FOR CHOOSING A CHEESE
$select = NULL;
$select .= '<select name="select">' . PHP_EOL;
$select .= '<option selected value="0">Choose a cheese</option>' . PHP_EOL;
foreach ($cheeses as $c)
{
    $select .= '<option value="' . $c . '">' . $c . '</option>' . PHP_EOL;
}
$select .= '</select>' . PHP_EOL;

// PREPARE A CHECKBOX FOR CHOOSING ONE OR MORE CHEESES (MAY BE UNDEFINED IN THE REQUEST IF EMPTY)
$checkbox = NULL;
foreach ($cheeses as $c)
{
    $checkbox .= '<input type="checkbox" name="check[]" value="' . $c . '" />' . $c . '<br>' . PHP_EOL;
}

// PREPARE A RADIO PUSHBUTTON FOR CHOOSING A CHEESE
$radio = NULL;
$radio .= '<input name="pushbutton" value="0" type="hidden" />' . PHP_EOL;
foreach ($cheeses as $c)
{
    $radio .= '<input type="radio" name="pushbutton" value="' . $c . '" />' . $c . '<br>' . PHP_EOL;
}


// IF THE FORM HAS BEEN SUBMITTED SHOW THE REQUEST VARIABLES
if (!empty($_POST))
{
    echo PHP_EOL . "SELECT:<br>" . PHP_EOL;
    print_r($_POST['select']);
    echo '<br><br>' . PHP_EOL;

    echo PHP_EOL . "CHECKBOX:<br>" . PHP_EOL;
    print_r($_POST['check']);
    echo '<br><br>' . PHP_EOL;

    echo PHP_EOL . "RADIO:<br>" . PHP_EOL;
    print_r($_POST['pushbutton']);
    echo '<br><br>' . PHP_EOL;
}


// CREATE THE FORM
$form = <<<EOD
<form method="post">
$select
<br><br>
$checkbox
<br><br>
$radio
<br><br>
<input type="submit" />
</form>
EOD;

echo $form;

Open in new window

0
 

Author Comment

by:Daryl Isaacs
ID: 41772406
Both of these examples work - they display the echo associated to the value name - this is based on what both Ray and Julian wrote.... I'm leaning toward the first as I can then add other divs around that particular echo.

if ($cheesebox == "Cheddar") {
echo "Your topping is Cheddar";
} else if ($cheesebox == "Gouda") {
echo "Your topping is Gouda";
}  else if ($cheesebox == "Bleu") {
echo "Your topping is Bleu";
}


if (in_array($cheesebox, ['Cheddar', 'Gouda', 'Bleu'])) {
echo "Your side order is {$cheesebox}";
}

The single and double quotes from what I understood was (in my mind) looking for a literal value in '$cheesebox' then comparing it to  whatever that was in == ""

I guess I got that round wrong

I am still on the same thing now - even though the echo works - its outside of the heredoc OUTPUT4 and throws the echo to the top of the page. Can this work inside the OUTPUT4?

I've never worked with the heredoc class before, so if this seems rudimentary, please be lenient with me...
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 41772502
Here are some good learning resources for those of us new to PHP.
https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html

Here is how quote marks work in PHP.
https://www.experts-exchange.com/articles/12241/Quotation-Marks-in-PHP.html

The "OUTPUT4" thing is a problem, as was noted above.  PHP Heredoc is described here.
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

In particular, the starting and ending tags must match for heredoc to work.

Let's try this one again: It looks as if you may be using some kind of CMS or framework.  If so, please tell us what it is, thanks.
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

816 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now