在PHP中验证表单 - 未显示错误消息

时间:2015-02-26 11:48:27

标签: php

我是PHP的初学者,我想检查用户是否填写了名为“jmeno”的输入。相应变量的名称相同。如果未输入输入,则应通过文本“Zadejjméno!”扩展变量“chybi”。并且该文本应出现在表单上方。

我没有错误。如果输入已填满,则表单继续。如果没有,那么表格不会继续 - 这应该如何运作。但是变量“chybi”中的错误消息在变量“jmeno”为空(第二个if)的情况下不会因某些未知原因而显示。

我尝试了很多东西。奇怪的是,这样一个简单的脚本不起作用。有任何想法吗?谢谢。

    <?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;
      }
    ?>

2 个答案:

答案 0 :(得分:2)

正如@jylipaa指出你在设定它的价值之前回应了$ chybi。将您的逻辑移到$ 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;
?>

答案 1 :(得分:1)

你在$ chybi仍为空的代码开头设置$ zacatek。然后将其作为字符串处理,稍后设置$ chybi的值将不会改变字符串的内容。