Datensatz ID weitergeben und ansprechen

OhneMaske

Grünschnabel
Hallo,

mit dem "gegoogelten" PHP-Code

PHP:
<?php
$eintrag = "INSERT INTO anmeldung
(benutzer, datum, zeit)
VALUES
('$benutzer', $datum', '$zeit')";
$eintragen = mysql_query($eintrag);
?>

lasse ich in einer MySql Datenbank einen Datensatz anlegen. Das funktioniert auch. Nach dem absenden wird auf eine folge Seite weitergeleitet. Nun möchte ich innerhalb diesem Code die angelegete ID Nummer auf der nächsten Seite ansprechen, um Datum/Zeit anzeigen zulassen (ID selbst braucht dort nicht angezeigt werden). Dazu habe ich auch "mysql_insert_id" gegoogelt aber leider bekomme ich es nicht hin, das in meinen PHP-Code erfolgreich auzunehemen. Oder muss das evtl. in einen neuen Code! Wenn ja wie BITTE! Das ID Feld heißt "anID" und ist "auto_increment"!

Bestimmt kann mir hier doch jemand weiterhelfen - und meinen Code entsprechend ändern oder ergänzen!

VIELEN DANK! Ein PHP-Anfänger!
 
Die ID des zuletzt eingefügten Datensatzes erhältst du so:
PHP:
<?php
// deine Nutzerdaten
$host     = '';
$username = '';
$password = '';
$database = '';

$link = mysql_connect($host, $username, $password) or die(mysql_error());
mysql_select_db($database, $link);

mysql_query('INSERT INTO `anmeldung` (`benutzer`, `datum`, `zeit`) VALUES ("'.$benutzer.'", "'.$datum.'", "'.$zeit.'")', $link);

// Letzte hinzugefuegte ID ermitteln
$id = mysql_insert_id($link);
?>

Weitergeben kannst du ID per Cookie oder per Session (ich nutze hier Session):
PHP:
<?php
session_start();
$_SESSION['id'] = $id;
?>

Auf der nächsten Seite kannst du die ID so abrufen:
PHP:
<?php
session_start();
$id = $_SESSION['id'];
?>
 
SUPER! DANKE!:)

Es hat geklappt - musste nur ein paar Änderungen machen.
Auf den Folgeseiten arbeite ich ja mit Dreamweaver CS3 > Datenbankanbindung weiter. Innerhalb des angelegten Recordset gab es Probleme beim Filtern, bis ich die passende Einstellung gefunden hatte. Diese sieht jetzt so aus:
...
$colname_rsAnmeldung = "session_start()";
if (isset($_SESSION['id'])) {
$colname_rsAnmeldung = $_SESSION['id'];
}
...

Auf der Anmeldeseite habe ich den PHP-Code wie folgt angepasst:

PHP:
<?php
//Benutzerdaten
$host     = 'xxx';
$username = 'xxx';
$password = 'xxx';
$database = 'xxx'; 

$link = mysql_connect($host, $username, $password) or die(mysql_error());
mysql_select_db($database, $link); 

//Datensatz anlgen
$eintrag = "INSERT INTO anmeldung
(benutzer, kennwort, datum, zeit)
VALUES
('$name', '$pwd',  '$datum', '$zeit')";
$eintragen = mysql_query($eintrag);

//Letzte hinzugefuegte ID ermitteln
$id = mysql_insert_id($link);
?>
Unklar war mir dabei nur, warum ich die Benutzerdaten nochmal her eingeben musste - diese sind ja auf der Seite bereits vorhanden. Sonst hätte der alte Code aus meinem ersten Beitrag ja nicht funktioniert (den habe ich jetzt natürlich entfernt). Aber egal es funktioniert ja jetzt!

DANKESCHÖN FÜR DIE SCHNELLE HILFE

Bis zum nächsten Problem....:):):)
 
Und da ist es schon - schneller als gedacht!

Auf der Seite - mit der übergebenen ID - also "start.php" soll nun auch ein Abmeldelink. Von dort soll man auf eine Seite "abgemeldet.php" gelangen. Soweit so klar. Nun sollte aber der vorher angelegte Datensatz auch aktualisiert werden. Dazu gibt es in der Tabelle die Spalten "AbDatum" + "AbZeit"!

Wie funktioniert das nun, dass bei einem klick auf den Abmeldebutton - der Datensatz aktualsiert wird - natürlich dann mit der Abmeldezeit - und gleichzeitig die Seite "abgemeldet.php" aufgerufen wird. Auf dieser Seite selbst steht nichts besonderes nur so "Auf Wiedersehen..." usw.

Ist es evtl. auch möglich, dass ein Hinweis Fenster aufgeht, sofern der User nicht auf den Abmeldebutton klickt, sondern über das "X" im Browser! So nach dem Motto "Sie sollten eine sichere Abmeldung über den Button...blablabla... durchführen!

VIELEN DANK IM VORAUS für eine Hilfestellung!
 
Hi

ich verstehe deine erste Frage nicht so ganz. Wenn man sich abgemeldet hat und somit Sessions etc gelöscht sind willst du trotzdem noch eine Datenbankabfrage durchführen?
Zum zweiten:
HTML:
<body onbeforeunload="return('Seite wirklich verlassen?')">
 
Das ist letztendlich nichts, was schwer zu verwirklichen ist. Zum Abmelden verwende ein Formular oder einen Verweis, der in etwa so aussieht:
HTML:
<!-- Verweis -->
<a href="start.php?do=abmelden">Abmelden</a>

<!-- Formular -->
<form method="post" action="">
  <div>
    <input type="submit" name="do" value="abmelden" />
  </div>
</form>
Und das passende Skript dazu:
PHP:
<?php
session_start();

/**
 * Datenbankaufbau - kennst du jetzt schon
 */

// per Verweis
$do = $_GET['do'];

// per Formular
$do = $_POST['do'];

if($do === 'abmelden') {
    mysql_query('UPDATE `anmeldung` SET `AbDatum` = CURDATE(), SET `AbZeit` = CURTIME() WHERE `anID` = '.$_SESSION['id'], $link);
    
    session_unset();
    session_unregister();
    session_destroy();
    
    header('Location: abgemeldet.php');
}
?>

Was passiert hier? Du verbindest dich mit der Datenbank und aktualisierst den Datensatz mit der dir bekannten ID. Bei diesem Datensatz setzt du die Spalten AbDatum und AbZeit auf die aktuelle Zeit mit den Zeit- und Datumsfunktionen von MySQL. Danach beendest du die Sitzung und leitest auf die Seite abgemeldet.php um.
 
Zuletzt bearbeitet:
Hallo,

also zu meinem Verständnis:

1.) Ich mache auf der Seite "start.php" einen Verweis (auf sich selbst?) auf diese Seite soll ja der Abmeldelink!
<a href="start.php?do=abmelden">Abmelden</a>

2.) Der PHP-Code kann in dieselbe Datei wo auch der Datensatz einfügen ist - laut Beitrag #3!

3.) Oder muss der in eine neue Datei - zB "ausloggen.php" Oder muss die irgendwie "do=abmelden" oder so ähnlich heißen. Was bedeutet das "do" von 1.)

Habe ich noch nicht so ganz verstanden!
 
Hi

wenn du die Navigation mit php machst, das heißt die Seiten includest, kannst du das ?do=abmelden wie folgt nutzen:
PHP:
$do = ( isset($_GET["do"]) )?$_GET["do"]:"index";
$file = "./pages/".$do.".php";
if( file_exists($file) )
  include_once $file;
else
  include_once "404.php";
 
Wie bitte! Ich verstehe nur Bahnhof!

Ich habe eine Seite mit Namen "start.php" - dort soll ein "TEXTLINK" mit Namen "Abmelden" hin!
Zumindest habe ich mir das so gedacht - sollte das so nicht funktionieren - wie soll ich es dann sonst machen!?
 
Hallo,

also ich bekomme es nicht hin. Folgendes habe ich jetzt ausprobiert:

1.) Link auf start.php = <a href="start.php?do=abmelden">Abmelden</a>

2.) Datei login.php den PHP-Code ans Ende eingefügt (mit Benutzerdaten) in dieser Datei ist jetzt der Code für Datensatz einfügen und Datensatz aktualisieren.

Alle Dateien liegen im gleichen Ordner. Nach dem anmelden, wird der Datensatz in die Tabelle eingetragen und auf der Seite angezeigt.
Nach dem abmelden wird weder ein Datensatz aktualisiert noch erfolgt ein Wechsel auf die Seite "abgemeldet.php".

Das Login Script habe ich ja aus diesem Forum hier:
http://www.tutorials.de/forum/php-tutorials/9684-php-mysql-login-system-mit-sessions.html

Die komplette login.php sieht jetzt so aus:
PHP:
<?php  
// Session starten 
session_start (); 

// Datenbankverbindung aufbauen  
$connectionid  = mysql_connect ("xxx", "xxx", "xxx");  
if (!mysql_select_db ("datenbank", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

$sql = "SELECT ".  
    "BenutzerId, BenName, nName, vName, Email, GebDat, Hobbys, Rechte ".  
  "FROM ".  
    "tbl_benutzer ".  
  "WHERE ".  
    "(BenName like '".$_REQUEST["name"]."') AND ".  
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')";  
$result = mysql_query ($sql);  

if (mysql_num_rows ($result) > 0)  
{  
  // Benutzerdaten in ein Array auslesen.  
  $data = mysql_fetch_array ($result);  

  // Sessionvariablen erstellen und registrieren  
  $_SESSION["user_benutzerid"] = $data["BenutzerId"];  
  $_SESSION["user_benname"] = $data["BenName"];  
  $_SESSION["user_nname"] = $data["nName"];  
  $_SESSION["user_vname"] = $data["vName"];
  $_SESSION["user_email"] = $data["Email"];  
  $_SESSION["user_gebdat"] = $data["GebDat"];  
  $_SESSION["user_hobbys"] = $data["Hobbys"];  
  $_SESSION["user_rechte"] = $data["Rechte"];  
  

  header ("Location: intern.php");  
}  
else  
{  
  header ("Location: formular.php?fehler=1");  
}  
?>

<?php
//Formularfelder als Variable
  $name = $_POST["name"];
  $pwd = $_POST["pwd"];
  $ip = $_POST["ip"];
  $datum = $_POST["datum"];
  $zeit = $_POST["zeit"];
  $user = $_POST["user"];
  $browser = $_POST["browser"];
  $abdatum = $_POST["abdatum"];
  $abzeit = $_POST["abzeit"];
?>

<?php
//Benutzerdaten
$host     = 'xxx';
$username = 'xxx';
$password = 'xxx';
$database = 'xxx'; 

$link = mysql_connect($host, $username, $password) or die(mysql_error());
mysql_select_db($database, $link); 

//Datensatz anlgen
$eintrag = "INSERT INTO tbl_anmeldung
(Benutzer_F, IPAdress, Datum, Zeit, User, Browser, AbDatum, AbZeit)
VALUES
('$name', '$ip', '$datum', '$zeit', '$user', '$browser', '$abdatum', '$abzeit')";
$eintragen = mysql_query($eintrag);

//Letzte hinzugefuegte ID ermitteln
$id = mysql_insert_id($link);
?>

<?php
session_start();
$_SESSION['id'] = $id;
?>

<?php
session_start(); 
//Benutzerdaten
$host     = 'xxx';
$username = 'xxx';
$password = 'xxx';
$database = 'xxx'; 

// per Verweis
$do = $_GET['do']; 

// per Formular
$do = $_POST['do'];
 
if($do === 'abmelden') {    
mysql_query
('UPDATE `tbl_anmeldung` SET `AbDatum` = CURDATE(), SET `AbZeit` = CURTIME() WHERE `AnmeldeID` = '.$_SESSION['id'], $link);        

session_unset();    
session_unregister();    
session_destroy();        

header('Location: abgemeldet.php');
}
?>
Da ich mittlerweile einige Änderungen durchgeführt habe, stimmen die Felder nicht mehr alle mit den Einträgen in vorherigen Beiträgen überein.
In der MySQL Tabelle hatte ich auch die AbDatum und AbZeit Felder ausprobiert als "Date" bzw. "Time" oder als "VARCHAR (10) beides ohne Erfolg. Es wird dort kein Datensatz aktualisiert. Wie gesagt das Datensatz einfügen funktioniert einwandfrei!

Wer kann mir sagen, wo der Fehler liegt!
 
Zurück