2012-04-12 7 views
1

Ich habe versucht, etwas einzurichten, das ein HTML-Formular überprüft, um sicherzustellen, dass die Textfelder mindestens 1 Zeichen eingegeben haben, bevor das Formular abgeschickt wird (zur nächsten Seite).PHP: Using isset, um ein Formular mit erforderlichem Textfeld zu validieren

Das HTML-Formular befindet sich auf einer Seite und fließt zu einer zweiten Seite. Die 2. Seite aktualisiert dann eine Textdatei. Das alles funktioniert so gut wie es ist, also möchte ich es nicht ändern. Aber was ich brauche, ist der Validator.

Ich habe zahlreiche Vorschläge durchsucht und gelesen, einige Vorschläge zur Verwendung von ISSET gesehen und das folgende Skript gemacht.

aber dies funktioniert nicht (weil das Formular immer gesendet wird/es gibt keine Fehlermeldungen). Ich habe zahlreiche andere Vorschläge gemixt (basierend auf anderen Tutorials, die ich gelesen habe). Aber es scheint, dass, egal ob die Textfelder leer sind oder nicht, das Formular immer noch einreichen wird. (es gibt einen Zeitstempel auf der nächsten Seite, so kann ich sagen, was gesendet wird.

Kann mir jemand sagen, ob Isset in diesem Fall funktioniert? Wenn ja, wo ich falsch liege. Oder wenn nicht, was ich kann Verwenden Sie, um einen Validator für die Textfelder zu bekommen.Ich würde lieber PHP dafür verwenden, aber wenn ich Javascript verwenden muss, ist eine Möglichkeit

(Hinzugefügt: Ich denke, das Problem ist, dass selbst wenn die unten $ Fehlermeldungen Es wird nie angezeigt, da die Seite automatisch über den Submit-Button umgeleitet wird.Was ich brauche, ähnlich wie bei einem Event-Handler - zB, wenn Button submit angeklickt wird, auf Fehler prüfen. Wenn es Fehler gibt, drucke sie nicht, Formular absenden.Dieser Code tut das nicht.)

Page 1 Code.

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

Page 2 Code

<?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); 
?> 
+0

möglich Duplikat [php Umleitung nicht funktioniert] (http://stackoverflow.com/questions/8438022/php-redirection- nicht funktioniert) –

Antwort

0

Dies sollte es tun

<?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> 
+0

Leider nicht. Das gleiche Problem wie zuvor. Es werden keine Fehler angezeigt und das Formular wird wie zuvor gesendet. (Mit zwei leeren Feldern, in denen der Textfeldtext eingegeben wird, plus einem Zeitstempel). –

+0

Kann ich den Rest Ihres Codes sehen? – user1061995

+0

Ich habe meinen Beitrag bearbeitet - siehe den Text unter (Hinzugefügt), und der Code ist nun zwischen erster und zweiter Seite getrennt –

1

Haben Sie versucht if((is_array($_POST)) && (!empty($_POST)) {...}?

Und es ist besser zu nutzen empty($var) statt $var == '' oder !empty($var) statt $var != ''

Beispiel:

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

Und Dont't vergessen Anführungszeichen zu verwenden, wenn Sie den Schlüssel eingeben: $_POST['password'], $_POST['outline'] usw.

Und noch ein Tipp: Verwenden Sie keine Anführungszeichen in PHP, ohne dass dies notwendig ist. Es ist besser, den einzigen zu verwenden. Weil der gesamte Text im Double für Variablen analysiert wird. Nicht optimiert.

<br> ist die falsche Variante, verwenden Sie <br />. Die gleiche Situation mit <img />, <link />, <meta /> usw.

+0

Nein, ich habe es nicht müde. Wie funktioniert das? Ich brauche ganz konkrete Beispiele, da ich erst vor ein paar Tagen PHP gelernt habe. –

+0

Sollte dies auf der gleichen Seite wie das HTML-Formular verwendet werden, und das Scrpt einfach darüber eingefügt werden? Und wie wird das das Formular davon abhalten, auf die nächste Seite zu gehen, auch wenn es Fehler gibt? –

+0

Sie sollten den PHP-Code auf der Seite platzieren, die Sie im Aktionsattribut Ihres Formulars angegeben haben. – kpotehin

0

wenn isset überprüfen, ob die Post gesetzt. Du sagst es immer eingestellt, aber das ist nicht wahr.

wie kpotehin sagen Sie empty()

+0

Sorry, ich verstehe nicht, "wenn isset überprüfen, ob der Beitrag festgelegt ist. Sie sagen, es ist immer festgelegt, aber das ist nicht wahr." –

+0

Der Code oben ist auf der ersten Seite, addtopic.php genannt. Der Code oben leitet dann zu addtopic2.php um, und dann werden die Formulardaten in eine Textdatei geschrieben. –

0

Für den Anfang verwenden könnte, wenn die Daten validieren, immer clientseitige Validierung betrachten (wie in Javascript) ein nicety - Sie immer serverseitige Validierung durchführen müssen (PHP) auf den Daten.

PHP isset() ist so konzipiert, mit String-Typ Variablen verwendet werden:

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

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

PHP empty() entwickelt, um mit Arrays verwendet werden soll, und sollte nicht verwendet werden String-Typ Variablen zu überprüfen.

Quelle: Zackstronaut: Careful with PHP Empty()

+0

Entschuldigung, aber ich bin neu in der Programmierung. Ist ein Textfeld eine String-Variable? Oder sind Sie Vorschläge, die ich Isset überhaupt nicht verwenden sollte? Und schlage ich vor, dass ich etwas Ähnliches wie das obige Skript verwende, in welchem ​​Fall ich nicht sicher bin, wo ich es verwenden soll, oder in welcher Kombination mit anderen Skripten. –

+0

In dem von Ihnen angegebenen Beispiel wären 'password',' topic' und 'outline' alle' string's. In der Programmierung wird jede Sammlung von Text als eine "Zeichenfolge" betrachtet, und in stark typisierten Sprachen ist dies normalerweise ein Datentyp, der für Text verwendet wird. PHP ist dynamisch und nicht stark typisiert, so dass die meisten Variablen 'string's sind (wenn nicht, sie sind' array's oder ein 'Objekt') – Mattygabe

0

Javascript gibt schnellere Reaktion, und wenn Sie HTML5 verwenden kann es gehen noch schneller:

Für html5 Sie etwas versuchen könnte, wie:

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

Um dies auf IE zu arbeiten, verwenden Sie diese auf h EADER:

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

Wenn Sie Javascript, ziehe ich jQuery-Plugin würde vorschlagen: jquery.validation