Grolli: Trotz wechseln der ID werden dieselben Werte ausgelesen.

Hi Leute,

Ich bräuchte mal eure Hilfe. Hab jetzt ein paar Stunden im Internet gesucht aber irgendwie weiss ich nicht weiter.

Ich habe auf meinem Server mehrere Tabellen schon einegfügt. Hab dann die Abfragescripte geschrieben. Das Auslesen klappt wunderbar.
Jetzt ist die Tabelle bei mir nach ID sortiert und die Links richten sich nach der ID.

Also in der Form  /Vereinsprofil?ID=4

Wenn ich jetzt aber die ID ändere müsste ja normalerweise der nächste Datensatz geladen werden, doch er lädt dann trotzdem wieder nur den ersten. Hab keine Ahnung woran das liegt.

Meine einzige Vermutung war, dass an diesem hier liegen kann

//Beginn Datenbankabfrage

include ("logindb.php");

$abfrage17 = "SELECT * FROM Verein";
$ergebnis17 = mysql_query($abfrage17);
$row17 = mysql_fetch_object($ergebnis17);

//Ende Datenbankabfrage

Hab auch da nach Fehlern gesucht und viel herumprobiert, doch komme nicht weiter.
Also Hinweis wenn ich hinter FROM Vereine noch mit WHERE eine Spalte auswähle gibt er mir die den Datensatz der ID 2 aus.

Ich hoffe ich konnte das Problem einigermaßen erklären. Ich hoffe einfach mal einer hat ne Idee für mich.

Danke euch.

  1. Hi Leute,

    Hi
    Ähm, also du tutst folgendes:

    //Beginn Datenbankabfrage

    include ("logindb.php");

    $abfrage17 = "SELECT * FROM Verein";

    // Gib' mir alle Daten aus allen Datensätzen in der Tabelle "Verein"

    $ergebnis17 = mysql_query($abfrage17);
    $row17 = mysql_fetch_object($ergebnis17);

    //Lese den ersten Datensatz für mich aus

    //Ende Datenbankabfrage

    Also Hinweis wenn ich hinter FROM Vereine noch mit WHERE eine Spalte auswähle gibt er mir die den Datensatz der ID 2 aus.

    Das musst/solltest du aber genau so tun...
    $abfrage17 = "SELECT * FROM Verein WHERE ID = ".$_GET['ID'];
    Dabei musst du die Groß/Kleinschreibung beachten, also das erste "ID" muss so geschrieben sein, wie die Spalte in deiner Datenbank und das zweite "ID" muss so geschrieben sein, wie der in der URI übergebene Wert (/Vereinsprofil?ID=4).

    1. Das musst/solltest du aber genau so tun...
      $abfrage17 = "SELECT * FROM Verein WHERE ID = ".$_GET['ID'];
      Dabei musst du die Groß/Kleinschreibung beachten, also das erste "ID" muss so geschrieben sein, wie die Spalte in deiner Datenbank und das zweite "ID" muss so geschrieben sein, wie der in der URI übergebene Wert (/Vereinsprofil?ID=4).

      Super danke dir. Jetzt klappts. Also war ich schon richtig mit dem WHERE. Danke nochmals für die schnell und gute Hilfe.

    2. echo $begrüßung;

      Das musst/solltest du aber genau so tun...
      $abfrage17 = "SELECT * FROM Verein WHERE ID = ".$_GET['ID'];

      So sollte man das nicht tun. Du hast weder vorher geprüft, ob $_GET['ID'] nur gewünschte Werte enthält (das könnte man mit intval() sicherstellen) noch hast du dafür Sorge getragen, dass die unerwünschten Werte keinen Schaden anrichten können (Stichwort: SQL-Injection). Werte, die in eine SQL-Query eingefügt werden sollen, müssen SQL-gerecht maskiert werden. Dazu eignet sich für MySQL mysql_real_escape_string(). Am besten wendet man das auf alle in die SQL-Query einzufügenden Eingabewerte an, auch die vorher geprüften.

      $abfrage17 = sprintf("SELECT * FROM Verein WHERE ID = '%s'", mysql_real_escape_string($_GET['ID']));

      Man sollte ebenfalls beachten, dass ein Feature namens Magic Quotes vorgibt, dies bereits zu tun, es aber an der falschen Stelle macht (generell für alle Eingabewerte) und dann auch noch unvollständig (zumindest für MySQL). Mein Vorschlag: Magic Quotes deaktivieren und das Maskieren ordentlich vornehmen.

      echo "$verabschiedung $name";

      1. So sollte man das nicht tun. Du hast weder vorher geprüft, ob $_GET['ID'] nur gewünschte Werte enthält noch hast du dafür Sorge getragen, dass die unerwünschten Werte keinen Schaden anrichten können (Stichwort: SQL-Injection).

        Da hast du vollkommen Recht!
        Ich versuch' das nächste Mal d'ran zu denken.