• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bei Erstellung ID des aktuellen (neuen) Datensatzes von SQL-Tabelle ermitteln

xSTVNx

Mitglied
Ich habe ein Formular mit dem man einen neuen Datensatz in eine SQL-Tabelle erstellen kann.

Nach erfolgreichem Erstellen, soll der User an eine bestimmte Seite weitergeleitet werden bzw. an eine Seite, die den Eintrag wieder ausgibt. (Dafür brauche ich die aktuelle ID um an die korrekte URL weiterleiten zu können.)

Ich weiß nun nicht, wie ich $link_id ermitteln kann... Also wie kann ich die ID des neu erstellten Datensatzes abfragen?

PHP:
if( isset($_POST["send_form_add_link"]) && $_POST["send_form_add_link"] == "true" ):        mysql_query("        INSERT INTO link (            link_about,            link_datetime_add,            link_id,            link_name,            link_url        ) VALUES (            '$_POST[link_about]',            now(),            '',            '$_POST[link_name]',            '$_POST[link_url]'            )    ");    mysql_close();        $link_id = "???";        header("Location: ".$dev_root."link/".$link_id."");endif;

Code:
if( isset($_POST["send_form_add_link"]) && $_POST["send_form_add_link"] == "true" ):
    
    mysql_query("
        INSERT INTO link (
            link_about,
            link_datetime_add,
            link_id,
            link_name,
            link_url,
            user_id
        ) VALUES (
            '$_POST[link_about]',
            now(),
            '',
            '$_POST[link_name]',
            '$_POST[link_url]',
            '$session_user_id'
            )
    ");
    mysql_close();
    
    $link_id = "???";    
    header("Location: ".$dev_root."link/".$link_id."");
endif;

Ich kann ja nicht einfach die SQL-Tabelle auf den letzten Eintrag abfragen - ich meine was ist, wenn 2 User "gleichzeitig" einen Datensatz erstellen?

Danke!
xSTVNx

EDIT: Habe den Code nochmal via CODE-Tag gepostet, da der CODE via PHP-Tag sehr unübersichtlich dargestellt wird...
 
Mit mysql_insert_id().

Allerdings rate ich dir dringends an, nicht mehr mysql_*-Funktionen zu benutzen. Benutze stattdessen PDO oder mysqli, php.net rät auch ganz stark dazu, da es früher oder später abgeschafft werden wird.
 
Guck mal hier: MySQL :: MySQL 5.1 Referenzhandbuch :: 24.2.13.3 Wie erhalte ich die eindeutige Kennung für die letzte eingefügte Zeile?

Das mit der header()-Funktion klappt meines Wissens nicht so, wie Du es machst. Location erfordert die komplette Uri und darf auch keine GET-Parameter enthalten. Bei den Parametern bin ich mir aber nicht ganz sicher, aber das steht sicher in dem Link aus dem vorigen Post von mir.

Was in $dev_root steht, weiß ich nicht, allerdings spricht nichts dagegen, GET-Parameter einzufügen und jeder Browser unterstützt mittlerweile relative URLs als Parameter.
 
Was in $dev_root steht, weiß ich nicht, allerdings spricht nichts dagegen, GET-Parameter einzufügen und jeder Browser unterstützt mittlerweile relative URLs als Parameter.
Also was in $dev_root steht, das weiß ich natürlich auch nicht. Allerdings sehe ich den Punkt vor der Variablen. Und das mittlerweile jeder Browser relative URLs versteht, ist mir auch bewusst. Allerdings scheint Dir nicht bewusst zu sein, dass die header()-Funktion ja vom Server verarbeitet wird, und mit dem Browser nu überhaupt nüscht zu tun hat. Und es wird für header("Location: " auch keine URL verlangt, sondern eine URI.

Nachtrag: Ich glaub da hab ich mich vertan, anscheinend scheint das zu funktionieren, wenn ich das so richtig in anderen Foren quergelesen habe.
 
Zuletzt bearbeitet:
Dem Server sind die Header vollkommen egal. Header werden an den Client geschickt. Dass du hier sowas krass Falsches sagst und mich gleichzeitig auf diesen minimalen Fehler hinweist, dass es hier um nicht URL und sondern um eine URI geht, kann ich nur belächeln.
 
Also ich wusste doch, dass ich das irgendwo gelesen habe.
14.30 Location

The Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource. For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server's preferred URI for automatic redirection to the resource. The field value consists of a single absolute URI.
Quelle: HTTP/1.1: Header Field Definitions

Aber jetzt hoffen wir doch mal, dass unsere Hinweise, so widersprüchlich sie auch sind/waren dem TE weitergeholfen haben.
 
Das habe ich auch gar nicht angezweifelt, aber die Aussage, dass die Header nur den Server und nicht den Browser interessieren, ist vollkommener Humbug. Im Übrigen war das gar nicht die Frage des TEs.
 
Zurück
Oben