2012-04-07 53 views
-1

我遇到一些未定义索引的问题。我意识到这可以通过使用error_reporting(E_ALL);ini_set('display_errors', '1');来更改错误报告来解决,但是想要解决此问题而无需更改。这里是我的代码块引发错误。注意:未定义的指数:PHP

// print out errors 
       if (!empty($errors)){ 
       echo '<div class="form_errors">'; 
       foreach ($errors as $key => $value) { 
        var_dump($value); 
        if (isset($value) == null or empty($value)){ 
        $value = ' A blank value '; 
        } 
        echo '<p>Please check '. $key . ' for errors.' . $value . 'is not a valid entry.</p>'; 
       } 
       echo '</div>'; 
       } 

用于处理在提交我的表单的部分是

if(isset($_POST['Submit'])){ 
    //create the fields you would want required and what fields on form to check. 
    $fields = array(
     'required' => array(
      'name' => '^[a-zA-Z\`\-\s]{1,30}$', //only letters plus apostrophe and hyphens, and up to 30 characters 
      'Address1' => '^[a-zA-Z0-9\s\.]{1,50}$' // only letters plus numbers, spaces, periods, and up to 30 characters 
     ), 
     'fields' => array( 
      'name' => $_POST['name'], 
      'Address1' => $_POST['Address1'], 
      'Address2' => $_POST['address2'] 
     ), 
     'redirect' => 'thankyou.php' 
    ); 
    $errors = TForm::validate($fields); 
    // if no errors redirect 
    if (empty($errors)){ 
     TForm::redirect($fields); 
    } 
    } 

我的TForm的类看起来像这样

class TForm { 
    //validation returns an error array when done. 
    public function validate($fields){ 
     $errors = array(); 
     foreach($fields['fields'] as $key=>$value) { 
      foreach ($fields['required'] as $req_key => $req_value) { 
       if ($key == $req_key){ 
        $req_key = '\''.$req_value.'\''; 
        if (preg_match($req_key , $value) == false) { 
         $errors[$key] = $value; 
        } 
       } 
      } 
     } 
     return $errors; 
    } 

    //redirect function 
    public function redirect($fields){ 
     header('Location: '. $fields['redirect']); 
    } 

} 

这也是我曾经写过,所以如果第一类人感觉到指出我可以在哪里表现更好或打破标准。 ~~~~~~~~~~~~~~~~~~~~更新~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~

@jordan对不起,我就不清楚了错误报告E_ALL就是我目前使用和在生产机器上这个错误不会被报告,因为您将使用0。我的解决方案是使用!empty($_POST['Name']) ? $_POST['Name']:''如果我正确地思考如果它不是空的,它将使用$_POST['Name']中的任何内容,如果它是空的,则将值设置为''

'fields' => array( 
      'Name' => !empty($_POST['Name']) ? $_POST['Name']:'', 
      'Address1' => !empty($_POST['Address1']) ? $_POST['Address1']:'', 
      'Address2' => !empty($_POST['Address2']) ? $_POST['Address2']:'' 
     ) 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UPDATE2〜 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

@mike在现场使用isset结果总是失败即

'fields' => array( 
      'Name' => !isset($_POST['Name']) ? $_POST['Name']:'', 
      'Address1' => !isset($_POST['Address1']) ? $_POST['Address1']:'', 
      'Address2' => !isset($_POST['Address2']) ? $_POST['Address2']:'' 
     ) 

结果时名称等于一个有效的变量,比如弗兰克Wiebenga

Please check Name for errors. A blank value is not a valid entry. 
Please check Address1 for errors. A blank value is not a valid entry. 

使用空见面HOD时名称等于一个有效的变量,如弗兰克Wiebenga正确返回

Please check Address1 for errors. A blank value is not a valid entry. 
+2

什么是完整的错误信息,其指数未定义? – 2012-04-07 22:04:49

+0

error_reporting开发价值:“E_ALL | E_STRICT”始终在哪一行是错误? – ZiTAL 2012-04-07 22:04:51

+0

还要注意,无论你的错误,这条线没有任何意义:'if(isset($ value)== null或empty($ value))'。 'isset'返回布尔值,所以它永远不会是空字符串,尽管用== null检查它也会计算为false ...但是您可以只检查if(empty($ value))而不是整个构造' – poncha 2012-04-07 22:12:55

回答

0

根据您的更新,你应该使用isset代替empty,使您避免不确定的指数错误:isset

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

更多信息。

- 更新 -

尝试翻转三元分配:

$name = (!isset($_POST['Name'])) ? '' : $_POST['Name']; 
+0

非常感谢您的帮助。 – atrueresistance 2012-04-08 13:53:38

1

您需要添加完整的错误信息,帮助您更好,但形成脚本我注意到,没有申报的唯一外部变量是$_POST值请在下面更新您的代码,并让我们知道您仍然存在的确切错误。

if(isset($_POST['Submit'])){ 
    //create the fields you would want required and what fields on form to check. 

    if(!isset($_POST['name']) || !isset($_POST['Address1']) || !isset($_POST['address2'])) 
    { 
     die("Empty POST NOt allowed "); 
    } 

感谢

0

一般答案undefined index通知:

$myArray['myKey']会产生一个未定义的指标通知书,如果myKey不会在$myArray数组中存在。你可以在使用之前检查它的存在来解决这个问题。

if (array_key_exists($myArray, 'myKey')) { 
    echo $myArray['myKey']; 
}