web-dev-qa-db-fra.com

PHP error: Notice: Index non défini:

Je travaille sur un panier dans PHP et il semble que cette erreur "Avis: Index indéfini:" apparaisse dans toutes sortes d'endroits. L'erreur fait référence au même bit de codage à différents endroits. Par exemple, j'ai un morceau de code qui calcule un prix forfaitaire avec les mois au cours desquels un utilisateur décide de s'abonner. J'ai les variables suivantes où les erreurs se réfèrent:

    $month = $_POST['month'];
    $op = $_POST['op'];

La variable $ month est le nombre que l'utilisateur entre dans un formulaire et la variable $ op correspond à différents packages dont la valeur est stockée dans une variable sélectionnée par l'utilisateur à partir des boutons radio du formulaire.

J'espère que c'est clair d'une certaine manière.

Je vous remercie

EDIT: Désolé, j'ai oublié de mentionner qu'ils disparaissent lorsque l'utilisateur soumet les données. Mais quand ils arrivent pour la première fois à la page, il affiche cette erreur. Comment puis-je m'en débarrasser pour qu'il ne soit pas affiché?

-

C'est le code:

<?php
    $pack_1 = 3;
    $pack_2 = 6;
    $pack_3 = 9;
    $pack_4 = 12;
    $month = $_POST['month'];
    $op = $_POST['op'];
    $action = $_GET['action'];

    if ( $op == "Adopter" ) {
       $answer = $pack_1 * $month;
    }

    if ( $op == "Defender" ) {
      $answer = $pack_2 * $month;
    }

    if ( $op == "Protector" ) {
      $answer = $pack_3 * $month;
    }

    if ( $op == "Guardian" ) {
      $answer = $pack_4 * $month;
    }

    switch($action) {   
        case "adds":
            $_SESSION['cart'][$answer][$op];
            break;
    }
?>  
10
PHPNOOB

Vous essayez d'accéder à des indicateurs d'un tableau qui ne sont pas définis. Cela soulève un avis.

Très probablement, vous le remarquez maintenant parce que votre code a été déplacé sur un serveur où php.ini a error_reporting défini pour inclure E_NOTICE. Supprimez les notifications en définissant error_reporting sur E_ALL & ~E_NOTICE (non recommandé) ou vérifiez que l'index existe avant de tenter d'y accéder:

$month = array_key_exists('month', $_POST) ? $_POST['month'] : null;
27
meagar

De toute évidence, $ _POST ['mois'] n'est pas défini. Peut-être y a-t-il une erreur dans la définition de votre formulaire HTML ou peut-être une autre cause? Quelle que soit la cause, vous devez toujours vérifier si une variable existe avant de l’utiliser, donc

if(isset($_POST['month'])) {
   $month = $_POST['month'];
} else {
   //month is not set, do something about it, raise an error, throw an exception, orwahtever
}
3
Mchl

Comment puis-je m'en débarrasser pour qu'il ne soit pas affiché?

Les gens ici essaient de vous dire que c'est peu professionnel (et c'est vrai), mais dans votre cas, vous devriez simplement ajouter ce qui suit au début de votre candidature:

 error_reporting(E_ERROR|E_WARNING);

Cela désactivera la génération de rapports E_NOTICE. Les E_NOTICES ne sont pas des erreurs, mais des notifications, comme son nom l'indique. Vous feriez mieux de vérifier cela et de prouver que des variables non définies ne génèrent pas d'erreurs. Mais le cas courant, c’est qu’ils sont simplement informels et parfaitement normaux pour gérer la saisie de formulaires avec PHP.

Aussi, la prochaine fois que Google le message d'erreur en premier.

2
mario

Ce ne sont que des messages de notification php, il semble que les configurations de php.ini ne sont pas conformes aux normes vtiger. Vous pouvez désactiver ce message en paramétrant error report to E_ALL & ~ E_NOTICE in php.ini Par exemple, error_reporting(E_ALL&~E_NOTICE), puis redémarrez Apache pour refléter les modifications.

2
mohammad

Essaye ça:

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

$op = ( isset($_POST['op']) ) ? $_POST['op'] : '';
1
helderk

J'ai défini toutes les variables qui ont été la première chose que j'ai vérifiée. Je sais que ce n'est pas nécessaire en PHP, mais les vieilles habitudes ont la vie dure. Ensuite, j'ai désinfecté l'info comme ceci:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name1"])) {
    $name1Err = " First Name is a required field.";
  } else {
      $name1 = test_input($_POST["name1"]);
    // check if name only contains letters and whitespace
      if (!preg_match("/^[a-zA-Z ]*$/",$name1)) {
      $name1Err = "Only letters and white space allowed";

bien sûr, test_input est une autre fonction qui effectue un trim, des strilashes et des htmlspecialchars. Je pense que l'entrée est assez bien assainie. Ne pas essayer d'être impoli en montrant ce que j'ai fait. En ce qui concerne l'e-mail, j'ai également vérifié si le format était correct. Je pense que la vraie réponse réside dans le fait que certaines variables sont locales et d'autres globales. Cela fonctionne sans erreur pour le moment, alors, même si je suis extrêmement occupé, je vais accepter de supprimer les erreurs comme réponse. Ne vous inquiétez pas, je comprendrai que ce n'est tout simplement pas d'une importance vitale pour le moment!

0

Assurez-vous d'avoir utilisé method = "post" dans le formulaire à partir duquel vous envoyez les données.

0
sanjay mundhra
<?php
if ($_POST['parse_var'] == "contactform"){


        $emailTitle = 'New Email From KumbhAqua';
        $yourEmail = '[email protected]';

        $emailField = $_POST['email'];
        $nameField = $_POST['name'];
        $numberField = $_POST['number'];
        $messageField = $_POST['message'];  

        $body = <<<EOD
<br><hr><br>
    Email: $emailField <br /> 
    Name:  $nameField <br />
    Message: $messageField <br />


EOD;

    $headers = "from: $emailField\r\n";
    $headers .= "Content-type: text/htmml\r\n";
    $success =  mail("$yourEmail", "$emailTitle", "$body", "$headers");

    $sent ="Thank You ! Your Message Has Been sent.";

}

?>


 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>:: KumbhAqua ::</title>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
        <link rel="stylesheet" href="style1.css" type="text/css">

</head>

<body>
    <div class="container">
        <div class="mainHeader">
            <div class="transbox">

              <p><font color="red" face="Matura MT Script Capitals" size="+5">Kumbh</font><font face="Matura MT Script Capitals" size="+5" color=                                                                           "skyblue">Aqua</font><font color="skyblue"> Solution</font></p>
              <p ><font color="skyblue">Your First Destination for Healthier Life.</font></p>
                    <nav><ul>
                        <li> <a href="KumbhAqua.html">Home</a></li>
                        <li> <a href="aboutus.html">KumbhAqua</a></li>
                        <li> <a href="services.html">Products</a></li>
                        <li  class="active"> <a href="contactus.php">ContactUs</a></li>

                    </ul></nav>
                </div>
            </div>
        </div>
                    <div class="main">
                        <div class="mainContent">
                            <h1 style="font-size:28px; letter-spacing: 16px; padding-top: 20px; text-align:center; text-transform: uppercase; color:                                    #a7a7a7"><font color="red">Kumbh</font><font color="skyblue">Aqua</font> Symbol of purity</h1>
                                <div class="contactForm">
                                    <form name="contactform" id="contactform" method="POST" action="contactus.php" >
                                        Name :<br />
                                        <input type="text" id="name" name="name" maxlength="30" size="30" value="<?php echo "nameField"; ?>" /><br />
                                         E-mail :<br />
                                        <input type="text" id="email" name="email" maxlength="50" size="50" value="<?php echo "emailField"; ?>" /><br />
                                         Phone Number :<br />
                                        <input type="text" id="number" name="number" value="<?php echo "numberField"; ?>"/><br />
                                         Message :<br />
                                        <textarea id="message" name="message" rows="10" cols="20" value="<?php echo "messageField"; ?>" >Some Text...                                        </textarea>
                                        <input type="reset" name="reset" id="reset" value="Reset">
                                        <input type="hidden" name="parse_var" id="parse_var" value="contactform" />
                                        <input type="submit" name="submit" id="submit" value="Submit"> <br />

                                        <?php  echo "$sent"; ?>

                                    </form>
                                        </div>  
                            <div class="contactFormAdd">

                                    <img src="Images/k1.JPG" width="200" height="200" title="Contactus" />
                                    <h1>KumbhAqua Solution,</h1>
                                    <strong><p>Saraswati Vihar Colony,<br />
                                    New Cantt Allahabad, 211001
                                    </p></strong>
                                    <b>DEEPAK SINGH &nbsp;&nbsp;&nbsp; RISHIRAJ SINGH<br />
                                    8687263459 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;8115120821 </b>

                            </div>
                        </div>
                    </div>

                            <footer class="mainFooter">
                            <nav>
                            <ul>
                                <li> <a href="KumbhAqua.html"> Home </a></li>
                                <li> <a href="aboutus.html"> KumbhAqua </a></li>
                                <li> <a href="services.html"> Products</a></li>
                                <li class="active"> <a href="contactus.php"> ContactUs </a></li>
                            </ul>
                                <div class="r_footer">


          Copyright &copy; 2015 <a href="#" Title="KumbhAqua">KumbhAqua.in</a> &nbsp;&nbsp;&nbsp;&nbsp; Created and Maintained By-   <a title="Randheer                                                                                                                                                                                                                             Pratap Singh "href="#">RandheerSingh</a>                                                                            </div>  
                            </nav>
                            </footer>
    </body>
</html> 

    enter code here
0

Je pense qu’il ne peut y avoir d’éléments de formulaire nommés «mois» ou «op». Pouvez-vous vérifier si le code source HTML (de la page entraînant une erreur lors de la soumission) contient bien des éléments HTML par les noms ci-dessus 

0
Chandu

index non défini signifie que la clé de tableau n'est pas définie, effectuez une var_dump($_POST);die(); avant la ligne qui renvoie l'erreur et vérifiez que vous essayez d'obtenir une clé de tableau qui n'existe pas.

0
Poelinca Dorin

cela signifie simplement que le tableau, $ _POST dans ce cas, n'a pas d'élément nommé ce qui n'est pas défini dans votre erreur. PHP émet un AVIS au lieu d'un AVERTISSEMENT d'ERREUR FATALE.

Vous pouvez soit enregistrer moins d’événements via l’édition de php.ini, soit les traiter en vérifiant d’abord si les éléments ont bien été initialisés avec isset ()

0
digitalfoo