absoluter newbie: via PHP Formular - Daten in Datenbank eintragen

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

  • absoluter newbie: via PHP Formular - Daten in Datenbank eintragen

    Hallo erstmal!

    Ich bin absolut neu im Bereich PHP/MYSQL, habe aber (wie die meissten) grosse Vorstellungen was ich machen möchte
    Nur leider hapert es meisstens schon an den einfachsten Dingen.

    Hier nun 3 (wohl eher lächerliche) Probleme mit denen ich mich nun schon 2 Tage rumschlage.

    1.
    Ich möchte ein einfaches Formular mit ein paar Eingabefeldern in HTML erstellen, dass dann wenn man auf den "speichern" button klickt die eingebenen Daten über ein PHP script in eine MySQL Datenbank einträgt.
    Eigentlich wohl eine alltägliche Angelegenheit, jedoch bei mir klappts einfach nicht und ich weiss nicht was ich falsch mache...

    Hier mein bisheriger Versuch:

    eintrag.htm
    Code:
    <form method="post" action="eintrag.php">
    neue id:
    <input type="text" name="id" size="10">
    <br>
    spielname:
    <input type="text" name="name" size="20">
    <p>
    <input type="submit" value="speichern" name="abschicken">
    </form>
    eintrag.php
    PHP-Code:
    <?php
    if (!isset($abschicken)) {
        include(
    'eintrag.htm');
        exit; }

    $server    "localhost";
    $user    "mein username";
    $pass    "mein passwort";
    $database "die datenbank";
    $table    "ss_spiele";

    $verbindung mysql_connect($server$user$pass)
        or die (
    "verbindung zu sql geht nicht");

    mysql_select_db($database$verbindung);

    sql "INSERT INTO $table VALUES ('$id', '$name')";
    $ausgabe "gespeichert!";

    sql_query($sql) or die ("sql eintrag fehler");

    mysql_close($verbindung);
    echo 
    $ausgabe;

    ?>
    Beim ausführen der PHP bleibt passiert nichts...
    vielleicht sieht ja jemand auf den ersten Blick woran es liegt.


    2.

    Ist es absolut zwingend notwenig wenn ich eine verbindung zu einer MySQL via PHP aufgebaut habe diese auch wieder zu beenden?

    Wenn ja: Reicht es wenn ich einfach ans Ende des Scripts den Befehl:
    PHP-Code:
    mysql_close(); 
    setze oder muss zwischen die Klammern noch die Verbindungsdaten?
    Wenn ja wie müsste das dann aussehen?


    3.

    Frage zu ID´s:
    Wie man ja auch oben beim ersten Script sehen kann setze ich die id per Hand ein. Es soll ja aber auch möglich sein das dies automatisch um 1 höher gesetzt wird? Mit AUTO_INCREMENT?
    Habe es mal versucht bei mir auf auto_increment zu stellen, jedoch kam folgende Meldung:
    Code:
    ALTER TABLE `ss_spiele` CHANGE `id` `id` TEXT NOT NULL AUTO_INCREMENT 
    
    
    #1063 - Incorrect column specifier for column 'id'

    Ich hoffe ich bin mit meinen Anfänger-fragen nicht im falschen Forum gelandet, wenn doch bitte ich dies zu entschuldigen...

  • #2
    Re: absoluter newbie: via PHP Formular - Daten in Datenbank eintragen

    1. register_popels ähhh globals heißt das Zauberwort, Du kannst nicht einfach auf die Variablen zugreifen, mußt vielmehr $_POST verwenden. Lass Dir nach dem Absenden mal $_POST ausgeben (print_r). Lass Dir auch mal die Query ausgeben, sie sollte eigenartig aussehen.

    Achso: Was soll sql_query() sein? Gibt es keine Fehlermeldungen? Dass rein gar nichts passiert, kann quasi nicht sein ... Setz Dein error_reporting mal auf E_ALL.

    2. Nicht zwingend nötig, ein einfaches close reicht aber, soweit ich mich erinner - kuckst Du mysql_close im Manual.

    3. Ich denke mal, die ID muss Integer sein ... benutz dafür lieber mal PHPMyAdmin oder definier sowas gleich beim Erstellen der Tabelle.
    Zuletzt geändert von derHund; 26.06.2006, 11:22.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      3. Ich denke mal, die ID muss Integer sein ... benutz dafür lieber mal PHPMyAdmin oder definier sowas gleich beim Erstellen der Tabelle.
      Hmm ich habs mit phpmyadmin versucht:

      Code:
      ALTER TABLE `ss_spiele` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT 
      
      
      #1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key

      zu dem $_POST:

      Irgendwie hört sich das für mich chinesisch an
      Sorry, weiss nicht wie ich das machen soll?

      Kommentar


      • #4
        Der Code-Sauberkeit halber:
        PHP-Code:
        <?
        if (!isset($_POST['abschicken'])) {
            include('eintrag.htm');
            exit; }
        // ...
        $sql = "INSERT INTO $table (id, name) 
                VALUES ('". $_POST['id']."', '". $_POST['name']."')";
        // ...
        ?>
        bzw ohne 'id', wenn diese sowieso auf auto_increment gesetzt ist.

        Nicht zu vergessen, ein gutes Buch tut Wunder, meine Empfehlung:
        Jörg Krause, PHP5 Grundlagen und Profiwissen
        mit gutem MySQL-Teil.

        Kommentar


        • #5
          Original geschrieben von z3ntn3l
          #1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key
          Und was verstehst du daran nicht?
          zu dem $_POST:

          Irgendwie hört sich das für mich chinesisch an
          Sorry, weiss nicht wie ich das machen soll?
          Gerade für newbees gilt: RTFM!
          http://www.php.net/manual/de/languag...predefined.php
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Original geschrieben von z3ntn3l
            zu dem $_POST:

            Irgendwie hört sich das für mich chinesisch an
            Sorry, weiss nicht wie ich das machen soll?
            Eigentlich ganz simpel.
            Definierst du den Formular-Tag mit
            Code:
            <form [B]method="post"[/B]  action="eintrag.php">
            stehen die Werte-Paare in der globalen Variable $_POST zur Verfügung.

            Kleine Übung: Wie sieht das bei
            Code:
            <form [B]method="get"[/B]  action="eintrag.php">
            aus?

            Richtig ... $_GET !!!

            Aber nu is gut, husch husch in den nächsten Bücherladen oder in die Bibliothek...

            Kommentar


            • #7
              #1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key
              Ja, eigentlich selbstredend. Wenn Du in PMA mal in der Struktur-Ansicht schaust, bei den Aktionen kannst du eine Spalte als Primärschlüssel definieren (viertes Icon, Schlüssel über Tabelle).
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Um mal noch ein schönes Tutorial anzumerken:

                tut.php-q.net

                Arbeite das durch und danach sollteste fit im Umgang mit php sein.

                Kommentar


                • #9
                  Ihr habt natürlich recht mit RTFM...
                  Ich habe mir auch im vorfeld ein paar Beispiele angesehen die leider in einigen Punkten immer unterschiedlich waren zu meinen Vorstellungen und ich dann beim editieren völlig daneben lag...

                  Ich habe es jetzt ausprobiert und immerhin wird as htm Formular jetzt angezeigt beim aufruf der Seite.
                  Nach dem abschicken kommt aber nicht die echo $ausgabe und eingetragen in die db wurde auch nichts.

                  PHP-Code:
                  <?php
                  if (!isset($_POST['abschicken'])) {
                      include(
                  'eintrag.htm');
                      exit; }

                  $server    "localhost";
                  $user    "user";
                  $pass    "pw";
                  $database "db";
                  $table    "ss_spiele";

                  $verbindung mysql_connect($server$user$pass)
                      or die (
                  "verbindung zu sql geht nicht");

                  mysql_select_db($database$verbindung);

                  $sql "INSERT INTO $table (id, name) 
                          VALUES ('"
                  $_POST['id']."', '"$_POST['name']."')";

                  $ausgabe "gespeichert!";

                  sql_query($sql) or die ("sql eintrag fehler");

                  mysql_close($verbindung);
                  echo 
                  $ausgabe;

                  ?>

                  zu: There can only be one auto column and it must be defined as a key

                  also für mich bedeutet es das es wohl pro tabelle nur eine Zelle geben darf die auf auto_increment steht? Das wäre aber die einzige Zelle.?

                  [COLOR=red]edit:[/COLOR] OK habs jetzt mit auto_increment. Danke vielmals!
                  Zuletzt geändert von z3ntn3l; 26.06.2006, 11:59.

                  Kommentar


                  • #10
                    probiers mal mit

                    PHP-Code:

                    mysql_query
                    ($sql);

                    //statt 

                    sql_query($sql); 

                    Kommentar


                    • #11
                      Vielen vielen Dank!

                      Nun klappts!

                      Ihr seid echt klasse!

                      Hätte nicht gedacht das man hier so schnell eine antwort bekommt!

                      Jeden Tag eine gute Tat - Ihr habt sie heute schon erbracht

                      Kommentar


                      • #12
                        Und jetzt kannst du dich daran setzen dein Script gegen
                        SQL-Injections abzusichern.

                        Kommentar

                        Lädt...
                        X