2012-04-07 6 views
-1

J'ai un peu de problèmes avec certains index Undefined. Je me rends compte que cela pourrait être résolu en changeant le rapport d'erreur en utilisant error_reporting(E_ALL);, ou ini_set('display_errors', '1');, mais je voudrais résoudre ce problème sans avoir besoin de changer cela. Juste ici est mon bloc de code qui jette l'erreur.Note: Indéfini index: 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>'; 
       } 

La partie qui traite mon formulaire soumettre est

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

Et ma classe TForm ressemble à ceci

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']); 
    } 

} 

C'est aussi la première classe que j'ai jamais écrit si quelqu'un Je me sens capable de montrer où j'aurais pu mieux performer ou enfreindre les normes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mise à jour ~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~

@jordan Désolé, je ne comprenais pas à propos du rapport d'erreur E_ALL est ce que je suis actuellement en utilisant et sur une machine de production, cette erreur ne serait pas signalée car vous utiliseriez 0. Ma solution était d'utiliser !empty($_POST['Name']) ? $_POST['Name']:'' Si je pense correctement s'il n'est pas vide, il utilise tout ce qui est dans $_POST['Name'] et s'il est vide, il définit la valeur à ''.

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Update2 ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

en utilisant les résultats de @ Mike isset dans le domaine ne toujours à savoir

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

résultats dans lorsque le nom correspond à une variable valide, comme Frank 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. 

utilisant le vide rencontré Hod lorsque le nom correspond à une variable valide, tel que Frank Wiebenga retourne correctement

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

Quel est le message d'erreur complet, qui Undefined index? –

+0

error_reporting Valeur de développement: "E_ALL | E_STRICT" TOUJOURS dans quelle ligne est l'erreur? – ZiTAL

+0

Notez également que quelle que soit votre erreur, cette ligne n'a pas de sens: 'if (isset ($ value) == null ou vide ($ value))'. 'isset' renvoie boolean, donc il ne peut jamais être littéralement nul, bien que le vérifier avec == null sera également évalué à false ... mais au lieu de cette construction entière, vous auriez pu simplement cocher' if (empty ($ value)) ' – poncha

Répondre

0

Selon votre mise à jour, vous devez utiliser isset au lieu de empty, de sorte que vous éviter l'erreur d'index non défini:

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

Plus d'info sur isset.

- Mise à jour -

Essayez feuilletant l'affectation ternaire:

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

Merci beaucoup pour votre aide. – atrueresistance

1

Vous devez ajouter le message d'erreur complet pour vous aider à mieux, mais la forme de votre script, je remarque que la seule variable externe non déclarée sont les $_POST valeurs s'il vous plaît mettre à jour votre code ci-dessous et permet de connaître les erreurs exactes que vous avez encore.

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 "); 
    } 

Merci

0

réponse générale à la undefined index avis:

$myArray['myKey'] produira un avis d'index indéfini si myKey n'existe pas dans le tableau $myArray. Vous pouvez résoudre ce problème en vérifiant son existant avant de l'utiliser.

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