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

  • okay, ich hatte $page einfach 'start' zugewiesen :D


    Nun meine nächste Frage: htmlentities($str, ENT_QUOTES,'UTF-8');
    ist ja dafür da, dass wenn man $str = 'äöübla//' richtig anzeigen lässt. Wenn ich nun alles richtig anzeigen lassen möchte, muss ich dann am anfang eines jeden scripts $str = ( schreiben und am Ende wieder ) ?


    EDIT: Das habe ich jetzt einfach weggelassen, weil es eh keinen nennenswerten Unterschied machte.


    Ich habe nurnoch zwei Dinge zur vollständigen Lösung der Aufgabenstellung.

    Ich habe bereits geschrieben, dass der User ein Bild zu seinem "Lied" Uploaden kann. Die Daten zu dem Bild befinden sich in einer anderen tabelle (das Bild selbst liegt in einem pfad im website-Verzeichnis und nicht als BLOB in der Datenbank (wegen Performance - ja ich lerne dazu :) )

    Beim klicken auf "Speichern" werden einerseits die schon bekannten Musikdaten gespeichert und andererseits in einer zweiten Insert into Abfrage in eine andere Tabelle cover(idCover, bezeichnung, album, idLied, destinaiton) gespeichert. idCover wird automatisch erzeugt, bezeichnung kommt als dem file-titel, album ist das, was auch in die Tabelle musik eingetragen wurde, destination ist /upload_bilder/$bezeichnung. Das alles funktioniert auch einwandfrei.

    Nur idLied wird nicht übernommen und es steht immer eine 0 da. Aber genau das ist das wichtige an der Geschichte, dass ich später durch einen JOIN die Musiktitel mit den Bilden verknüpfen und ausgeben kann.

    Ich habe es schon mit $_POST['idLied'] versucht und selbst (sinnlos) mit einer Select abfrage - nichts =/

    EDIT2:

    Achja, fast vergessen :D Dank dir, habe ich trotz eingeschaltetem fehlerreport KEINE NOTICE UND KEINE FEHLERMELDUNG :D Außer halt da, wo das Script noch nicht 100% richtig ist :) DANKE

    2 Mal editiert, zuletzt von Christian Koch (29. Januar 2012 um 13:06)

  • Hey,

    ich habe nun die komplexen Ideen über den Haufen geworfen und nach Rücksprache mit meinem Dozenten reicht es, eine Tabelle, in der die Werte bereits vorgegeben sind (z.B. Musikkategorien) mit meiner Tabelle, die ich ja hier schon vorgestellt habe zu JOINEN.

    Der Code ist nun folgender:

    Die SQL Anweisungen werden ausgeführt, gibt also keinen Fehler. Leider entsteht kein Array mit Werten. Ich habe mir dieses mal besonders viel Mühe mit der Formatierung gegeben :)

    Um Fragen vorzubeugen: Ja, es wird in der Tabelle "Musik" ein Datensatz erzeugt und Ja, die Tabelle category ist gefüllt mit Datensätzen. Da kein Fehler auftritt, gehe ich nicht davon aus, dass mein SQL Code falsch ist. Ich finde aber den springenden Punkt nicht, wieso meine Select Abfrage keine Werte liefert =/

    Danke im Voraus Chris

    Einmal editiert, zuletzt von Christian Koch (29. Januar 2012 um 19:54)

  • Ich schreibe was von mysql_error -> nix
    Ich schreibe was von mysql_real_escape_string -> nix
    Ich schreibe was von richtig debuggen -> nix
    Daraus folgt: weitere Hilfe von mir -> nix

  • ERROR habe ich doch drin?

    real_escape_string brauche ich doch nicht, weil ich keinen select* habe oder?

    richtig debuggen: ich habe doch alles mit einer if-anweisung versehen, um zu sehen wo der fehler liegt ...


    Lokalisiert habe ich den fehler ... er liegt im übertragen der Select-Anweisung in ein Array, denn es geschieht nichts. DIe SQL Skripte werden sauber ausgeführt, es wird auch etwas in der tabelle musik gespeichert, ich habe alle fehler eingeschaltet doch es kommt kein Fehler...

    4 Mal editiert, zuletzt von Christian Koch (29. Januar 2012 um 20:25)

  • Du überprüfst nur, ob was schief gelaufen ist, aber an keiner Stelle warum das so ist. Deshalb lässt man sich die Werte von benutzten Variablen anzeigen, dann würde dir auch einiges klar.

  • Das bedeutet, dass die Abfrage ohne Fehler gelaufen ist. Da du den Weg zur Doku anscheinend nicht schaffst, kommt die Doku mal zu dir:

    Zitat

    Rückgabewerte Für SELECT, SHOW, DESCRIBE, EXPLAIN und andere Anweisungen, die eine Ergebnismenge zurückgeben, gibt mysql_query() eine Kennung resource bei Erfolg zurück oder FALSE bei Fehlern.
    Für alle anderen von SQL Anweisungen wie INSERT, UPDATE, DELETE, DROP, etc, gibt mysql_query() TRUE bei Erfolg zurück oder FALSE bei Fehlern.
    Die zurückgegebene Ergebnis Ressource sollte an mysql_fetch_array() oder andere Funktionen, die mit Ergebnis Tabellen umgehen, übergeben werden, um auf die erhaltenen Daten zuzuzugreifen.
    Nutzen sie mysql_num_rows() um zu erfahren, wieviele Zeilen für eine SELECT Anweisungen zurückgegeben wurden oder mysql_affected_rows() um zu erfahren, wieviele Zeilen von einer DELETE, INSERT, REPLACE oder UPDATE Anweisung betroffen waren.
    mysql_query() wird ebenfalls fehlschlagen und FALSE zurückgeben, wenn der Nutzer nicht die Rechte hat, auf die Tabellen, die in der Anweisung referenziert wurden, zuzugreifen.


    Ich würde mir mal lieber $sqlcat ansehen.

    Achso, noch was. Du benutzt überall <?, ändere das in <?php. Auf vielen Server ist das per Konfiguration (short_open_tag) Pflicht.

  • Ich habe den Fehler gefunden! Es lag an der Reihenfolge der Abfragen und an dem Zeitpunkt an dem, die Variable $aktuell initiiert wurde mit mysql_isert_id... ich kann natürlich nicht die letzte ID wollen, wenn noch garnichts geinsert wurde :)

    Ich habe es diesmal nach dem DEBUGGING WEG von dir gemacht ... es hat geklappt ;) Dank dir

    2 Mal editiert, zuletzt von Christian Koch (29. Januar 2012 um 21:35)

  • Danke dafür :)


    angenommen, ich möchte einen SChritt weiter gehen ... und möchte, dass der User auch eine eigene Kategorie erstellt.

    Meine Idee diesbezüglich wäre diese: wobei ich weiß, dass die if-Anweisung da so falsch ist. Aber von der Idee passt es doch oder?

    wie könnte man dieses, wenn in $cat nichts drin ist (analog zu: es wurde keine kategorie angeklickt), dann nimm $catid ($catid = mysql_insert_id(); nachdem die neue Kategorie in der tabelle category hinzugefügt wurde) realisieren?