Probleme mit Formularen und mit dem Eintragen von Daten in eine Datenbank

  • Hey Leute,

    ich bin gerade an einem Uniprojekt am basteln. Es gibt eine Note auf das Ergebnis.

    Nun habe ich eine website gebastelt, die designed und alles ist chick. Leider funktioniert das wichtigste nicht: das eintragen von form daten in eine sql Datenbank.

    ich verwende xampp mit phpmyadmin (ich glaube die neueste Version).


    Ich raff das nicht mit POST und GET ... ich habe verstanden, dass GET die Werte in der Adresszeile wiedergibt und nicht durch einen header. bei POST werden diese durch einen header weitergegeben. Soweit so gut. ich habe einmal eine php datei, die mir die Tabelle, die bisher erschaffen wurde ausgibt per while Schleife etc. Neben jedem datensatz in der Tabelle ist ein Button, mithilfedessen ich die idLied des jeweiligen Datensatzes übertragen möchte, um den datensatz in einer eigenen tabelle anzuzeigen/zu editieren. Nun ist es so, dass wenn ich auf den "edit" button klicke, der eigentlich ein submit button ist mit nem anderen namen und value, bei der GET Methode alles übergeben wird und ich alles sehen kann und bei der POST methode nicht

    Es ist natürlich klar, dass ich in beiden phps die Methode angleiche.

    Jetzt kommt das Mysterium, was ich nicht verstehe:

    Code
    xxx/index.php?page=edit&idLied=X

    wird übertragen aber nicht entgegengenommen von der edit.php! Somit stehen keinerlei Werte in der edit-Tabelle.

    wieso ist das so?
    ich stehe absolut auf dem schlauch... ich habe schon 1000 google seiten zum Thema Post und GET gelesen aber irgendwie komm ich nicht auf das Ergebnis =(

    Der Link zur Website befindet sich ganz unten!

    view.php

    edit.php

    http://chr1skayone.dyndns.biz/Pruefung/index.php?page=view das hier ist bis ich den PC ausschalte der link zut view.php.

    Danke Chris

  • Dein Problem ist zuerst einmal, dass dir die Grundlagen in HTML schon fehlen. Eine Kombination aus einem Link und einem Input-Feld funktioniert nicht, zumal du auch noch nicht einmal ein Formular hast.

    Und wenn ich mir den PHP-Teil angucke, dann sieht man auch jede Menge kleinere Bugs.

  • hey, ich habe mal meine gesamte website gezippt


    Das ist schön, aber ich werde mir das nicht downloaden. Ganz ehrlich, das übersteigt das Maß, was man in einem Forum erwarten kann. Fakt ist, bei dir haperts sowohl an HTML- und PHP-Grundlagen.
    Wenn ich das alles korrigieren würde, würde dir niemand glauben, dass du das selber gemacht hast, und erklären könntest du es auch nicht.

    es wäre nett, wenn du dich eventuell im ICQ oder so bei mir melden könntest


    Bestimmt nicht.

  • okay vielen Dank für die Hilfe ... dann haperts wohl an HTML ... man kann das natürlich auch nett sagen, aber dafür war meine Anfrage an Hilfe wahrscheinlicheinfach nicht entsprechend. Sorry für die dreistigkeit, einfach wissen zu wollen, ob es möglich ist bei <input action=" statt update.php update.php?page=1 o.ä. hinzuschreiben ... vielen Dank!

    Dann kann das hier wohl zugemacht werden

    PS ich wollte nichts korrigiert haben, ich wollte einfach nur wissen, an welcher Stelle jetzt das Problem liegt ... und das geht wahrscheinlich am besten, wenn derjenige den gesamten code hat ...

  • Jetzt hab' ich mir doch mal gezogen, und kaum schaut man da rein, bekommt man schon das Grauen.

    PHP
    ## Ausschalten der "harmlosen" Notice-Reports, wenn eine Variable nicht deklariert ist.
     error_reporting(E_ALL ^ E_NOTICE);


    Das ist grausam! Besonders dann, wenn das Script nicht funktioniert und man sowieso Probleme mit PHP hat. Das sind nämlich keine harmlosen Notice-Meldungen, sondern zeugen von einer schlampigen Programmierung. Die Notice-Meldungen helfen auch bei der Fehlersuche!

  • mensch ... das soll keine meeeeega php seite werden, wir hatten 5 vorlesungen lang php und mySQL mit den geringsten anforderungen ... ich habe die notice abgestellt, damit kein "fehler" kommt, wenn die variablen nicht deklariert sind ... nur aus diesem grund ... wie gesagt diese website wird NIEMALS online kommen, ich muss einfach eine seite schreiben, mit der man auf eine datenbank zugreift, gewisse abfragen macht und durch einen Knopfdruck ein CSS attribut ändert ... mehr muss die nicht können ...

    ich wollte das ganze etwas "hübscher" gestalten ... aber es tut mir leid, ich nerve hier im forum nicht weiter Profis. Ich habe kein plan von HTML und PHP, weiß auch nicht, wo ich ansetzen soll, also lassen wir das ganze und fertig !

    Einmal editiert, zuletzt von Christian Koch (28. Januar 2012 um 21:57)

  • ich habe die notice abgestellt, damit kein "fehler" kommt


    Das ist Blödsinn! Und warum, habe ich dir schon erklärt!

    Um mal deinen geposteten Quellcode zu nehmen:

  • Ich habe das mal so gemacht, wie du oben gepostet hast, nur dass ich beide Buttons aktiviert habe :) danke dafür ...

    in der edit.php wird die idLied auch entgegen genommen und der Datensatz auf die einzelnen formulare verteilt angezeigt. Nun wird bei einem Klick auf OK aber der Datensatz nicht gespeichert =( ich verstehe nicht, wo der fehler liegt ... ich habe keine hyperlinks mehr um buttons gelegt. Lediglich ein Formular angelegt. Wieso tut es nicht das was ich möchte? =(

  • Ungetestet:


    So, da hast du jetzt eine Vorlage, denn Rest mache ich dir garantiert nicht, ist ja deine Prüfung und nicht meine!

  • hey ich hab das grade etwas anders gemacht aber bei mir hat's bis auf die radios auch geklappt ... also ich konnte die daten ändern, nur das radio nicht ... das hat mir gefehlt, was du gepostet hast ...

    mein code war bis eben so:


    ich will ja auch was lernen, du wollst mir auch keine vorlagen schicken, obwohl ich auch dankbar bin dafür was du bereits getan hat ...

    aber ich stand halt auf dem schlauch, was wieso nicht ging ...

  • Und gewöhn dir an, deinen Quellcode anständig zu formatieren, endlos viele Leerzeilen und ein chaotisches Einrücken machen die Sache nicht lesbarer.

    Ansonsten würde ich meine Version bevorzugen. :D

  • ja okay ... ich versuche mein bestes, versprochen :)

    deine Version hat den selben bug wie meine ganz alte. Es wird nichts gespeichert =(

    http://localhost/Pruefung/index.php?page=edit&idLied=19 <--- sorry hatte die localhost kopiert

    wenn man da auf OK klickt, kommt man zwar in page=edit aber geupdated wird da nichts =(

    PS: es funktioniert mit folgendem code: ich hoffe er ist ausreichend gut formatiert :)

    2 Mal editiert, zuletzt von Christian Koch (28. Januar 2012 um 23:55)

  • Es wird nichts gespeichert =(

    Richtig debuggen

    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysql_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Und lass' das elendige "Select*" weg und benutze mysql_real_escape_string. Manchmal frage ich mich, warum man ein Beispiel vorgibt und die wichtigen Dinge einfach ignoriert werden.

    Einmal editiert, zuletzt von Bandit (29. Januar 2012 um 10:20)

  • Hey,

    genau solche Kommentare wollte ich. Ich wollte keine Lösung des Problems, ich wollte einen Tip, wie ich mit dem Problem umgehen soll. - Danke dafür, ich blicke zwar noch nicht 100% durch, werde das aber mithilfe von google versuchen.

    Zum Thema "Select*". Ich habe SQL halt so gelernt in der Vorlesung, bach googlen von mysql_real_escape_string kamen nur Treffer, in denen ich nun weniger als Bahnhof verstand :) Wie gesagt ich habe das bei deinem (danke übrigens nochmal) Vorschlag gesehen aber wusste nicht genau wie das ganze Funktioniert.


    Also bisher funktioniert alles was ich möchte. Ich habe zusätzlich, um die Aufgabenstellung zu erfüllen, eine zweite Tabelle angelegt: cover(idCover(PK), name, album, idLied, pfad).

    Mein Plan: beim ausfüllen des Formulars wird zusätzlich noch ein "Bild-Upload" angeboten. Dieser Bild Upload speichert den Namen des Bildes(xxx.jpg), das Album, das man angegeben hat, den Pfad, bestehend aus "upload_bilder/$name". Nun möchte ich die beiden Tabellen theoretisch Verknüpfen. musik.idLied = cover.idLied quasi.

    Und das Script zum Bildupload

    Ich hoffe diesmal ist die Formatierung halbwegs richtig :)

    Ich werde nun versuchen, deiner debugging Anleitung zu folgen, hoffe aber, auch wenn die Fragen banal sind, dass du nicht böse wirst. Verzeih mir meine Dummheit =(

    3 Mal editiert, zuletzt von Christian Koch (29. Januar 2012 um 12:02)

  • Zum Thema "Select*". Ich habe SQL halt so gelernt in der Vorlesung


    Guckst du: http://php.faq-page.net/q-sql-select.html

    ach googlen von mysql_real_escape_string kamen nur Treffer, in denen ich nun weniger als Bahnhof verstand


    Warum nicht einfach in der Doku (ja, die gibt es tatsächlich) nachsehen: http://www.php.net/manual/de/

    Also bisher funktioniert alles was ich möchte.


    Aber nur deshalb, weil du PHP dazu zwingst, seine Meinung zu deinem Script zu verschweigen. Einfach mal das Error-Reporting umsetzen und schon erfährst du mehr.

    hoffe aber, auch wenn die Fragen banal sind, dass du nicht böse wirst.


    Ich werde nur "sauer", wenn jemand sich nicht bemüht und sich alles vorkauen lassen will und wenn Hinweise und Tipps ignoriert werden.

    Verzeih mir meine Dummheit =(


    Dumm ist man nur, wenn man nicht dazulernen will ;)

  • Ich will ja lernen, aber es ist denke ich mal sehr mühsam sich so ein php Handbuch durchzulesen :) Für so etwas hat man experten-Foren, die einem vielleicht einen Tipp geben, wo etwas zu dem Thema stehen könne, so vermeidet man Redundanz ;)

    Folgendes: ich habe mal alle Fehler eingeschaltet. Es kommen nur diese Notices, dass eine Variable nicht belegt ist.

    Wi eumgeht man das? Kann man diese Notice nicht irgendwie "abfangen" und in eine log packen bzw. die Variablen von anfang an definieren, damit sie 1.) anfangs nicht Leer sind und 2.) dennoch das tun, was sie sollen.?

    Wenn ich bei google mein Anliegen losschicke, bekomme ich genau solche Antworten, wie ich sie verwendet habe -> notice ausstellen =(


    PS: Ich verstehe jetzt auch, wieso nicht SELECT* :) Dank dir... Ich war die ganze Zeit am rätseln, was und wieso ... aber es ist quasi nur so, dass sich die Reihenfolge der Tupel in der Datenbank ändern kann und man dann im Prinzip die gesamte Datenbank mit durchgegangen ist, obwohl man dasmeiste davon nie wieder braucht ... Performance und so :) Seh ich das richtig?

    Einmal editiert, zuletzt von Christian Koch (29. Januar 2012 um 12:25)

  • Zum Überprüfen, ob Variablen übergeben wurden, bietet sich isset oder empty an.

    Ansonsten habe ich mir angewöhnt, Variablen am Anfang des Scriptes zu initialisieren, sprich

    PHP
    $bool_var = false;
    $int_var = 0;
    $string_var = "";


    Somit hat man schon am Anfang einen Überblick über Variablen und umgeht so schon mal manche Notice-Meldung. In anderen Progammiersprachen w.z.B C/C++ muss man ja auch Variablen vorher deklarieren, warum also in PHP nicht zumindest initialisieren. :) Hat auch den Vorteil, dass man mit der Menge an Variablen nicht so fürchterlich um sich wirft.

    Einmal editiert, zuletzt von Bandit (29. Januar 2012 um 12:28)

  • Jo das habe ich alles gemacht, Variable $page am anfang mit $_GET['page'] initiiert

  • Und was ist, wenn $_GET['page'] nicht da ist?

    PHP
    $page = isset($_GET['page']) ? $_GET['page'] : "start";

    Und noch ein Tipp: wenn man eine Menge if/elseif hat, bietet sich switch/case hat. Ist übersichtlicher und einen Tick schneller:

    Einmal editiert, zuletzt von Bandit (29. Januar 2012 um 12:39)