2012-04-11 4 views
1

私は非常に長い時間、このフォームが動作していない理由を理解しようとしました。あなたが何も入力しなければ、エラーメッセージを表示することさえできません。PHP XHTML厳密なフォームが機能していない

ここに誰かが問題を指摘してくれることを願っています。

フォームはXHTML Strict検証済みです。

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

?> 

答えて

2

フィールドはname ATR、ないidを使用してサーバーに送信されます。例えば、名前とIDを追加(または交換):

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

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

UPDが生成されます:追加、交換しないで。値はnameで送信されますが、<label />idのフォーム要素で接続されています。

UPD2:enctype attrを<form>から削除します。

+0

これも私の考えでしたが、現在は機能しています – 2by

+0

ああ。自分でテストしました: 'enctype' attrを削除して動作させてください。 – Botanick

+0

いや、ちょっと見つけたよ!ありがとう、あなたはこれを含めるためにあなたの質問を編集します、それから私はそれを受け入れます – 2by

0

emptyではなく、issetです。空は多くのものを空として受け入れる。

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

他のいくつかのヒント:HTMLで

  • PHPでの単一引用符を使用し、ダブル
  • は、連結演算子で、文字列のうち、引用符を保つあなたのチェックは次のようにする必要があります

例:

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

あるいは、少なくとも

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

そして

は、あなたの質問に答えるために。 PHPは name属性を検索し、 id属性は検索しません。

+0

Wouter、あなたは私に例を教えてくれますか? – 2by

+0

そして、私は '!isset($ _ POST ['foo])'を代わりに使用していますか? – 2by

+0

はい、できます。しかし、私はそれが良くないと思う。これでブール値( 'true' /' false')と値を比較しています。私の意見では、あなたはリンゴとオレンジを比較しています。 –

関連する問題