wake-up-neo.com

PHP Fehler: Hinweis: Undefinierter Index:

Ich arbeite an einem Einkaufswagen in PHP und erhalte anscheinend die Fehlermeldung "Notice: Undefined index:" an allen möglichen Stellen. Der Fehler bezieht sich auf das ähnliche Codierungsbit an verschiedenen Stellen. Zum Beispiel habe ich eine Codierung, die einen Paketpreis mit den Monaten berechnet, für die ein Benutzer ein Abonnement beschließt. Ich habe die folgenden Variablen, auf die sich der Fehler bezieht:

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

Die Variable $ month ist die Anzahl, die der Benutzer in einem Formular eingibt, und die Variable $ op ist verschiedene Pakete, deren Wert in einer Variablen gespeichert wird, die ein Benutzer über die Optionsfelder im Formular auswählt.

Ich hoffe das ist irgendwie klar.

Danke dir

BEARBEITEN: Es wurde leider vergessen zu erwähnen, dass sie verschwinden, wenn der Benutzer die Daten übermittelt. Wenn sie jedoch zum ersten Mal auf die Seite kommen, wird dieser Fehler angezeigt. Wie kann ich es loswerden, damit es nicht angezeigt wird?

-

Dies ist der 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

Sie versuchen, auf nicht gesetzte Angaben innerhalb eines Arrays zuzugreifen. Dies führt zu einer Bekanntmachung.

Wahrscheinlich bemerken Sie es höchstwahrscheinlich jetzt, weil Ihr Code auf einen Server verschoben wurde, auf dem php.ini error_reporting so eingestellt ist, dass er E_NOTICE enthält. Unterdrücken Sie Hinweise, indem Sie error_reporting auf E_ALL & ~E_NOTICE setzen (nicht empfohlen), oder überprüfen Sie, ob der Index vorhanden ist, bevor Sie versuchen, darauf zuzugreifen:

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

Setzen Sie den Formularprozessor in dasselbe Skript wie das Formular? Wenn ja, versucht es zu verarbeiten, bevor die Post-Werte festgelegt werden (alles wird ausgeführt).

Wickeln Sie den gesamten Verarbeitungscode in eine Bedingung, die überprüft, ob das Formular überhaupt gesendet wurde. 

if(isset($_POST) && array_key_exists('name_of_your_submit_input',$_POST)){
//process form!
}else{
//show form, don't process yet!  You can break out of php here and render your form
}

Skripte werden bei der prozeduralen Programmierung von oben nach unten ausgeführt. Sie müssen sicherstellen, dass das Programm die Verarbeitungslogik ignoriert, wenn das Formular nicht gesendet wurde. Ebenso sollten Sie nach der Verarbeitung auf eine Erfolgsseite mit etwas weiterleiten

header('Location:http://www.yourdomainhere.com/formsuccess.php');

Ich würde mich nicht gewöhnen, Hinweise oder Fehler zu unterdrücken.

Nehmen Sie sich bitte nichts vor, wenn ich vorschlage, wenn Sie diese Probleme haben und versuchen, einen Einkaufswagen zu erstellen, Sie stattdessen eine ausgereifte E-Commerce-Lösung wie Magento oder OsCommerce verwenden. Ein Einkaufswagen ist eine Schnittstelle, die ein hohes Maß an Sicherheit erfordert. Wenn Sie mit diesen POST - Problemen zu kämpfen haben, kann ich Ihnen garantieren, dass Sie später mit Kopfschmerzen belastet werden. Es gibt viele großartige stabile Versionen, von denen einige so einfach wie einfache Objektmodelle sind, die zum Download zur Verfügung stehen.

13
DeaconDesperado

Offensichtlich ist $ _POST ['Monat'] nicht gesetzt. Möglicherweise liegt ein Fehler in Ihrer HTML-Formulardefinition vor oder möglicherweise verursacht dies ein anderer Fehler. Was auch immer die Ursache ist, Sie sollten immer prüfen, ob eine Variable existiert, bevor Sie sie verwenden

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

Wie kann ich es loswerden, damit es nicht angezeigt wird?

Die Leute hier versuchen Ihnen zu sagen, dass es unprofessionell ist (und das ist es), aber in Ihrem Fall sollten Sie dem Start Ihrer Bewerbung Folgendes hinzufügen:

 error_reporting(E_ERROR|E_WARNING);

Dadurch wird die E_NOTICE-Berichterstellung deaktiviert. E_NOTICES sind keine Fehler, sondern Hinweise, wie der Name sagt. Sie sollten dieses Zeug besser überprüfen und nachweisen, dass undefinierte Variablen nicht zu Fehlern führen. Der übliche Fall ist jedoch, dass sie nur informell sind und für die Verarbeitung von Formulareingaben mit PHP völlig normal sind.

Auch beim nächsten Mal Google die Fehlermeldung zuerst.

2
mario

Dies sind nur PHP-Hinweisnachrichten. Php.ini-Konfigurationen entsprechen offenbar nicht den vtiger-Standards. Sie können diese Nachricht deaktivieren, indem Sie Fehlerberichterstattung to E_ALL & ~ E_NOTICE in php.ini einstellen Zum Beispiel error_reporting(E_ALL&~E_NOTICE) und dann Apache neu starten , um Änderungen anzuzeigen.

2
mohammad

Versuche dies:

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

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

Ich habe alle Variablen definiert, die ich als erstes überprüft habe. Ich weiß, dass es in PHP nicht erforderlich ist, aber alte Gewohnheiten werden schwer. Dann habe ich die Informationen wie folgt saniert:

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

natürlich ist test_input eine weitere Funktion, die trimmen, strilashes und htmlspecialchars ausführt. Ich denke, die Eingabe ist ziemlich gut gemacht. Ich will nicht unhöflich sein, nur zeigen, was ich getan habe. Bei der E-Mail habe ich auch nach dem richtigen Format gesucht. Ich denke, die wirkliche Antwort liegt in der Tatsache, dass einige Variablen lokal und andere global sind. Ich habe es jetzt ohne Fehler gemacht, also bin ich momentan sehr beschäftigt, ich akzeptiere das Abschalten von Fehlern als meine Antwort. Machen Sie sich keine Sorgen, ich finde es gerade jetzt nicht so wichtig!

0

Stellen Sie sicher, dass Sie method = "post" in dem Formular verwendet haben, aus dem Sie Daten senden.

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

Ich denke, es könnte keine Formularelemente mit dem Namen 'Monat' oder 'Op' geben. Können Sie überprüfen, ob die HTML-Quelle (der Seite, die beim Senden einen Fehler ergibt) tatsächlich HTML-Elemente mit den oben genannten Namen enthält? 

0
Chandu

undefinierter Index bedeutet, dass der Array-Schlüssel nicht festgelegt ist. Führen Sie vor der Zeile, in der der Fehler ausgegeben wird, ein var_dump($_POST);die(); aus und stellen Sie fest, dass Sie versuchen, einen nicht vorhandenen Array-Schlüssel zu erhalten.

0
Poelinca Dorin

es bedeutet nur, dass das Array, in diesem Fall $ _POST, kein Element enthält, das in Ihrem Fehler undefiniert ist. PHP gibt eine ANMERKUNG anstelle einer WARNUNG DES FATALEN FEHLERS aus.

Sie können entweder weniger Ereignisse über die Bearbeitung der php.ini protokollieren oder mit dieser umgehen, indem Sie zunächst prüfen, ob die Elemente tatsächlich bereits initialisiert wurden.

0
digitalfoo