Log in der DB

Hallo,

Habe ein Script indem die IP Adresse und Datum des Zutritts in einer DB abgespeichert wird wenn man die Seite aufruft.
Jedoch entstehen 2 Probleme:

Siehe Bilder:
Problem 1: Ip Adresse wird nicht richtig angezeigt
Problem 2: Das Datum wird immer als 0000:00:00 ausgegeben.

Hier das Script:

[PHP]

<?php $jetzt = time(); echo "Zugriff " . date("d.m.Y H:i:s",$jetzt) . "
"; $ip = $_SERVER["REMOTE_ADDR"]; echo "über IP-Adresse: $ip"; $con = mysqli_connect("", "root"); mysqli_select_db($con, "cdcol"); $sql = "insert log (ipaddr) values('$ip')"; mysqli_query($con, $sql); mysqli_close($con); ?>

[/PHP]

Hier die Tabellen-Struktur der Datenbank: Siehe 3. Bild

PS: Im Buch das ich lese ist genau dieses Script vorhanden und genau gleich.

Problem 1: Ip Adresse wird nicht richtig angezeigt

::1

Anstatt 127.0.0.1 wird bei IPv6 die Adresse ::1 verwendet.

Problem 2: Das Datum wird immer als 0000:00:00 ausgegeben.

[PHP]$date = new \DateTime();
echo "Zugriff " . $date->format(„Y-m-d H:i:s“) . „
“;[/PHP]
Entweder befüllst du dein Datumfeld damit oder du setzt als Standard „CURRENT_TIMESTAMP“ und ein „ON UPDATE CURRENT_TIMESTAMP“.

Ich gehe davon aus das du als Standard „0000-00-00 00:00:00“ gesetzt hast und ein „ON UPDATE CURRENT_TIMESTAMP“ wie man es auf dem Bild sieht.

::1 ist deine IPv6 Adresse - 127.0.0.1 war die IPv4.

Du hast als DEFAULT für dein tstamp Feld „0000-00-00 00:00:00“.
Richtig wäre CURRENT_TIMESTAMP.

Danke ! Und mit welchen Code könnte ich die ipv4 oder die richtige IP Adresse nehmen ?

Wenn der aufrufende Nutzer IPv6 hat, dann ist das auch seine richtige IP. Du musst hier das nehmen was hier kommt, egal ob IPv4 oder IPv6.

Habe grad noch ein Problem und keine Bedarf dafür extra ein neuen Therad aufzumachen.

Wie kann ich mehrer Angaben in einer Db speichern? Bei mir klappt es so nähmlich nicht:

[PHP]

<?php $jetzt = time(); echo "Zugriff " . date("d.m.Y H:i:s",$jetzt) . "
"; $ip = $_SERVER["REMOTE_ADDR"]; echo "über IP-Adresse: $ip
"; $port = $_SERVER["REMOTE_PORT"]; echo "Port: $port
"; $browser = $_SERVER["HTTP_USER_AGENT"]; echo "Browser: $browser
"; $con = mysqli_connect("", "root"); mysqli_select_db($con, "daten"); $sql = "insert log (ip) values('$ip')"; $sql .= " insert log (port) values('$port')"; $sql .= " insert log (browser) values('$browser')"; mysqli_query($con, $sql); mysqli_close($con); ?>

[/PHP]

Kannst du doch alles in einem Statement verarbeiten.

Ala:

INSERT INTO table_name (column1,column2,column3,…)
VALUES (value1,value2,value3,…);

Es erscheint keine Fehlermeldung aber es funktoniert nicht. Bzw. es wird kein Datensatz hinzugefügt. Nur mit IP klappt das komischerweise.

[PHP]
$sql = „INSERT INTO log (ip,port,browser) VALUES(‚$ip,$port,$browser‘)“;
or
$sql = „INSERT INTO log (ip,port,browser) VALUES($ip,$port,$browser)“;
[/PHP]

Versuchs mal so
[PHP]INSERT INTO log (ip,port,browser) VALUES(‚$ip‘,‚$port‘,‚$browser‘)[/PHP]

und setz mal:
[PHP]error_reporting(E_ALL);
init_set(‚display_errors‘, 1);[/PHP]

Der Name „log“ steht in PHP wie woanders auch für Logarithmus. Würde ich jetzt nicht unbedingt verwenden.

Jo danke hat funktoniert :slight_smile: