0

I have a function that passes a variable to the "label" tag. For some reason, it just won't display the variable in the "label" tag. Here's my code:

function radioButton($id, $name, $value, $txt){
   $str = "";
   $str .= '
      <input type="radio" id=$id name=$name value=$value checked>
      <label class="custom-control-label" for=$id> <?php echo $txt; ?></label>
   ';
   return $str;
}

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
   <?php echo radioButton("MyID", "MyName", "MyValue", "Do Nothing"); ?>

   <input type="submit" name="submit" value="Submit"><br>
</form>

The radio button is display but not the variable in the "label" tag. I tried wrapping my variable with the php tag as someone on the internet suggested but it gives me a blank. https://www.codeproject.com/Questions/1119369/Pass-PHP-variable-value-into-HTML-label

Is this even possible?? To pass a variable to an html label tag in php??

Tran
  • 93
  • 1
  • 1
  • 7
  • 1
    You need to wrap your variables with quotes. – GrumpyCrouton Aug 09 '18 at 15:00
  • Possible duplicate of [What is the difference between single-quoted and double-quoted strings in PHP?](https://stackoverflow.com/questions/3446216/what-is-the-difference-between-single-quoted-and-double-quoted-strings-in-php) – IsThisJavascript Aug 09 '18 at 15:01

1 Answers1

1

There are a couple problems with your code:

  • The string needs to be declared with quotes around it, not single quotes. This allows easier string concatenation. (PHP Manual)
    • Note: If you don't want to this, you can concatenate like this: $str = '<div>' + $variable + '</div>' (PHP Manual)
  • Wrap your variables with single quotes (When string is defined with double quotes, if it's not, wrap variables with double quotes)
  • You don't need to open your PHP tags when already in PHP.

This code fixes your issues:

function radioButton($id, $name, $value, $txt){
   $str = "
      <input type='radio' id='$id' name='$name' value='$value' checked>
      <label class="custom-control-label" for='$id'>$txt</label>
   ";
   return $str;
}

Some other problems you should consider fixing:

It's generally frowned upon to have HTML markup inside of PHP, but if you must do this, it's usually better to use heredoc or nowdoc markup, because it looks cleaner, and allows you to do easy string concatenation but also allows you to use double quotes inside the string itself (without escaping them)

function radioButton($id, $name, $value, $txt){
   $str = <<<RADIOBUTTON
        <input type="radio" id="$id" name="$name" value="$value" checked>
        <label class="custom-control-label" for="$id">$txt</label>
RADIOBUTTON;
//note, the line before this can't have any whitespace before it.
   return $str;
}
GrumpyCrouton
  • 8,486
  • 7
  • 32
  • 71
  • I think I've lost half of my hair cause of this problem and it turns out to be something so simple. Thank you so much. – Tran Aug 09 '18 at 17:26
  • @Tran If an answer has helped you, be sure to click the check button to the left of the answer. This will gain you and the answerer a little bit of reputation for their troubles. – GrumpyCrouton Aug 09 '18 at 17:33