【问题标题】:Don't clear textbox value after an error has been occurred发生错误后不清除文本框值
【发布时间】:2014-12-18 12:12:22
【问题描述】:

我希望在我发送数据后,如果发生错误,它不会删除已经写入文本框或复选框的数据。我怎样才能做到这一点? 这是html代码:

<form action="adaugare-elev.php?actiune=validare" method="post">
    Date de contact <br>
    <table>
       <tr><td>Nume: <th><input type="text" name="nume" required></th></td></tr>
       <tr><td>Prenume: <th><input type="text" name="prenume" required></th></td></tr>
       <tr><td>Seria: <input type="text" style="width:25px;" name="seria" required></td> <td>Nr: <input type="text" name="nr" style="width:50px;" name="nr" required></td></tr>
       <tr><td>CNP: <th><input type="text" name="cnp" required></th></td></tr>
       <tr><td>Mail: <th><input type="text" name="mail" required></th></td></tr>
       <tr><td>Loc de munca: <th><input type="text" name="locmunca" required></th></td></tr>
    </table><br>
</form>

这是表单的php代码:

if(!isset($_GET['actiune'])) 
    $_GET['actiune'] = '';
switch($_GET['actiune'])
{
    case 'validare':
       $_SESSION['nume'] = $_POST['nume'];
       $_SESSION['prenume'] = $_POST['prenume'];
       $_SESSION['seria'] = $_POST['seria'];
       $_SESSION['nr'] = $_POST['nr'];
       $_SESSION['cnp'] = $_POST['cnp'];
       $_SESSION['mail'] = $_POST['mail'];
       $_SESSION['locmunca'] = $_POST['locmunca'];
       $inserare = "insert into `elevi` (`nume`,`prenume`,`nr`,`cnp`,`mail`,`locmunca`,) values ('".addentities($_SESSION['nume'])."','".addentities($_SESSION['prenume'])."','".addentities($_SESSION['nr'])."','".addentities($_SESSION['cnp'])."','".addentities($_SESSION['mail'])."','".addentities($_SESSION['locmunca'])."')";
}

我尝试在 if 子句后使用弹出窗口 alert (echo "&lt;script&gt;alert('Something's wrong')&lt;/script&gt;";)但它没有用..

【问题讨论】:

    标签: php forms


    【解决方案1】:

    您需要检查,是否设置了post数据,如果是,则将其设置为输入的值。例如:

    <tr><td>Nume: <th><input type="text" name="nume" value="<?php if (!empty($_POST["nume"])) { echo $_POST["nume"]; } else { echo ''; };  ?>" required></th></td></tr>
    

    【讨论】:

      【解决方案2】:

      PHP 是一种服务器端语言,为了保存您的数据,您应该将值保存到会话中以保存它们。如果您想防止用户将字段留空,请使用 javascript。

      您应该添加检查以查看是否有mysql_error() 或者您是否正在使用mysqli; mysqli_error()。如果有,请回显表单中的值。在表单中添加一个小检查以查看会话是否已填写。可以这样实现:

      if ( isset ( $_SESSION['error'] ) ) {
          // echo the form with the values in there
      }
      

      如果您想更轻松但采用肮脏的方式,请使用类似的东西;

      <tr><td>Nume: <th><input type="text" name="nume" value="<?php ( ( isset ( $_SESSION['error'] ) ) ? echo $_SESSION['nume'] : "" ) ?>" required></th></td></tr>
      

      确保在mysql_error() 返回错误时将$_SESSION['error'] 设置为某个值。

      但既然是 POST,你也可以在值中回显 $_POST["nume"]。


      要填写$_SESSION['error'],您首先需要检查您的$inserare 是否以正确的方式执行。为此,您必须针对您使用的正确 mysql 版本请求错误。

      我不知道您使用什么变量作为结果,所以将其更改为您的变量!

      $query = mysql_query($inserare);
      

      mysqli:

      if ( mysql_error ( $query ) ) {
          $_SESSION['error'] = 1;
      }
      

      mysql:

      if ( mysqli_error ( $query ) ) {
          $_SESSION['error'] = 1;
      }
      

      【讨论】:

      • 脚本有问题,我找不到它.. required 被取消,它说:Parse error: syntax error, unexpected T_ECHO
      • 哦,哎呀,试试在echo $_SESSION['nume'] 中不使用echo 并将&lt;?php 替换为&lt;?=
      • 仍然不工作..脚本正在工作,但值未显示
      • mysql_error() 返回某些东西时,您是否设置了$_SESSION['error'] = 1
      • 不是真的..我该怎么做?或者我应该把它放在哪里?
      【解决方案3】:

      或者除了 lolka_bolka 的帖子之外,还可以使用三级运算符

      <tr><td>Nume: <th><input type="text" name="nume" value="<?= !empty($_POST["nume"]) ?$_POST["nume"] : ''   ?>" required></th></td></tr>
      

      【讨论】:

      • 你应该回显这个值,否则它不会对 $_POST["nume"] 做任何事情。
      • 它会回显,因为我使用 php5 短标签:"=" (表示
      猜你喜欢
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多