Announcement

Collapse
No announcement yet.

Von Formular in eine DB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Von Formular in eine DB

    Hallo zusammen,

    ich beschäftige mich seit ein paar Tagen mit dem Thema PHP und PostgreSQL. Mit PHP bin ich nun soweit durchgestiegen das mein Formular funktioniert. Die eingetragenen Daten sollten nur nicht per Mail verschickt sondern direkt in eine DB geschrieben werden. Und genau an dieser Schnittstelle habe ich noch ein paar Wissenslücken und hoffe auf eure Unterstützung.

    Der Verbindungsaufbau zur DB funktioniert, über den DB-Monitor kann ich ohne Probleme Datensätze mit select auswählen oder mit dem Befehl insert hinzufügen. Nur mit PHP bekomme ich das irgendwie nicht hin.

    - Hinter der Variable $text versteckt sich die Textbox in der der Anwender seinen Text rein schreiben kann.
    - Die Tabelle hat den Namen TEST

    Bin für eure Hilfe und jeden Denkanstoss dankbar.

    Gruß veneror

    <!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=iso-8859-1">
    <title>Formular</title>
    </head>

    <body>
    <?php
    $text = $_POST['text'];

    $db = pg_connect ("host=localhost port=5432 dbname=Feedback user=Feedback password=xxx");
    if (!$db) {
    echo "Ein Fehler ist aufgetreten.\n";
    exit;
    }
    $res = pg_query ($db, "INSERT INTO TEST (id, text) VALUES (6, '$text')");
    if (!$res) {
    echo "Ein Fehler ist aufgetreten.\n";
    exit;
    }
    ?>
    </body>
    </html>

  • #2
    Hi,

    du solltest mal versuchen den Fehler einzugrenzen:
    • kannst du select Befehle mit php ausführen?
    • kannst du einen insert ausführen, wenn die Werte nicht aus einen Formular kommen
    • wird eine Zeile erstellt, nur nicht mit dem Inhalt der Variable


    Achso was mir noch aufgefallen ist:
    INSERT INTO TEST (id, text) VALUES (6, '$text')

    Du verwendest für die Id, die wahrscheinlich eindeutig ist, bei jedem Insert einen konstanten Wert! Im Normalfall würde ich die Id bei einem Insert nie setzen. Das kann man der DB überlassen. Existiert bei dir vielleicht schon ein Eintrag mit der id 6?
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Hallo,
      Originally posted by veneror View Post
      ...Nur mit PHP bekomme ich das irgendwie nicht hin.
      ist nicht unbedint eine qualifizierte Fehlerbeschreibung, geschweige denn eine Frage.
      Hast du dir mal mit pg_last_error() die evtl. vorhanden Fehlermeldung der DB ausgeben lassen?

      Gruß Falk

      P.S.: Ich verschiebe das mal nach "PHP & Datenbanken".
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Hallo zusammen,

        erst einmal danke für euer Feedback. Bis vor einer Woche konnte ich grad mal PHP schreiben und hatte davon überhaupt keine Ahnung.

        @Falk
        ich habe dein Anliegen befolgt und pg_last_error ausgeführt. Die Fehlermeldung sagt aus, dass meine Tabelle TEST nicht existieren würde. Wenn ich den insert oder select String direkt in den DB-Monitor von PostgreSQL eingebe, dann trägt es diesen Datensatz ein bzw. zeigt ihn mir an. Hat der insert string vielleicht ein Problem mit der Variable?

        @Novi,

        das mit der fortlaufenden ID ist meine zweite Baustelle, da mir erst einmal Dateninport wichtiger erschien als die ID, habe ich es statisch gelassen. Die ID6 ist die nächst fortlaufende ID.

        Comment


        • #5
          Originally posted by veneror View Post
          ...@Falk
          ich habe dein Anliegen befolgt und pg_last_error ausgeführt. Die Fehlermeldung sagt aus, dass meine Tabelle TEST nicht existieren würde.
          Das ist doch schon eher ein Ansatz . Ist alles richtig geschrieben? Groß- Kleinschreibung beachtet? Was passiert wenn du die Tabelle zusätzlich mit dem DB-Namen versiehst, also: INSERT INTO Feedback.TEST ...

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hi Falk,

            wenn ich noch zusätzlich den DB Namen zur Tabelle hinzufüge erscheint eine ähnliche Fehlermeldung:

            Warning: pg_query() [function.pg-query]: Query failed: ERROR: schema "feedback" does not exist in /home/mjanko/public_html/Kontaktformdb.php on line 18
            Ein Fehler ist aufgetreten. insert into Feedback.TEST (id, text) VALUES (7, testnachricht)ERROR: schema "feedback" does not exist


            Mir ist aufgefallen, wenn ich den Testtext durch die Variable $Nachricht (Name der Textbox aus dem Formular) ersetze, dann erscheint eine andere Fehlermeldung.

            $res = pg_query ($db, "INSERT INTO Feedback.TEST (id, text) VALUES (7, ($nachricht))");

            Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near ")" LINE 1: INSERT INTO Feedback.TEST (id, text) VALUES (7, ()) ^ in /home/mjanko/public_html/Kontaktformdb.php on line 19
            Ein Fehler ist aufgetreten. ERROR: syntax error at or near ")" LINE 1: INSERT INTO Feedback.TEST (id, text) VALUES (7, ()) ^

            Comment


            • #7
              Hi,

              bei folgender Anweisung kann ich dir weiterhelfen:

              Originally posted by veneror View Post
              $res = pg_query ($db, "INSERT INTO Feedback.TEST (id, text) VALUES (7, ($nachricht))");
              Du Klammerst $nachrichten ein! Wie wäre es, wenn du Anführungszeichen verwendest:

              [highlight=sql]
              INSERT INTO Feedback.TEST (id, text) VALUES (7, '$nachricht')
              [/highlight]
              "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

              Viele Grüße Novi

              Comment


              • #8
                Hallo,
                Originally posted by veneror View Post
                ...Warning: pg_query() [function.pg-query]: Query failed: ERROR: schema "feedback" does not exist in /home/mjanko/public_html/Kontaktformdb.php on line 18
                Ein Fehler ist aufgetreten. insert into Feedback.TEST (id, text) VALUES (7, testnachricht)ERROR: schema "feedback" does not exist
                Die Fehlermeldung ist ja ziemlich eindeutig. Das Schema (die DB) "Feedback", zu der du dich in deinem Connectstring "host=localhost port=5432 dbname=Feedback user=Feedback password=xxx" verbindest, existiert offensichtlich nicht. Alles richtig geschrieben? Nutzername und Passwort richtig?

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  @Novi,

                  wenn dieser Test irgendwann erfolgreich ist, dann soll anstatt einer statischer Text ein variabler Text stehen. Deswegen hatte ich versucht, wenn ich die Variable $nachricht in Klammern setze passiert.

                  @Falk,

                  Das stimmt diese Fehlermeldung ist eindeutig nur für mich nicht nachvollziehbar, denn der Verbindungsaufbau zu DB funktioniert tadellos.
                  Mit folgender Anweisung kann ich mir den DB Namen ausgeben lassen:

                  <?php
                  $host = "localhost";
                  $port = "5432";
                  $user = "Feedback";
                  $password = "xxx";
                  $dbname = "Feedback";
                  $conn = pg_connect ("dbname=$dbname user=$user host=$host port=$port password=$password")
                  or die ("Konnte keine Verbindung herstellen.");
                  $db = pg_dbname ($conn);
                  echo 'Name der DB: '.$db.'<br>';
                  ?>

                  Wenn ich den DB Namen ausgeben kann, dann sollte zumindest nach meinem Verständnis die Verbindung zur DB stehen. Wie schon erwähnt, gebe in den insert String direkt in den DB-Monitor ein, dann erscheint der neue DB-Eintrag. Ich habe im Moment Null Ahnung an welcher Stelle der Fehler auftaucht.

                  Comment


                  • #10
                    Originally posted by veneror View Post
                    ...Wie schon erwähnt, gebe in den insert String direkt in den DB-Monitor ein, dann erscheint der neue DB-Eintrag. Ich habe im Moment Null Ahnung an welcher Stelle der Fehler auftaucht.
                    Arbeitest du denn dabei auf ein und derselben DB? Auf welchen Host verbindest du dich mit dem DB-Monitor? Localhost ist in diesem Fall der PC an dem du gerade arbeitest. In der PHP-Umgebung ist localhost der Server auf dem der Webserver und PHP laufen. Ist dein lokaler PC also auch der Webserver?

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment


                    • #11
                      Der Webserver und DB-Server ist ein und der selbe Server. Ich arbeite auf einer Workstation, verbinde mich mit einem Sharelaufwerk und führe dann die Scripte aus.
                      Ein Freund von mir hat mein Script unter MySQL ausprobiert, nach seinen Angaben ist meine Syntax ok. Gut, das hilft mir im Moment noch nicht weiter, aber es gibt Spielraum für andere Fehlerquellen.

                      Wegen der fortlaufenden ID hatte ich zuvor einen Beitrag von dir gelesen, nur nicht ganz kapiert. Kannst du es für mich noch einmal auffrischen? Danke.

                      Comment


                      • #12
                        Hallo,
                        Originally posted by veneror View Post
                        ...Wegen der fortlaufenden ID hatte ich zuvor einen Beitrag von dir gelesen, nur nicht ganz kapiert. Kannst du es für mich noch einmal auffrischen? Danke.
                        Ist das jetzt an mich gerichtet? Das hier dürfte jetzt der 2889. Beitrag sein den ich hier verfasse. Also Sorry wenn ich nicht aus dem Stehgreif weiß auf welchen von den restlichen 2888 du dich beziehst.

                        Gruß Falk
                        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                        Comment


                        • #13
                          Hallo Falk,

                          ich konnte das Problem mit dem DB Zugriff lösen, habe den Tabellennamen zwischen Escape und Anführungszeichen gesetzt.
                          Ich hatte hier um Forum einen interessanten Beitrag gelesen, wie man eine fortlaufende ID erstellt. Zuerst dachte ich, dieser Beitrag wäre von dir gewesen. Naja, mein Problem ist, ich habe diesen Beitrag nicht verstanden und dachte, dass du es mir erklären könntest, wie ich eine fortlaufende ID in meine Tabelle bekomme.

                          Comment


                          • #14
                            Hallo,
                            Originally posted by veneror View Post
                            ...wie ich eine fortlaufende ID in meine Tabelle bekomme.
                            Dafür gibt es verschiede Möglichkeiten und je nach DB sind es andere. Ich kenne Postgre nicht, von daher kann ich dir da nicht konkret helfen. (Aber es gibt hier ein extra PostgreSQL - Forum, da kannst du ggfs. die Frage stellen.
                            Ansonsten sind die Stichworte: Autoincrement, Identity, Sequenz

                            Gruß Falk
                            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                            Comment

                            Working...
                            X