2012-04-11 22 views
1

Ich habe schon sehr lange versucht, herauszufinden, warum dieses Formular nicht funktioniert. Es wird nicht einmal die Fehlermeldung angezeigt, wenn Sie nichts eingeben.PHP XHTML Strenges Formular funktioniert nicht

Ich hoffe, dass jemand hier auf das Problem hinweisen kann.

Das Formular ist XHTML Strict validiert.

<?php 

$err = array(); 

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

/* Do the validation */ 
$uploader_name = $_POST['uploader_name']; 
$uploader_mail = $_POST['uploader_mail']; 

if (empty($uploader_name)) { 
$err[] = "Name is empty."; 
} 

if (empty($uploader_mail)) { 
$err[] = "Mail is empty."; 
} 

/* If everything is ok, proceed */ 
if (empty($err)) { 

//Do MySQL insert 

} 

} 


echo "<h1>Submit</h1>"; 

if(!empty($err)) { 
echo "<span style='color:red;'>"; 
foreach ($err as $e) {echo "* $e<br />"; } 
echo "</span><br />"; 
} 

echo " 
<div> 
<form action='' method='post' enctype='text/plain'> 
<fieldset> 
<legend>Your details</legend> 
<label for='uploader_name'>Your name/nickname</label><br /> 
<input type='text' id='uploader_name' value='$uploader_name' /><br /><br /> 

<label for='uploader_mail'>Your mail (will not be visible)</label><br /> 
<input type='text' id='uploader_mail' value='$uploader_mail' /><br /><br /> 
</fieldset> 

<p><input type='submit' id='submit' value='Submit' /></p> 
</form> 
</div> 
"; 

?> 

Antwort

2

Felder werden an den Server gesendet name atr verwenden, nicht id. Hinzufügen (oder ersetzen) ids mit Namen, z.B .:

<input type='submit' name='submit' value='Submit' /> 

$_POST['submit'] == 'Submit'

UPD produzieren: add, nicht ersetzen. Die Werte werden über name gesendet, aber auf der anderen Seite <label /> sind mit Formularelementen unter Verwendung id 's verbunden.

UPD2: Und entfernen enctype attr von <form>.

+0

Das war mein Gedanke auch, aber es funktioniert jetzt – 2by

+0

Oh. Getestet von mir selbst: Entfernen Sie einfach 'enctype' attr, damit es funktioniert. – Botanick

+0

Ja, ich habe gerade entdeckt! Danke, werden Sie Ihre Frage bearbeiten, um dies zu umfassen, dann werde ich es akzeptieren – 2by

0

Ich empfehle, nicht empty, aber isset zu verwenden. Leer akzeptiert viele Dinge als leer. Ihr Scheck sollte wie folgt sein:

if (isset($_POST['foo']) || $_POST['foo'] !== '') { 
    $errors[] = 'You need to fill in the foo input'; 
} 

Einige andere Tipps:

  • Verwendung einfache Anführungszeichen in PHP und Doppel in HTML
  • Anführungszeichen halten aus dem String, mit dem Verkettungsoperator

Ein Beispiel:

<?php 
if (isset($_POST['form_send'])) { 
    /* all validation stuff */ 
} 
?> 
<form action="post"> 
    <!-- ... --> 
    <input type="text" value="<?php echo $uploader_mail ?>"><br /> 
    <!-- ... --> 
</form> 

Oder

<?php 
$name = 'World'; 
// not... 
$hello = "Hello World"; 
// ...but 
$hello = 'Hello '.$name; 

Und zumindest, Ihre Frage zu beantworten. PHP sucht nach dem name Attribut, nicht dem id Attribut.

+0

Wouter, können Sie mir ein Beispiel geben? – 2by

+0

Und kann ich nicht einfach '! Isset ($ _ POST ['foo])' stattdessen verwenden? – 2by

+0

Ja, Sie können. Aber ich denke, es ist nicht gut. Jetzt vergleichen Sie einen booleschen Wert ('true' /' false') mit einem Wert. Meiner Meinung nach vergleichen Sie Äpfel und Orangen. –