PHP-Greenhorn: MySQL-DB per PHP füllen

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

  • PHP-Greenhorn: MySQL-DB per PHP füllen

    Hallo lieber PHP-Profi

    Ich habe soeben begonnen, erste Schritte mit MySQL und PHP zu machen und komme bereits nicht mehr weiter:

    Ausgangslage: In eine MySQL-DB möchte ich per PHP Datensätze eingeben können (Eingabemaske). Die DB ist erstellt, die Verbindung per PHP scheint auch zu klappen, dennoch kriege ich Fehlermeldungen, die ich nicht einzuordnen wisse:

    Notice: Undefined index: vorname in D:\Programme\Apache Group\Apache2\htdocs\1.php on line 52,53,54,55
    Die Fehlermeldungen (eigentlich sind es deren vier, mit je einer der vier angegebenen Zeilen) beziehen sich auf die Definition der Variabeln:

    <?
    $vorname = $HTTP_POST_VARS["vorname"];
    $nachname = $HTTP_POST_VARS["nachname"];
    $shoptyp_nr = $HTTP_POST_VARS["shoptyp_nr"];
    $jahrgang = $HTTP_POST_VARS["jahrgang"];
    ?>
    Ich nehme an, es ist ein peinlicher Anfängerfehler, aber ich komm nicht drauf. Bitte hilf mir.

    Vielen Dank
    m.


    Das Skript:

    PHP-Code:

    <html>
    <head>
    <title>Shopkeeper</title>

    </head>

    <body>

    <form name="form1" method="post" action="">
      <p>Vorname: 
        <input name="vorname" type="text" id="vorname">
        <br>
        Nachname: 
        <input name="nachname" type="text" id="nachname">
      </p>
      <p>
        <label> 
        <input type="radio" name="shoptyp_nr" value="1">
        Textil</label>
        <br>
        <label> 
        <input type="radio" name="shoptyp_nr" value="2">
        Schmuck</label>
        <br>
        <label> 
        <input type="radio" name="shoptyp_nr" value="3">
        Gewürze</label>
        <br>
        <br>
        Jahrgang: 
        <input name="jahrgang" type="text" id="jahrgang">
      </p>
      <p>
        <input type="submit" name="Submit" value="Abschicken">
      </p>
    </form>

    <?
    $db_id = mysql_connect("localhost");
    if ($db_id == FALSE)
        {
        die("Verbindungsaufbau gescheitert");
        }
        else
        {
        printf("Verbindung zu ID %d",$db_id);
        }
    mysql_select_db("bazaar");  
    ?>
    <?
      $vorname = $HTTP_POST_VARS["vorname"];
      $nachname = $HTTP_POST_VARS["nachname"];
      $shoptyp_nr = $HTTP_POST_VARS["shoptyp_nr"];
      $jahrgang = $HTTP_POST_VARS["jahrgang"];
    ?>

    <? 
    $eintrag = "INSERT INTO shopkeeper (Vorname, Nachname, Shoptyp_Nr, Jahrgang) VALUES ('$vorname', '$nachname','$shoptyp_nr','$jahrgang')";
    ?>

    <?
      $eintragen = mysql_query($eintrag);
    ?>

    </body>
    </html>

  • #2
    Ich nehme an, es ist ein peinlicher Anfängerfehler, aber ich komm nicht drauf. Bitte hilf mir.
    das mit dem undefinid index ist kein Anfängerfehler machen ncoh viele.

    Wie du den Fehler wegkreigst:
    PHP-Code:
    <?
    if(isset($HTTP_POST_VARS["vorname"]))  $vorname = $HTTP_POST_VARS["vorname"];
    else $vorname = "";
    ?>
    Du solltest zuerst überprüfen, ob $HTTP... gesetzt ist oder nicht

    Und du musst nicht php schließen mit "?>" wenn du es gleich danach wieder aufmachst "<?"

    $db_id = mysql_connect("localhost");
    Geht das überhaupt, du musst doch auch noch username und password angeben
    Zuletzt geändert von davidovich; 07.09.2004, 12:25.

    Forumregeln!

    Gute PHP-(tutorial-)Seiten

    Kommentar


    • #3
      Original geschrieben von madom
      Hallo lieber PHP-Profi
      ...
      Hallo madome, wer so nett fragt und dessen erstes Skript 1.php heißt, bekommt zunächst einmal einen Keks

      Dein Ansatz ist schon nicht schlecht, allerdings schalge ich folgende Optimierungen vor:

      benutze anstatt HTTP_POST_VARS einfach $_POST["..."].

      Deine Fehler erhälst Du, weil du nicht prüfst, ob ein Formularversand stattfand, der PHP-Teil wird also jedesmal,
      auch beim erstmaligen Aufruf des Skripts im Browser ausgeführt.
      Und da ist $_POST (bzw. $HTTP_POST_VARS) noch ein leeres Array;
      erst durch das Drücken auf 'Abschicken' werden dem Skript im zweiten Durchlauf die Variablen
      (alles, was im FORM mit <input... beginnt) in deinem HTML-FORMular übergeben und als enstprechendes Array-Element angelegt.

      Du kannst also zB mit einer IF-Abfrage prüfen, ob auf 'Abschicken' geklickt wurde:

      PHP-Code:
      if (isset($_POST["Submit"]))
      {
      $nachname=$_POST["nachname"];
      ...


      in der Regel reicht es, auf die Existenz von einer Variablen zu prüfen und davon auszugehen, dass die anderen auch 'da' sind;
      allergings funktioniert dies bei Checkboxen zB nicht, da diese nicht uebergeben werden, wenn sie nicht angekreuzt sind.
      Um es also genau zu nehmen, müsstets Du folgendens machen:
      PHP-Code:
      $nachname=isset($_POST["nachname"]) ? $_POST["nachname"] : "kein Nachname"
      evtl. willst du auch noch Plausibilitätsprüfungen machen und entsprechende Fehlermeldungen ausgeben.
      Eine Input-Validierung kann auch nicht schaden: prüfe oder forciere, daß die ankommenden Werte deinen Erwartungen entsprechen.

      nice day
      Quickborner

      Kommentar


      • #4
        davidovich, du bist mein Held

        Es klappt jetzt.

        War der Fehler, das die Variabeln leer übergeben worden sind? Ich muss zugeben, ich hab mir den Code von anderen Tutorials zusammengeklaut. Versteh selber die Funktionsweise nicht ganz genau.

        $db_id = mysql_connect("localhost");
        Das geht schon, bin mir root ohne Passwort eingeloggt.

        Und du musst nicht php schließen mit "?>" wenn du es gleich danach wieder aufmachst "<?"
        Hab ich bereinigt.

        Kommentar


        • #5
          @Quickborner

          Ihr seid ja super fix hier. Danke auch für deine, ausführliche Antwort. War gerade mit Antworten beschäftigt und habe dein Posting erst jetzt gelesen.

          Und danke für den Keks

          Werde mir deine Lösung auch anschauen und mein Skript anpassen.

          Danke schön !!


          Habe nun doch noch eine Frage:

          Die Daten werden bereits übertragen, wenn ich das Skript aufrufe. Es wird einfach ein leerer Datensatz erstellt. Woran liegt das wohl?

          Zuletzt geändert von madom; 07.09.2004, 12:55.

          Kommentar


          • #6
            Du solltest abfragen, ob das Formular abgeschickt wurde, oder nicht (= erster Aufruf)
            AFAIR "form1.submit"

            OffTopic:

            Original geschrieben von madom
            Das geht schon, bin mir root ohne Passwort eingeloggt.
            Ich kenn da Personen die kriegen 'nen Herzkasper, wenn die das lesen.

            Never abuse the root!

            Zuletzt geändert von Meillo; 07.09.2004, 13:05.
            [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

            [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

            [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
            (from here)

            Kommentar

            Lädt...
            X