-3

我不太了解 PHP,并制作了一个简单的表单,将数据发送到 txt 文件。我的问题是,如果某些字段未填写,我无法弄清楚如何阻止表单提交。有人可以指出我正确的方向吗?

我还有一个简单的 javascript,它使未填充的textareas红色变为红色并提醒用户正确填写表单,但我不想允许提交,因为它仍然将值作为空发送到 txt 文件。

<?php                       
    if(isset($_POST['button'])) {
        $myFile = 'demo.txt';
        $titel = $_POST['filmnamn'] . ";" ;
        $betyg = $_POST['betyg'] . ";" ;
        $link = $_POST['link'] . ";" ;
        $photo = $_POST['photo'] . ";" ;
        $desc = $_POST['description'] . ";" ;
        $data = "$titel$betyg$link$photo$desc";
        $fh = fopen($myFile, 'a');
        fwrite($fh, $data);

        fclose($fh);                        
}
?>
4

3 回答 3

4

要首先阻止表单提交,您需要 HTML 和 Javascript。因此,基本上,您将一个函数链接到提交按钮,并且仅在函数返回 true 时才提交。

<form action="..." method="post" onsubmit="return ValidatePage(this);">
    <script type="text/javascript">

    function ValidatePage(form) { // the form itself is passed into the form variable. You can choose not to use it if you want.
       // validating stuff.
    }

</script>

此外,您将需要服务器端验证,以防万一有人是一个混蛋和转向 Javascript:

if ( !$title1) { echo "there has been an error" } // alternatively to the '!$title1' you can use empty($title1), which is what I use more often and may work better. Another possible alternative is to use a variable that you set to true if an error has occurred, that way the bulk of your code can be at the beginning.

else if... // repeat the if statement with else if for the remaining fields. 

else {...} // add the code to add to text file here.

这里有一个更完整的例子:http: //phpmaster.com/form-validation-with-php/如果你向下滚动。

此外,您应该知道 PHP 没有办法阻止表单首先提交,您所能做的就是让表单不会“做”任何事情。

于 2013-03-20T14:53:08.427 回答
2

您正在尝试做的事情称为服务器端验证。你应该做的是在任何事情之前测试你的变量。仅当 filemnamn 和 betyg 变量不为空时,这才会写入文件:

          <?php                     
                if(isset($_POST['button'])) {
                    if( $_POST['filmnamn'] != "" &&    $_POST['betyg'] != "") {
                    $myFile = 'demo.txt';
                    $titel = $_POST['filmnamn'] . ";" ;
                    $betyg = $_POST['betyg'] . ";" ;
                    $link = $_POST['link'] . ";" ;
                    $photo = $_POST['photo'] . ";" ;
                    $desc = $_POST['description'] . ";" ;
                    $data = "$titel$betyg$link$photo$desc";
                    $fh = fopen($myFile, 'a');
                    fwrite($fh, $data);

                    fclose($fh);   
                 }
                }
          ?>
于 2013-03-20T14:55:06.817 回答
0
if ( !$title1 || !$betyg || !$link || !$photo || !$desc) {
//form + error message if blank
} else {
                        $fh = fopen($myFile, 'a');
                        fwrite($fh, $data);
                        fclose($fh);       
}

以上将仅验证所有字段,而不是单个字段

于 2013-03-20T14:55:18.907 回答