nickname display none
nickname display none

Reputation: 47

Form validating in PHP - error message not displayed

I am beginner in PHP and I want to check whether user has filled the input named "jmeno". Name of the corresponding variable is the same. If the input is not entered, then the variable "chybi" should be expanded by text "Zadej jméno!" and that text should appear above the form.

I am getting no errors. If the input is filled, then the form proceeds. If not, then the form doesn't proceed - that works how it's supposed to. But the error message in variable "chybi" doesn't display for some unknown reason in case that the variable "jmeno" is empty (second if).

I have tried many things. It's strange that such a simple script doesn't work. Any ideas? Thank you.

    <?php
      $chybi = '';
      $zacatek = '
        <p>some long text</p>
        <form action="index.php" method="post" class="akce">
          <p>' .$chybi.
          '<input type="text" name="jmeno" placeholder="Zadej své jméno," /></p>
          <p>
            vyber pohlaví<br />
            <input type="radio" name="pohlavi" value="žena" /> žena<br />
            <input type="radio" name="pohlavi" value="muž" />  muž
          </p>
          <p>a pokud se nebojíš, <input type="submit" value="vstup!" /></p>
        </form>
      ';
      if ( isset($_POST['jmeno']) && isset($_POST['pohlavi']) ) {
        $jmeno = $_POST['jmeno'];
        $pohlavi = $_POST['pohlavi'];
        if ( empty($jmeno) ) {
          $chybi .= 'Zadej jméno!<br />';
          echo $zacatek;
        }
        else {
          echo "Jmenuješ se $jmeno a jsi $pohlavi.";
        }          
      }
      else {
        echo $zacatek;
      }
    ?>

Upvotes: 0

Views: 48

Answers (2)

TMH
TMH

Reputation: 6246

As @jylipaa pointed out you're echoing $chybi before setting it's value. Move your logic above the $zacatek varaible.

<?php
  $chybi = '';
  if ( isset($_POST['jmeno']) && isset($_POST['pohlavi']) ) {
    $jmeno = $_POST['jmeno'];
    $pohlavi = $_POST['pohlavi'];
    if ( empty($jmeno) ) {
      $chybi .= 'Zadej jméno!<br />';
    }
    else {
      echo "Jmenuješ se $jmeno a jsi $pohlavi.";
    }          
  }
  $zacatek = '
    <p>some long text</p>
    <form action="index.php" method="post" class="akce">
      <p>' .$chybi.
      '<input type="text" name="jmeno" placeholder="Zadej své jméno," /></p>
      <p>
        vyber pohlaví<br />
        <input type="radio" name="pohlavi" value="žena" /> žena<br />
        <input type="radio" name="pohlavi" value="muž" />  muž
      </p>
      <p>a pokud se nebojíš, <input type="submit" value="vstup!" /></p>
    </form>
  ';

echo $zacatek;
?>

Upvotes: 2

jylipaa
jylipaa

Reputation: 111

you are setting $zacatek in the start of code where $chybi is still empty. It is then handled as a string and setting the value of $chybi later on will not change the content of a string afterwards.

Upvotes: 1

Related Questions