1

フォームが送信される前に (次のページに)、テキスト フィールドに少なくとも 1 文字が入力されていることを確認するために、HTML フォームをチェックするものを設定しようとしています。

HTML フォームは 1 ページにあり、2 ページ目に流れます。次に、2 ページ目がテキスト ファイルを更新します。そのままではうまくいかないので、変更したくありません。しかし、必要なのはバリデータです。

多数の提案を検索して読み、ISSET を使用するためのいくつかの提案を確認し、以下のスクリプトを実行しました。

しかし、これは機能しません (フォームは常に送信されるため、エラー メッセージは表示されません)。私は他の多くの提案にうんざりしています(私が読んだ他のチュートリアルに基づいています)。しかし、テキスト フィールドが空かどうかに関係なく、フォームは常に送信されるようです。(次のページにタイムスタンプがあるので、何が送信されたかがわかります。

この場合、Isset が機能するかどうか教えてもらえますか? もしそうなら、私が間違っているところ。そうでない場合は、テキスト フィールドのバリデータを取得するために使用できるもの。これにはPHPを使用したいのですが、Javascriptを使用する必要がある場合は可能です。

(追加: 問題は、以下の $error メッセージが発生した場合でも、送信ボタンを介してページが自動的にリダイレクトされるため、表示されないことだと思います。イベント ハンドラーと同様に必要なもの - たとえば、ボタン送信の場合)がクリックされたら、エラーをチェックします。エラーがある場合は、印刷します。エラーがない場合は、フォームを送信します。このコードはそれを行いません)。

ページ 1 のコード。

<?php
if (isset($_POST['submit'])) {
    $error = '';
    if (trim($_POST['topic']) == '') {
        $error = "Please enter a topic<br>");
    }
    if (trim($_POST['outline']) == '') {
        $error = "Please enter an outline<br>";
    }
    if ($error == '') {
        Echo "There are no errors";
    } else {
        echo "$error";
    }
}
?>
<form style="" method="post" action="addtopic2.php">
    Topic:<input name="topic" id="topicbox" maxlength="100" type="text">
    Outline: <textarea input wrap="nowrap" rows="10" cols="120" name="outline">
</textarea><br><input name="submit" value="Submit" type="submit">
</form>

ページ 2 コード

 <?php
 $b = time (); 
 $c = date("g:i:s A D, F jS Y",$b);
 print "Topic and Outline Submitted at $c";

 $t = "Topic:";
 $o = "Outline:";
 $d = "Time Date:";

 $topic = $_POST['topic'];
 $outline = $_POST['outline'];

 $data = stripslashes("$t $topic | $o $outline | $d $c |\n");

 $fh = fopen("users.txt", "a");
 fwrite($fh, $data); 
 fclose($fh); 
 ?>
4

4 に答える 4

1

これはそれを行う必要があります

<?php

if(isset($_POST['submit'])){

    if($_POST['topic'] == ""){
        $error="Please enter a topic<br>"; 
    }

    if($_POST['outline'] == ""){
        $error="Please enter an outline<br>"; 
    }

    if(isset($error)){
        echo $error;
    }else{
        // Both fields have content in

    }

}


?>
<form style="" method="post" action="addtopic2.php">
Topic:<input name="topic" id="topicbox" maxlength="100" type="text">                
Outline: <textarea input wrap="nowrap" rows="10" cols="120" name="outline">
</textarea><br><input name="submit" value="Submit" type="submit">
</form>
于 2012-04-12T14:31:35.883 に答える
1

試しましたif((is_array($_POST)) && (!empty($_POST)) {...}か?

そして、empty($var)代わりに$var == ''または!empty($var)代わりに使用することをお勧めします$var != ''

例:

<?php
    function arTrim (&$item , $keys) { //trims the string and makes it safe
        if (!is_array($item))
            $item = trim(htmlspecialchars($item));
    }

    array_walk($_POST, 'arTrim'); //apply this to each element in the our POST array


    if((is_array($_POST)) && (!empty($_POST)) {
        $error='';
        if((empty($_POST['topic'])) || (empty($_POST['password'])))
            $error='Please enter a topic<br / >';
        if((empty($_POST['outline'])) || (empty($_POST['password'])))
            $error='Please enter an outline<br />'; 
        if(empty($error)) 
            echo '<a href="addtopic2.php">text of the link</a>';
        else
            echo $error;
    }
?>

キーを入力するときに引用符を使用することを忘れないでください:$_POST['password']など$_POST['outline'].

もう 1 つのアドバイス: PHP では、必要のない二重引用符を使用しないでください。シングルの方が使いやすいです。double 内のすべてのテキストが変数に対して解析されるためです。最適化されていません。

<br>は間違ったバリアント<br />です。<img />、など<link />と同じ状況。<meta />

于 2012-04-12T14:16:09.817 に答える
0

Javascript を使用すると応答が速くなり、HTML5 を使用している場合はさらに高速になります。

html5 の場合、次のようなものを試すことができます。

<input type="text" id="topicbox" name="topic" required="required" data-minlength="6" />

これを IE で機能させるには、ヘッダーでこれを使用します。

<!--[if lt IE 9]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

JavaScript を好む場合は、jquery プラグインをお勧めします: jquery.validation

于 2012-04-12T14:34:19.263 に答える
0

まず、データを検証するときは、常にクライアント側の検証 (Javascript など) を考慮してください。データに対して常にサーバー側の検証 (PHP) を実行する必要があります。

PHPisset()は、文字列型変数で使用するように設計されています。

$password = trim($_POST['password']);
$topic = trim($_POST['topic']);
$outline = trim($_POST['outline']);

if(!isset($password)) {
    //is empty
}

PHPempty()は配列で使用するように設計されており、文字列型変数のチェックには使用しないでください。

出典: Zackstronaut: PHP の Empty() に注意

于 2012-04-12T14:30:56.053 に答える