MySQL-Frage

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • hi,

    hab mir mit php und mysql ein gästebuch programmiert, jetz will ich über ein admin-formular die einträge verwalten.
    hier mein code:

    ich nehme mal an der fehler liegt an der for-schleife...
    wenn ich mein skript ausführ setzt er nur den ersten eintrag gleich null sonst macht er nichts. er soll aber alle einträge updaten.

    danke

  • Keine Lösung Deines Problems (wahrscheinlich), aber paar Kommentare dazu:
    1) Code ist sehr unübersichtlich. Musste ihn zuerst formatieren um überhaupt irgendwas sagen zu können.
    2) Diese Art von SQL-Parameterquoting ist sehr gefährlich, weil SQL-Injections ohne Probleme möglich sind. Es gibt in PHP eine Funktion für Parameter quoting, die mir jetzt auf die schnelle aber nicht einfällt.
    3) Schau Dir mal arrays von Parametern an. Dann ist die Concatenation von name + $id nicht notwendig.
    4) In der WHILE-Schleife setzt Du x-mal die Variablen, aber am Ende kommt nur ein Wert heraus (beim letzten Durchlauf). Oder aber es kommt gar kein Wert heraus, wenn die SELECT Query nichts zurückliefert. Dann versuchst Du in der FOR-Schleife den (gleichen!) Wert x-mal in die Datenbank zu schreiben. Verstehe das Konzept nicht.
    5) Die Funktion soll wohl mysql_num_rows() heißen.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Brrrr.

    Wenn du $variable in einem String durch den Wert ebendieser Variablen ersetzen willst, musst du Double Quotes verwenden statt Single Quotes. $_POST['id$id'] liefert nämlich aus dem Array $_POST genau das Element mit Index id$id und nicht id1, id2, usw. $_POST['id$id'] könnte besser funktionieren.

    Davon mal abgesehen versuchst du, jedes Mal, wenn du das UPDATE-Statement ausführst, alle Tabellenzeilen zu verändern (es fehlt eine WHERE-Bedingung). Daher wird nur die erste Zeile "aktualisiert", beim Rest kollidieren die Werte des (hoffentlich vorhandenen) Primärschlüssels.

    Was fällt mir sonst noch auf?

    • SQL-Injections sind was Schönes. Braucht nur wer die POST-Daten manipulieren und kann interessante Datenbankabfragen absetzen.
    • Zugangsdaten zur Datenbank in jedem Skript separat sind ein Käse. Das Datenbankpasswort irgendwann mal zu ändern, wird ziemlich aufwändig.
    • Hast du irgendwo eine Überprüfung, ob der Benutzer, der den POST-Request abgeschickt hat, überhaupt die Berechtigung besitzt, die Datenbankdaten zu manipulieren?
    • Trennung von HTML und PHP ist natürlich auch was Schönes, Templates und so.
  • So wie ich das nachvollziehen kann, hast du einen großen Strukturfehler: Die Variablen $id_new, $name_new, $inhalt_new und $comment_new kriegen beim zweiten Aufruf der Seite die Inhalte des untersten Eintrags aus der Liste. Du überschreibst sie nämlich bei jedem Schleifendurchlauf immer - und immer wieder. Ist das Absicht? :confused:

    Folgender Denkansatz möge dich auf die richige Bahn führen: Die oben genannten Variablen brauchst du in der zweiten Schleife! Dort musst du die korrigierten Gästebucheinträge aus $_POST auslesen. Nicht in der While-Schleife.

    Und die zweite Abfrage sollte so aussehen:

    PHP
    $eintrag = "UPDATE Tabelle SET name='$name_new', inhalt='$inhalt_new', comment='$comment_new' WHERE id='$id_new'";

    Ich gehe hierbei davon aus, dass die Spalte id der sich selbst automatisch erhöhender Primärschlüssel ist. Den solltest du also nicht verändern, sondern als Filterbedingung in der WHERE-Klausel benutzen.

    Viel Erfolg mit deinem Gästebuch wünscht dir DJ spinball!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!