Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbank-"Eintragproblem"

Einklappen

Neue Werbung 2019

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

  • Datenbank-"Eintragproblem"

    Hallo,
    ich habe folgendes Problem.
    Ein Freund und ich müssen für ein "Schulprojekt" eine HTML-Eingabeseite erstellen, bei der die eingegebenen Werte per .php auf die Datenbank (phpmyadmin) übertragen werden sollen.
    Nun..die Eingabeseite sieht eigentlich ganz nett aus, Oberfläche wurde mit bootstrap und css bearbeitet, doch das Problem ist, dass die bei der Eingabe-Seite eingetragenen Werte einfach nicht an die Datenbank übermittelt werden...wir beide sitzen schon zu "lange drann" (4 1/2h) , doch finden nicht diesen "Fehler". Wir wissen nicht ob es an der .html- oder .php-Seite liegt. Uns ist zwar bewusst, dass es etwas total simples sein muss, kommen aber trotzdem nicht drauf..
    Wir sind dankbar für jegliche Hilfe

    Das wäre die Eingabe-Seite

    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
    <body>
    
    <div id="wrapper">
    
    <img src="http://www.php.de/images/frs_logo.gif" width="100%">
    
    <div class="well">
    <p>
    <img class="img_border" src="http://www.php.de/images/kpbb.gif" align="right" vspace="10" hspace="20" alt="Kaeptain">
    <form action ="spiele_input.php" method="POST">
    
    Name:                <br>
    <input type="text" class="span3" name="name" size="20">        <br>
    Vorname:             <br>
    <input type="text" class="span3" name="vorname" size="20">     <br>
    Geschlecht:          <br>
    <input type="text" class="span3" name="geschlecht" size="20">  <br>
    Geburtstag:          <br>
    <input type="text" class="span3" name="geburtstag" size="20">  <br>
    Alter:               <br>
    <input type="text" class="span3" name="alter" size="20">       <br>
    Datum:               <br>
    <input type="text" class="span3" name="datum" size="20">   <br><br>
    
    <input type="Submit" class="btn btn-success" value="Daten senden">
    <input type="Reset" class="btn btn-danger" value="Daten zuruecksetzen">
    <br>
    <br><b><font size="4"> Vielen Dank! </font></b><br>
    </p>
    </form>
    </div>
    
    
    </div>
    </body>
    </html>

    Dies wäre die spiele_input.php-Seite, welche die Werte in die Datenbank übermitteln sollte:

    PHP-Code:

    <html>
    <head>
    <title></title>
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#AABBFF" link="#FF0000" alink="FF0000" vlink="#FF0000">
    <?php
    $server 
    "localhost"$user "root"$pass "";
    echo 
    "<br>Nehme Verbindung zur Datenbank auf dem Server <b>$server</b> auf!";
    $verbindung mysql_connect($server$user$pass)
                  or die (
    "Konnte Verbindung zur Datenbank nicht herstellen!");

    mysql_select_db("ravensburger"$verbindung);

    $name $_POST["name"];
    $vorname $_POST["vorname"];
    $geschlecht $_POST["geschlecht"];
    $geburtstag $_POST["geburtstag"];
    $alter $_POST["alter"];
    $datum $_POST["datum"];

    $sql "INSERT INTO spieleland (name, vorname, geschlecht, geburtstag, alter, datum)
             VALUES('
    $name', '$vorname', '$geschlecht', '$geburtstag', '$alter', '$datum')";

    $ergebnis mysql_query($sql$verbindung);

    echo 
    "<br><br>Die Daten sind in die Datenbank eingefügt!";
    mysql_close($verbindung);
    ?>
    </body>
    </html>

    Und natürlich am Ende die "verbindung.php":

    PHP-Code:

    <html>
     <body>
     <h4> Verbindung zu MySQL herstellen </h4>
    <?php
      $server 
    "localhost";
      
    $user "root";
      
    $pass "";

      echo 
    "<br>Nehme Verbindung zur Datenbank auf dem Server <b>$server</b> auf";
      
    $verbindung mysql_connect($server$user$pass)
                    or die(
    "Keine Verbindung zur Datenbank!");
      echo 
    "<br><br> Verbindung hergestellt.";

      
    mysql_close ($verbindung);
      echo 
    "<br>Verbindung beendet."
    ?>
     </body>
    </html>
    MfG hamsicam


    Beitragsmoderation (Manko10):
    [‼] Namen auf Wunsch des Autors aus Code entfernt.

  • #2
    die verbindung.php braucht ihr doch gar nicht oder wo wird die gebraucht ?

    Schreibt mal $ergebnis = mysql_query($sql, $verbindung) or die(mysql_error());
    in der spiele_input.php.

    Kommt ihr denn überhaupt auf die spiele_input.php ?


    Kommentar


    • #3
      Hallo,
      zuerst mal vielen Dank.

      Hab ich gemacht nun steht da:


      Nehme Verbindung zur Datenbank auf dem Server localhost auf!

      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'alter, datum) VALUES('as', 'as', 'as', 'asa', 'as', 'as')' at line 1

      Kommentar


      • #4
        Hallo!
        Code:
        You have an error in your SQL syntax;
        check the manual that corresponds to your MySQL server version for the right syntax
        to use near 'alter, datum) VALUES('as', 'as', 'as', 'asa', 'as', 'as')' at line 1
        Wenn du in deiner Tabelle spieleland eine Kolumne "alter" genannt hast, benenne diese bitte um ( z.B. age ), denn "alter" ist ein reservierter Begriff in MySQL, daher kommt auch der Fehler.

        Probier´s einfach mal aus...und wie Koala schon geschrieben hat...die verbindung.php scheinst du ja gar nicht zu brauchen, die Verbindung stellst du in der spiele_input.php her.

        Kommentar


        • #5
          Code:
          $sql = "INSERT INTO spieleland (name, vorname, geschlecht, geburtstag, alter, datum)
                   VALUES('$name', '$vorname', '$geschlecht', '$geburtstag', '$alter', '$datum')";
          ich schreibe da immer:

          Code:
          $sql = "INSERT INTO spieleland (name, vorname, geschlecht, geburtstag, alter, datum)
                   VALUES(\"" . $name . "\",  "\" . $vorname . "\",  "\" . $geschlecht . "\" ,  \"" . $geburtstag  . "\",  \"" .  $alter . "\",  \" " . $datum . "\");";
          oder so ähnlich

          Kommentar


          • #6
            Zitat von moma Beitrag anzeigen
            ich schreibe da immer:

            Code:
            $sql = "INSERT INTO spieleland (name, vorname, geschlecht, geburtstag, alter, datum)
                     VALUES(\"" . $name . "\",  "\" . $vorname . "\",  "\" . $geschlecht . "\" ,  \"" . $geburtstag  . "\",  \"" .  $alter . "\",  \" " . $datum . "\");";
            oder so ähnlich
            Erhälst du trotzdem einen Fehler, da 'alter' ein Schlüsselwort in (My)Sql ist (eng. alter = ändern).

            Lösung: Benenn die Spalte um oder benutze konsequent Backtickts (`) als Begrenzer für den Spaltennamen.

            Kommentar


            • #7
              ...vielen vielen Dank, :O

              es lag wirklich nur am "alter" --> "age" umbenannt und jetzt läufts wie geschmiert.
              und die verbindung.php hab ich, wie Ihr es gesagt habt gelöscht, war wirklich unnötig.
              Danke danke

              Kommentar


              • #8
                Dir fehlt aber immernoch die Validierung deiner Eingabewerte.

                Außerdem lässt du Tür und Tor offen für SQL-Injections.

                Das Problem kannst du mit isset/empty und mysqli_real_escape_string umgehen, oder du nutzt prepared Statements, was aber in deinem Fall weit übers Ziel hinaus schießt.

                PHP-Code:
                <html>
                <head>
                <title></title>
                <meta name="author" content="">
                <meta name="editor" content="html-editor phase 5">
                </head>
                <body text="#000000" bgcolor="#AABBFF" link="#FF0000" alink="FF0000" vlink="#FF0000">
                <?php
                if(!isset($_POST["name"], $_POST["vorname"], $_POST["geschlecht"], $_POST["geburtstag"], $_POST["alter"], $_POST["datum"])){
                    die(
                'Nicht alle benötigten Werte sind vorhanden');
                }
                try{
                    
                $db = new PDO('mysql:dbname=ravensburger;host=127.0.0.1''root''');
                    
                $stmt $db->prepare("INSERT INTO spieleland (`name`, `vorname`, `geschlecht`, `geburtstag`, `alter`, `datum* )
                         VALUES(:name, :vorname, :geschlecht, :geburtstag, :alter, :datum)"
                , array());
                    if(
                $stmt === false)
                        throw new 
                Exception("Errorhandling unglücklich gewählt: See http://www.php.net/manual/de/pdo.error-handling.php");
                }
                catch(
                PDOException $ex){
                    echo 
                'PDOException: Soemthing went wrong with the database:';
                    die(
                $ex->getMessage());
                }
                catch(
                Exception $ex){
                    die(
                $ex->getMessage);
                }
                $ergebnis $stmt->execute(array(':name' => $_POST['name'], ':vorname' => $_POST['vorname'].........));

                echo 
                "<br><br>Die Daten sind in die Datenbank eingefügt!";
                ?>
                </body>
                </html>
                btw. Warum speicherst du das Alter? Wäre es nicht sinniger, das Geburtsdatum zu speichern und dann das Alter zu berechnen?

                Kommentar


                • #9
                  was aber in deinem Fall weit übers Ziel hinaus schießt.
                  ...das is der springende Punkt
                  wir glauben nicht, da es auf dem "Auftragsblatt" nicht draufsteht, es verlangt wird bzw. uns nie gezeigt wurde, wie man diese Tore schließt. Aber trotzdem danke nochmal, wir haben deinen code übernommen und abgespeichert

                  - Das haben wir uns auch gefragt, da es wirklich sinniger ist , bloß wollten wir das erst noch nicht machen, da wir nicht dachten, dass es am "alter" liegt sondern irgendwo anders und wollten uns erstmal mit der Problemlösung beschäftigen...also waren total abgelenkt von anderem :/

                  Kommentar


                  • #10
                    ...das is der springende Punkt
                    wir glauben nicht, da es auf dem "Auftragsblatt" nicht draufsteht, es verlangt wird bzw. uns nie gezeigt wurde, wie man diese Tore schließt. Aber trotzdem danke nochmal, wir haben deinen code übernommen und abgespeichert
                    Sicher steht auch nicht auf dem Auftragsblatt, dass man sich die Lösung von anderen in einem Forum machen lassen soll. Mit selber machen hättet ihr auf jeden Fall mehr gelernt. Aber das wohl nicht mehr angesagt heute.

                    Kommentar


                    • #11
                      ich sehe es als legitim nachfragen zu dürfen, wenn man selbst die Lehrerin um Hilfe bittet und sie selber nicht draufkommt an was es liegen könnte und einem/uns ratet alles nochmal neu zu schreiben, wobei wir das mindestens 4 Mal getan hatten...
                      alles andere ist relativ.

                      außerdem wie gesagt zu dem Tore schließen, das soll und kann man als "Zusatz" abspeichern und dann falls man es bräuchte auch verwenden. Uns ist sicherlich bewusst, dass wir diese Sachen erklären/rechtfertigen müssen, wenn dort sowas steht

                      Fazit: Es ist nicht nur mit: Copy-Paste getan

                      Mit selber machen hättet ihr auf jeden Fall mehr gelernt.
                      --> Stimmt.

                      Aber das wohl nicht mehr angesagt heute.
                      --> Kann ich nicht zustimmen.

                      MfG hamsicam

                      Kommentar

                      Lädt...
                      X