2011-01-25 10 views
0

私は本を読んでいて、例を通っていますが、残念ながらフォームを送信するとフィールドを空のままにしてもエラーは出ます。私は正誤表をチェックし、何もなかったので、私は本のフォーラムに投稿しようとしましたが、私は何の反応も得ていませんでした。未定義の変数エラーを受け取ったルーキーPHP

私は変数を最初に宣言しなければならないと思うかもしれませんが、変数が自動的に生成されるからです。

私はルーキーはPHPを学ぼうとしています。

リクエストごとに、$ requiredと$ expectedがあります。ありがとう!下の行で

$expected = array('name', 'email', 'comments'); 
$required = array('name', 'email', 'comments'); 

<?php 
foreach ($_POST as $key => $value){ 
    //assign to temporary variable and strip whitespace if not an array 
    $temp = is_array($value) ? $value : trim($value); 

    //if empty and required, add to $missing array 
    if (empty($temp) && in_array($key, $required)){ 
     $missing[] = $key; 
    } elseif(in_array($key, $expected)){ 
     //otherwise, assign to a variable of the same name as $key 
     ${$key} = $temp; 
    } 
} 

<?php 
include('./includes/title.inc.php'); 
$errors = array(); 
$missing = array(); 

//Check to see if the form has been submitted 
if (isset($_POST['send'])){ 
    //email processing script 
    $to = '[email protected]'; //use your email address 
    $subject = 'Feedback from Japan Journey'; 

    //list expecting fields 
    $expected = array('name', 'email', 'comments'); 

    //set required fields 
    $required = array('name', 'email', 'comments'); 
    include('./includes/processmail.inc.php'); 
} 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset=utf-8"> 
<title>Japan Journey<?php if (isset($title)){echo "&#8212;{$title}";} ?></title> 
<link href="styles/journey.css" rel="stylesheet" type="text/css" media="screen"> 
</head> 

<body> 
<div id="header"> 
    <h1>Japan Journey</h1> 
</div> 
<div id="wrapper"> 
    <?php include('./includes/menu.inc.php'); ?> 
    <div id="maincontent"> 
     <h2>Contact Us</h2> 
     <?php if ($missing || $errors){ ?> 
      <p class="warning">Please fix the item(s) indicated.</p> 
     <?php } ?> 
     <p>Ut enim ad minim veniam, quis nostrud exercitation consectetur adipisicing elit. Velit esse cillum dolore ullamco laboris nisi in reprehenderit in voluptate. Mollit anim id est laborum. Sunt in culpa duis aute irure dolor excepteur sint occaecat.</p> 
     <form id="feedback" method="POST" action=""> 
      <p> 
       <label for="name">Name: 
        <?php if ($missing && in_array('name', $missing)){ ?> 
         <span class="warning">Please enter your name</span> 
        <?php } ?> 
       </label> 
       <input name="name" id="name" type="text" class="formbox"<?php 
        if ($missing || $errors){ 
         echo ' value="' . htmlentities($name, ENT_COMPAT, 'UTF-8') . '" '; 
        } ?> /> 
      </p> 
      <p> 
       <label for="email">Email: 
        <?php if ($missing && in_array('email', $missing)){ ?> 
         <span class="warning">Please enter your email address</span> 
        <?php } ?> 
       </label> 
       <input name="email" id="email" type="text" class="formbox"<?php 
        if ($missing || $errors){ 
         echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" '; 
        } ?> /> 
      </p> 
      <p> 
       <label for="comments">Comments: 
        <?php if ($missing && in_array('comments', $missing)){ ?> 
         <span class="warning">Please enter your comments</span> 
        <?php } ?> 
       </label> 
       <textarea name="comments" id="comments" cols="60" rows="8"><?php 
        if ($missing || $errors){ 
         echo htmlentities($comments, ENT_COMPAT, 'UTF-8'); 
        } ?></textarea> 
      </p> 
      <p> 
       <input name="send" id="send" type="submit" value="Send message"> 
      </p> 
     </form> 

     <pre> 
      <?php if ($_POST && $missing) {print_r($_POST);} ?> 
     </pre> 
    </div> 
    <?php include('./includes/footer.inc.php'); ?> 
</div> 
</body> 
</html> 

enter image description here

+3

どの行が60行ですか? – BoltClock

+1

'$ required'と' $ expected'はどこから来たのですか? – Tomalak

+0

正確なエラーメッセージも役立ちます。 –

答えて

1

非常に単純ですが、電子メールはあなたのリクエストでは空ですので、$ _REQUEST [$ key]が空でない場合にのみ代入を実行するので、変数$ emailは決して作成されません。

さらに、信頼できない$ _REQUESTに基づいて変数を作成しないことを強く推奨します。これは重大なセキュリティホールを開く可能性があるためです。簡単な例:あなたのフォームのURLを呼び出して、何かのようなものを追加してください?subject = damn

+0

ありがとうローマ、私はそれを認識しませんでした。 Endophageのコードを使ったあなたの解決策は、私を邪魔させました! – Drewdin

+0

歓迎し、Endophageに+1 – roman

2

echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" '; 

あなたは変数$電子メールを使用していますが、あなたが実際にどこにでもその変数を作成していません。その1つのすぐ上にこの行を追加すること

試してみてください。

$email = isset($_POST['email'])?$_POST['email']:''; 

これは、if..else文の短い手の形です。電子メールが$ _POST配列に存在し、その値を使用しているかどうかをチェックします。そうでない場合、空の文字列に設定されます。いずれにしても、変数は現在「定義済み」です。

+0

$ email変数は次の行に作成されます。$ {$ key} = $ temp; – thedev

+0

はい... 'email'が$ expectedであると仮定します。 – Endophage

+0

いいえ、それはない - 上記の私のコメントを参照してください...空( '')==真 – roman

1

一部のブラウザは、値属性を持たないhtmlフィールドを送信せず、値属性が空であるため、まずポスト変数が存在するかどうかをチェックする必要があります。

if ($missing || $errors){ 
    if (isset($email)) 
     echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" '; 
} 

すべてのhtml入力フィールドにhtmlコードの値= ""属性があり、問題が解決されていることを確認することをおすすめします。

関連する問題