Ankündigung

Einklappen
Keine Ankündigung bisher.

Registrierung Fehlgeschlagen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Registrierung Fehlgeschlagen

    Guten Abend.

    Ich versuche seit längerem ein Forum zu erstellen.
    Login und Hauptaufbau ist schon vorhanden.
    Nun wollte ich eine Registration für neue Benutzer einfügen, doch es kommt immer wider diese Meldung:

    Notice: Undefined index: username in C:\xampp\htdocs\homepage\eintragen.php on line 7

    Notice: Undefined index: passwort in C:\xampp\htdocs\homepage\eintragen.php on line 8

    Notice: Undefined index: passwort2 in C:\xampp\htdocs\homepage\eintragen.php on line 9




    :--

    $username = $_POST["username"];
    $passwort = $_POST["passwort"];
    $passwort2 = $_POST["passwort2"];



    Was ich nicht verstehe ab und zu geht es, ohne Fehlermeldung und dann aber auch wider rum nicht..

    An was könnte das liegen?


    Danke im voraus...


  • #2
    Bitte den relevanten Code posten, nicht nur drei Zeilen. Offensichtlich werden keine Werte für die abgefragten Schlüssel übertragen - das ist aber nur ein Symptom des Fehlers, nicht dessen Ursache. Ganz allgemein solltest du dir überlegen ob du nicht eine konkrete Fehlerbehandlung einbauen willst die reagiert wenn $_POST-Werte fehlen.

    Kommentar


    • #3
      http://pastebin.com/kvmC3Pck

      Kommentar


      • #4
        Die Werte sind dann gesetzt, wenn die Seite die Antwort auf einen POST-Request (grob: Absenden eines Formulars) ist, in dem die Felder enthalten sind.

        Wenn du die Seite einfach so aufrufst (etwa durch Eintippen des URL in den Browser), sind die Werte nicht gesetzt und PHP beschwert sich, wenn es entsprechend eingestellt ist (was gut ist).

        Du kannst mit isset oder array_key_exists prüfen, ob die Felder in $_POST existieren. Ein weiteres Stichwort dazu ist Validierung.

        Hintergründe zum Beispiel auch hier: http://php-de.github.io/jumpto/affenformular/

        Kommentar


        • #5
          @Gorgi: Naja in dem Skript ist in dem Sinne kein Fehler - es wird einfach nur nicht geprüft ob der Zugriff auf die $_POST-Werte überhaupt möglich sind.

          Aber gut, dass du es gepostet hast, denn:

          1. Die mysql-Extension ist veraltet. Nutze besser mysqli oder PDO.
          2. Passwörter nicht nur einfach mit MD5 hashen. PHP hat dafür inzwischen eine eigene Funktion: http://php.net/manual/de/function.password-hash.php
          3. Wenn du ein Forum, also im Grunde eine ganze Anwendung entwickelst, dann sollte auch eine Art gesamtheitlicher Ansatz verfolgt werden: Möchtest du wirklich in jedem Skript die Verbindung zur Datenbank mit einbauen? Wäre es nicht besser das in z. B. ein eigenes Skript auszulagern, dass du dann nur immer includen musst? Also ganz primitiv zur Verdeutlichung:

          db.php:
          PHP-Code:
          <?php
          $verbindung 
          mysql_connect("localhost""root" "")
          or die(
          "Verbindung zur Datenbank konnte nicht hergestellt werden");
           
          mysql_select_db("homepage") or die ("Datenbank konnte nicht ausgewählt werden");
          register.php:
          PHP-Code:
          <?php

          include __DIR__'/db.php';
           
          $username $_POST["username"];
          $passwort $_POST["passwort"];
          $passwort2 $_POST["passwort2"];
           
          ...

          Kommentar


          • #6
            Monolith ich bin noch ein Anfänger wie ich was mache, weis ich selbst noch nicht so genau..
            Ich bin aber bereit das ganze zu versehen.
            All das was ich bis lang gemacht habe, ist auch Tuts. und Foren Beiträge...

            Ich google auch viel doch wenn man nicht weis nach was man direkt suchen soll, ist man recht aufgeschmissen.

            Ich währe dankbar für eine Einfache Antwort. (für Anfänger )

            Kommentar


            • #7
              Einfache Antwort?
              PHP-Code:
              if (isset($_POST['username']) and isset($_POST['passwort']) and isset($_POST['passwort2'])) {
                  
              $username $_POST['username'];
                  
              $passwort $_POST['passwort'];
                  
              $passwort2 $_POST['passwort2'];
              } else {
                  die(
              'Bitte alle Felder ausfüllen!');

              Einfache Antwort. Minimaler Lerneffekt. Schlechte UX. Denn: Keine Überprüfung was genau fehlt, dementsprechend kein exaktes Feedback, und schon gar keine Übernahme der vorhandenen Werte in das neu geladene Fom. Und die als Methode zur Fehlermeldung ist auch arg dürftig.

              Kommentar


              • #8
                da ich bis lang nur 2 Skripts habe die eine Verbindung herstellen, habe ich noch nicht über die 3. Möglichkeit nachgedacht. Doch bisher ist das ganze auf Include eingebaut. daher habe ich auch 100derte. von Seiten... ..


                Ich danke für die Antworten bis lang.

                Doch ich Verstehe immer noch nicht genau warum die Fehlermeldung kommt und wie ich Sie Beheben kann.. Dass ich das ganze über PHP machen kann.. gut oke.. Doch da ich gerade das ganze mit Mysql-abfragen mache, möchte ich das ganze auch gern verstehen...

                Kommentar


                • #9
                  $_POST ist ein Array in dem PHP einfach freundlicher Weise die per request übermittelten Werte des Forms einträgt, wobei die Namen der Elemente zu Schlüsseln werden und ihre Werte den Schlüssel zugeordnet werden (stimmt so nicht ganz aber fürs Verständnis hoffentlich eine sinnvolle Vereinfachung).

                  Also wenn du schreibst:
                  PHP-Code:
                  $username $_POST["username"]; 
                  ist das ein ganz normaler Zugriff auf einen Array. Du sagst: PHP, nimm den Wert, der unter dem Schlüssel "username" im Array $_POST abgelegt ist und kopiere ihn in die Variable $username. Das macht PHP jetzt auch ganz stumpf. Wenn aber ein Formularwert nicht übermittelt wurde, kann PHP das nicht und es gibt eine Warnung.

                  Warum es diese Werte nicht gibt können wir dir auch nicht sagen, wie wissen nämlich gar nicht, was vor Aufruf dieses Skripts geschieht. Vor allem kennen wir das Formular nicht das diese Werte eigentlich senden soll.

                  Kommentar


                  • #10
                    Das hier ist das Formular :

                    http://pastebin.com/gqYi6V9q

                    Kommentar


                    • #11
                      Ich kann keinen Fehler feststellen. Kannst du eine Anleitung geben, um ihn zu reproduzieren? Im Kern klappt die Sache aber definitiv. Natürlich darf eintragen.php nie ohne passenden POST-Request aufgerufen werden - also wenn du einfach so in deinem Browser eintragen.php aufrufst, klappt's natürlich nicht.

                      Kommentar


                      • #12
                        Zitat von Gorgi Beitrag anzeigen
                        Das hier ist das Formular :

                        http://pastebin.com/gqYi6V9q
                        Hi Gorgi,

                        dein Formular selber ist nicht das Problem. Was man versucht, dir zu erklären, ist, dass das Array $_POST leer ist,

                        bevor ein Formular gesendet wird. Was du hier http://pastebin.com/kvmC3Pck also versuchst, wäre also gleich bedeutend mit . . .

                        PHP-Code:
                        //Ein leeres Array erzeugen
                        $mein_array = array();
                        // Einen Wert über einen nicht vorhandenen Index abrufen
                        $wert $mein_array["index"]; // Ergibt die gleiche Fehlermeldung, wie bei dir 
                        Prüfe also in deinem Script als erstes, ob ein Formular gepostet wurde. Beispielsweise die Servervariable REQUEST_METHOD abfragen:

                        PHP-Code:
                        <?php 
                        if($_SERVER["REQUEST_METHOD"] != "POST"){ 
                         echo 
                        'Es wurde kein Formular gesendet. <a href="meine_formular_seite.php"> Zum Formular </a>';
                         
                        // Damit nachfolgender Code nicht mehr ausgeführt wird, Script beenden
                         
                        exit;
                        }
                        $verbindung mysql_connect("localhost""root" "")  or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
                        mysql_select_db("homepage") or die ("Datenbank konnte nicht ausgewählt werden"); 

                        /*
                        * Vor diesen Zuweisungen prüfen . . .
                        ** 1. ob die $_POST_Variablen überhaupt einen Wert enthalten
                        ** 2. ob die $_POST_Variablen einem gültigem Datentyp entsprechen, den dein Script bzw. deine Tabelle erwartet
                        */

                        $username $_POST["username"]; 
                        $passwort $_POST["passwort"]; 
                        $passwort2 $_POST["passwort2"]; 

                         . . .
                         . . . 

                        ?>
                        Falls du das anhand der Kommentare mittlerweile selber rausgefunden hast, betrachte diesen Beitrag als gegenstandslos.

                        Gruß
                        Günni

                        Kommentar

                        Lädt...
                        X