2010-12-16 16 views
10

Ich arbeite an einem Einkaufswagen in PHP und ich bekomme diesen Fehler "Hinweis: Undefinierter Index:" an allen möglichen Orten. Der Fehler bezieht sich auf das gleiche Codierungsbit an verschiedenen Stellen. Zum Beispiel habe ich eine Kodierung, die einen Paketpreis mit den Monaten berechnet, die ein Benutzer entscheidet, zu abonnieren. Ich habe folgende Variablen, bei denen die Fehler bezeichnet:PHP-Fehler: Hinweis: Undefinierter Index:

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

Die $ Monat Variable gibt der Benutzer in einer Form, die Zahl und die $ op Variable verschiedene Pakete, deren Wert in einem vriable gespeichert sind, dass ein Benutzer wählt aus Optionsfeldern in dem Formular aus.

Ich hoffe, dass das in irgendeiner Weise klar ist.

Danke

EDIT: Sorry, dass sie gehen weg zu erwähnen vergessen, wenn der Benutzer die Daten vorlegt. Aber wenn sie 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; 
    } 
?> 
+1

Bitte poste den Rest deines Codes. Der undefinierte Indexfehler bedeutet, dass die Post-Daten für diesen Schlüssel nicht gesendet werden, die Indizes sind "Monat" und "Op". Irgendetwas setzt dies entweder auf NULL zurück oder sie werden überhaupt nicht gesendet und es gibt ein Problem mit dem Formular. – DeaconDesperado

+0

Bitte geben Sie Ihren ganzen Code ein ... damit wir ihn überprüfen können. –

+1

EDIT: Leider vergessen zu erwähnen, dass sie weggehen, wenn der Benutzer die Daten übermittelt. Aber wenn sie zum ersten Mal auf die Seite kommen, wird dieser Fehler angezeigt. Wie kann ich es loswerden, damit es nicht angezeigt wird? – PHPNOOB

Antwort

27

Sie versuchen indicies zuzugreifen innerhalb eines Arrays, die nicht gesetzt sind. Dies wirft eine Nachricht auf.

Meistens bemerken Sie es jetzt, weil Ihr Code auf einen Server verschoben wurde, auf dem php.ini error_reporting gesetzt ist, um E_NOTICE einzuschließen. Entweder unterdrücken Hinweise von error_reporting zu E_ALL & ~E_NOTICE Einstellung (nicht empfohlen), oder überprüfen, ob der Index vorhanden ist, bevor Sie versuchen, darauf zuzugreifen:

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

ich da denken konnte keine Formularelemente mit Namen ‚Monat‘ oder ‚op‘ sein . Können Sie überprüfen, ob die HTML-Quelle (der Seite, die beim Übergeben einen Fehler ergibt) in der Tat hat HTML-Elemente von den obigen Namen

0

undefined Index bedeutet, dass der Array-Schlüssel nicht festgelegt ist, tun Sie eine var_dump($_POST);die(); vor der Zeile, die den Fehler wirft und sehen, dass Sie versuchen, einen Array-Schlüssel zu erhalten, der nicht existiert.

0

Es bedeutet nur, dass das Array $ _POST in diesem Fall kein Element namens was in Ihrem Fehler nicht definiert ist. PHP gibt anstelle von WARNING of FATAL ERROR eine NOTICE aus.

Sie entweder anmelden können weniger Ereignisse über die Bearbeitung der php.ini oder mit ihr umgehen, indem zunächst überprüft, ob die Elemente in der Tat bereits initialisiert wird isset unter Verwendung von()

3

Offensichtlich $ _POST [ ‚Monat‘] nicht gesetzt ist. Vielleicht liegt ein Fehler in Ihrer HTML-Formulardefinition vor, oder etwas anderes verursacht dies. Unabhängig von der Ursache, sollten Sie immer überprüfen, ob eine Variable, bevor Sie es existiert, so

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

Ich persönlich vermeide 'is_set', da es false zurückgibt, wenn '$ _POST ['month']' auf 'null' gesetzt wurde. Wenn Sie wirklich fragen möchten, ob der Array-Schlüssel existiert, verwenden Sie 'array_key_exists'. – meagar

+2

@meagar: Es ist unwahrscheinlich, dass '$ _POST []' var ein 'NULL' enthält, wenn es von' multipart/form-data' stammt. Das wäre nur ein Problem, wenn Subfunktionen den Status über $ _POST eingeben, was viel besorgniserregender sein sollte, als zwischen Null und Unset zu unterscheiden. – mario

2

How I can get rid of it so it doesnt display it?

hier Menschen versuchen, Ihnen zu sagen, dass es unprofessionell ist (und es ist), aber in Ihrem Fall sollten Sie einfach Fügen Sie Folgendes zum Start Ihrer Anwendung hinzu:

error_reporting(E_ERROR|E_WARNING); 

Dadurch wird E_NOTICE-Berichterstattung deaktiviert. E_NOTICES sind keine Fehler, sondern Hinweise, wie der Name schon sagt. Sie sollten diese Dinge überprüfen und beweisen, dass undefinierte Variablen nicht zu Fehlern führen.Aber der allgemeine Fall ist, dass sie nur informell und für die Handhabung von Formulareingabe mit PHP völlig normal sind.

Auch beim nächsten Mal Google die Fehlermeldung zuerst.

+0

Nach seinem letzten Kommentar denke ich, dass er nicht zuerst nach Formulareinreichung sucht. Die Benachrichtigungen werden ausgelöst, da die Verarbeitung von Daten, die noch nicht gesendet wurden, stattfindet. – DeaconDesperado

+0

@DeaconDesperado: Wahrscheinlich. Das eine Snippet sieht so aus, als ob die $ _POST-Eingabevariablen einfach am Anfang des Skripts lokalisiert wären, egal was passiert. Die Verarbeitung kann durch einen anderen "if" oder nur booleschen Zustand einer dieser Variablen ausgelöst werden. ... Wir werden es nie herausfinden:} – mario

+1

und so wird es eines der großen Geheimnisse unserer Zeit bleiben ... was es nicht davon abhalten wird, wieder und wieder und wieder gepostet zu werden lol. – DeaconDesperado

13

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

Umschließen Sie den gesamten Verarbeitungscode in einer Bedingung, die überprüft, ob das Formular überhaupt gesendet wurde.

Skripte werden von oben nach unten ausgeführt, wenn prozedural programmiert wird. Sie müssen sicherstellen, dass das Programm die Verarbeitungslogik ignoriert, wenn das Formular nicht gesendet wurde. Ebenso nach der Verarbeitung, sollten Sie zu einem Erfolg Seite mit so etwas wie

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

leiten ich nicht in die Gewohnheit, Die Rauschunterdrückung Hinweise oder Fehler bekommen würde.

Bitte seien Sie nicht beleidigend, wenn ich Ihnen vorschlage, dass Sie, wenn Sie diese Probleme haben und versuchen, einen Einkaufswagen zu bauen, stattdessen eine ausgereifte E-Commerce-Lösung wie Magento oder OsCommerce verwenden. Ein Einkaufswagen ist eine Schnittstelle, die ein hohes Maß an Sicherheit erfordert, und wenn Sie mit solchen POST-Problemen zu kämpfen haben, kann ich Ihnen garantieren, dass Sie später mit Kopfschmerzen zu kämpfen haben. Es gibt viele großartige stabile Versionen, einige so einfach wie reine Objektmodelle, die zum Download verfügbar sind.

+0

hi, ja das Formular ist auf der gleichen Seite wie das Skript, so denke ich, dass das Problem ist, setzen der Fehler Reporting-Code hat den Fehler jetzt entfernt, aber ich habe Probleme mit anderen Bits von Code, so denke ich, dass ich muss wirklich alles neu strukturieren! – PHPNOOB

+0

Leider kann ich keinen handelsüblichen Warenkorb benutzen, da es Teil eines Auftrags ist, wo wir eine dynamische Website in PHP erstellen müssen, wo Benutzer Tiere usw. adoptieren können, also müssen sie es von Grund auf neu programmieren und es wurde von der So wie der Dozent die ganze Sache machen will, – PHPNOOB

+0

Ah, also dann wären das Hausaufgaben. Das ist ein heikles Wort um diese Teile lol. http://www.webforcecart.com/ – DeaconDesperado

-1

Offenbar sind die GET und/oder die POST-Variablen nicht vorhanden. einfach testen, ob "isset". (Pseudo-Code):

if(isset($_GET['action'];)) {$action = $_GET['action'];} else { RECOVER FROM ERROR CODE } 
2

Dies sind nur PHP-Hinweismeldungen, so scheint es php.ini Konfigurationen entsprechen nicht Standards vtiger, können Sie diese Meldung deaktivieren, indem Fehlerberichterstattung zu E_ALL & ~ E_NOTICE in php.ini Zum Beispiel error_reporting(E_ALL&~E_NOTICE) und dann Apache neu starten, um Änderungen zu reflektieren.

0

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

-3

Sie sollten POSTed oder GETed Vars niemals ohne ordnungsgemäße Eingabebereinigung vertrauen. In Ihrem Beispiel können Sie nicht sicher sein, ob es sich um eine Zahl handelt. Dass die erste, Sie etwas zu Anfang Ihrer Skripte hinzufügen sollen:

// Stop PHPs dangerous name handling 
function undefined_name_error($errno, $errstr, $errfile='', $errline=0, $errcontext=NULL) { 
    if (stripos($errstr, 'undefined') !== false) 
     return trigger_error("$errstr in $errfile on line $errline;\t", E_USER_ERROR); 
    else 
     return false; 
} 
set_error_handler('undefined_name_error', E_NOTICE); 

Und wenn Ihr Skript danach nicht funktioniert, müssen Sie den Code beheben.

+1

Diese Antwort fügt nichts zu vorherigen hinzu.Bitte lesen Sie die vorherige Antwort, bevor Sie antworten. Vor allem in 4 Jahren alten Fragen. –

1

Try this:

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

$op = (isset($_POST['op'])) ? $_POST['op'] : ''; 
0
<?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

Habe zwei Fehler 1) Undefiniert Index: parse_var 2) Undefinierte Variable gesendet – RandheerPratapSingh

-1

alle Fehler auszublenden, der Code für das heißt:

<?php 
     error_reporting(0); 
     @ini_set(‘display_errors’, 0); 
//THE REST OF THE CODE 
?> 
0

ich alle Variablen haben definieren, die das erste, was war ich überprüft. Ich weiß, dass es in PHP nicht benötigt wird, aber alte Gewohnheiten sterben schwer.Dann sanatized ich die Info wie folgt aus:

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 test_input ist eine weitere Funktion, die eine Trimm tut, strilashes und htmlspecialchars. Ich denke, der Input ist ziemlich gut gekeimt. Ich versuche nicht unhöflich zu sein, nur zu zeigen, was ich getan habe. Als es zu der E-Mail kam, überprüfte ich auch, ob es das richtige Format war. Ich denke, die wirkliche Antwort liegt in der Tatsache, dass einige Variablen lokal und einige global sind. Ich habe es funktioniert jetzt ohne Fehler, so, während ich gerade sehr beschäftigt bin, akzeptiere ich Abschaltfehler als meine Antwort. Mach dir keine Sorgen, ich werde es herausfinden, es ist gerade jetzt nicht lebenswichtig wichtig!

-1

Stellen Sie sicher, dass die Tags korrekt geschlossen sind. Und das schließende Tag wird nicht in einer Schleife enthalten sein. (wenn es in einer Schleifenstruktur enthält).

+0

Bitte geben Sie eine detailliertere Beschreibung Ihrer Lösung. – clemens

+0

In meinem Fall wurde das Problem durch Ersetzen des Formular-Tags gelöst; \t \t

\t \t \t \t \t \t \t \t \t <= $ row [ 'id'];?> \t <= $ row [ 'ADRs']; ?> \t <= $ row [ 'ownr'];?> \t <= $ row [ 'rmrk'];?> \t \t echo ''; \t} ?> \t
Gefällt mir dies; Optionsfeld Tag schließen nach dem Schleifen Block. –

+0

Sie sollten Ihre Antwort bearbeiten und den formatierten Quellcode hinzufügen. Es ist nicht lesbar. – clemens

Verwandte Themen