{<?PHP}Notice:Undefined Index

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • {<?PHP}Notice:Undefined Index

      Hi,

      ja bin momentan am lernen und mach eine kleine Auswahl
      zum Hintergrundfarbe ändern.

      Folgendes Script:

      PHP-Quellcode

      1. <?php
      2. $color = htmlspecialchars($_POST['color']);
      3. if (isset($color))
      4. {
      5. switch($color)
      6. {
      7. case '1':
      8. $farbe = '#FFE500';
      9. break;
      10. case '2':
      11. $farbe = '#00FF00';
      12. break;
      13. default:
      14. $farbe = '#FFFFFF';
      15. break;
      16. }
      17. }
      18. ?>
      19. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      20. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
      21. <head>
      22. <title>First</title>
      23. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
      24. <meta name="description" content="" />
      25. <meta name="author" content="" />
      26. <meta name="keywords" content="" />
      27. <meta name="generator" content="Webocton - Scriptly (www.scriptly.de)" />
      28. <link href="styles/style.css" type="text/css" rel="stylesheet" />
      29. <link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />
      30. </head>
      31. <body bgcolor="<?php echo $farbe; ?>">
      32. <div id="website">
      33. <div id="header"> <h1>Website</h1></div>
      34. <div id="main">
      35. <div id="left">
      36. <form action="index.php" method="post" >
      37. Hintergrundfarbe:
      38. <select name="color">
      39. <option value="1">Gelb</option>
      40. <option value="2">Gr&uuml;n</option>
      41. <option value="" selected="selected">Keine Auswahl</option> </select>
      42. <input type="submit" value="Farbe wechseln" />
      43. </form>
      44. </div>
      45. <div id="right"></div>
      46. <div id="footer">
      47. © - by Lalox3, All rights reserved.</div>
      48. </div>
      49. </div>
      50. </body>
      51. </html>
      Alles anzeigen


      Dann kommt:
      Notice: Undefined index: color in C:\xampp\htdocs\new\index.php on line 2


      Sollte natürlich nicht sein, aber es nerft.... richtig!
      Wie bekommt man diese Undefinierten Variablen hin das es keine fehlermeldungen Spuckt.???

      Line 2:

      PHP-Quellcode

      1. $color = htmlspecialchars($_POST['color']);



      Greez and ty
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Es ist ein leichter Fehler, eben eine Notiz, welche dadurch hervorgerufen wird,
      weil er versucht die $color in Zeile 2
      zu interpretieren. Was aber nicht machbar ist,
      da hier $_POST['color'] noch gar nicht gesetzt ist.

      Daher solltest du am Anfang deine $color-Variable mit einem Leerstring definieren.
      //Virtual
    • PHP-Quellcode

      1. <?php
      2. $color = '';
      3. $farbe = '';
      4. if (isset( $_POST['color']))
      5. {
      6. $color = htmlspecialchars($_POST['color']);
      7. switch($color)
      8. {
      9. case '1':
      10. $farbe = '#FFE500';
      11. break;
      12. case '2':
      13. $farbe = '#00FF00';
      14. break;
      15. default:
      16. $farbe = '#FFFFFF';
      17. break;
      18. }
      19. }
      20. ?>
      21. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      22. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
      23. <head>
      24. <title>First</title>
      25. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
      26. <meta name="description" content="" />
      27. <meta name="author" content="" />
      28. <meta name="keywords" content="" />
      29. <meta name="generator" content="Webocton - Scriptly (www.scriptly.de)" />
      30. <link href="styles/style.css" type="text/css" rel="stylesheet" />
      31. <link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />
      32. </head>
      33. <body bgcolor="<?php echo $farbe; ?>">
      34. <div id="website">
      35. <div id="header"> <h1>Website</h1></div>
      36. <div id="main">
      37. <div id="left">
      38. <form action="lallo.php" method="post" >
      39. Hintergrundfarbe:
      40. <select name="color">
      41. <option value="1">Gelb</option>
      42. <option value="2">Gr&uuml;n</option>
      43. <option value="" selected="selected">Keine Auswahl</option> </select>
      44. <input type="submit" value="Farbe wechseln" />
      45. </form>
      46. </div>
      47. <div id="right"></div>
      48. <div id="footer">
      49. © - by Lalox3, All rights reserved.</div>
      50. </div>
      51. </div>
      52. </body>
      53. </html>
      Alles anzeigen


      Erklärung: Zu erst solltest du beide Variablen $color und $farbe deklarieren.
      Dann solltest du nicht abfragen, ob $color, sondern ob $_POST['color'] gesetzt ist, was der Fall ist, wenn du auf Farbe wechseln drückst.

      Hier wird der Wert an $color erst übergeben und die Farbe kann ruhig gewechselt werden.

      Auch dann erhält $farbe einen Wert, zuvor war diese Variable undeklariert, daher $farbe = '' am Anfang.

      Mit freundlichen Grüßen
      Virtual
    • Versuche dir im Allgemeinen immer zu überlegen:
      Welche Variablen habe ich in Nutzung und welche Variablen haben in welchem Zustand welchen Wert?

      Dein Beispiel

      PHP-Quellcode

      1. Zustand 1: Seite wird erst aufgerufen. //Zustand 1 trifft immer zu
      2. -> $color = ''; //Wären diese Variablen nicht gesetzt, ergibt es immer eine Notiz.
      3. //(sofern error_reporting nicht anders gesetzt.)
      4. -> $farbe = '';
      5. Zustand 2: Formular wird gesendet. //Zustand trifft erst nach Interaktion durch den User zu.
      6. -> $color = $_POST['color'];
      7. -> $farbe = HEX-Wert;
      Alles anzeigen
    • Es kommt auf das Gleiche dabei heraus, ja.
      Schön, dass dir ein Beitrag dazu eingefallen ist.

      Aus Gewohnheit, auch später in der objektorientierten Variante,
      deklariere ich meine Variablen mit "null" [sofern kein Wert benötigt wird.].
      =>

      PHP-Quellcode

      1. public $variable = null;
    • Natürlich könnte man es für PHP noch einfacher gestalten, wenn man typensicherheit gewährleistet:

      PHP-Quellcode

      1. public $variable = (string) null;


      Ich zitiere hier an der Stelle noch etwas:


      Zumindest wäre das für mich persönlich die beste Möglichkeit schnell feststellen zu können als was die Variablen initialisiert wurden. Seperate Initialisierung ist aber meist unnötig, da 90% der genutzten Variablen entweder von vornherein auf Default werte zurückfallen oder die Logik der Software interpretiert bestimmte Zustände der Variable als Default-Wert. Auch hat die Existenzprüfung meist mehr Logik-Vorteile als vorinitialisierte Variablen.
    • Typensicherheit ist in PHP meiner Meinung nach weniger von Bedeutung,
      da der Typ sich jederzeit beliebig ändern kann.
      In anderen Sprachen, wie (zumindest glaube ich es) C++ oder Java, ist es doch schon sinnvoller,
      doch ist dies ein anderes Thema.
      Wie gesagt, es ist reine Gewohnheit.
      Ich habe es gerne einheitlicher.
      Es sieht für mich komisch aus, wenn 1-2 Variablen mit Werten deklariert sind
      und andere "nackt" dastehen. ;)

      Damit auch jeder weiß, was du mit deinem ersten Beitrag gemeint hast,
      habe ich hierzu ein Beispiel ohne die Switch-Methode.

      PHP-Quellcode

      1. <?php
      2. $color = '';
      3. if(isset($_POST['color']))
      4. {
      5. $color = $_POST['color'];
      6. }
      7. ?>
      8. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      9. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
      10. <head>
      11. <title>First</title>
      12. </head>
      13. <body bgcolor="<?php echo $color; ?>">
      14. <form action="background.php" method="post" >
      15. Hintergrundfarbe:
      16. <select name="color">
      17. <option value="#FF0000">Gelb</option>
      18. <option value="#00FF00">Gr&uuml;n</option>
      19. <option value="" selected="selected">Keine Auswahl</option>
      20. </select>
      21. <input type="submit" value="Farbe wechseln" />
      22. </form>
      23. </body>
      24. </html>
      Alles anzeigen
    • Ich habe nicht behauptet, es hätte keine Bedeutung, sondern eine eher geringe Bedeutung.
      Sofern du nicht vorher den Typ bestimmst (, welcher auch durch Funktionen vorgegeben werden kann ),
      wird auch keine "Notice" oder sogar ein "Fatal Error" ausgeworfen.
      Ich arbeite stetig mit "E_ALL und STRICT" ;).

      Doch wir kommen vom Thema ab.
      Nicht, dass wir beide noch als Spammer gezählt werden :).

      //Virtual
    • Euch ist hoffentlich bewusst das es so

      PHP-Quellcode

      1. $color = '';
      2. if(isset($_POST['color']))
      3. {
      4. $color = $_POST['color'];
      5. }


      überhaupt keinen sinn hat oder? Wenn er es so anwendet dann ist bei jedem neuen Seitenaufruf die standard Farbe ausgewählt. Weil wie jeder weiß werden Scripte von oben nach unten Interpretiert, und dort steht nunmal immer wieder

      PHP-Quellcode

      1. $color = '';


      Er müsste es am besten in eine Session packen damit er es dauerhaft hat.

      Also folgendermaßen

      PHP-Quellcode

      1. session_start();
      2. if(!isset($_SESSION['color'] == "")
      3. {
      4. $_SESSION['color'] = `Standardfarbe`;
      5. }
      6. else
      7. {
      8. $_SESSION['color'] = $_POST['color'];
      9. }
      10. <!-- Hier dann das HTML -->
      Alles anzeigen


      Gruß
      Ulle
    • Ulle,
      die Übung ist hier nicht gewesen, dass es auch über weiteres hinweg gespeichert wird,
      sondern, dass es überhaupt funktioniert.

      Wir wollen nicht direkt am Anfang mit der Tür ins Haus fallen.
      Selbstverständlich könnte man noch einiges erweitern, wenn du schon diesen Einwand hast.
      Ob nun Cookie,Session, oder gar in der Datenbank speichern.
      Alles wäre möglich, doch zu viel und es würde das Anliegen des Threaderstellers übersteigen :).

      Wenn du schon soweit gehst, könnten wir direkt mit Sicherheit und anderen Erweiterungen fortfahren,
      bezüglich einer Sitzungsverwaltung, was jedoch zu weit führen würde.
      Daher doch einfach nur dem einfachen Wunsch von Lalox3 nachkommen ;).

      //Virtual
    • Alles kein Ding,
      immerhin hast du ihn wahrscheinlich auf den Gedanken gebracht,
      als nächstes mit $_SESSION zu üben, worauf er eventuell erst viel später gestoßen wäre.

      Somit brauchst du dich keineswegs entschuldigen. Es ist ein Hinweis auf die nächsten Kapitel gewesen. :D

      // Virtual