Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : sql query



joey.brunner
22-01-2003, 13:55
hi,

wisst ihr warum das datum nicht korrekt in die db geschrieben wird. dort steht nur folgendes datum bei receied drin... auch wenn ich statt $datum die mysqlfunktion now() verwende, steht nur das datum drin. der string von datum ist aber korrekt u zeigt folgendes an: 2003-01-22 14:26:40


+----+---------------------------------------------------------------+-------------+------------+-------+
| id | browser | ip | recieved | refer |
+----+---------------------------------------------------------------+-------------+------------+-------+
| 1 | Mozilla/5.0 (compatible; Konqueror/3; Linux) | 127.0.0.1 | 2003-01-22 | |
| 2 | Mozilla/5.0 (compatible; Konqueror/3; Linux) | 127.0.0.1 | 2003-01-22 | |
| 3 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 4 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 5 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 6 | Mozilla/5.0 (compatible; Konqueror/3; Linux) | 127.0.0.1 | 2003-01-22 | |
| 7 | Mozilla/5.0 (compatible; Konqueror/3; Linux) | 127.0.0.1 | 2003-01-22 | |
| 8 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 9 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 10 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 11 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 12 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Arcor 2.1) | 192.168.0.2 | 2003-01-22 | |
| 13 | Mozilla/5.0 (compatible; Konqueror/3; Linux) | 127.0.0.1 | 2003-01-22 | |
| 14 | Mozilla/5.0 (compatible; Konqueror/3; Linux) | 127.0.0.1 | 2003-01-22 | |
+----+---------------------------------------------------------------+-------------+------------+-------+
14 rows in set (0.00 sec)

hier der code:
.
.
.
$datum = date("Y-m-d H:i:s");
.
.
.
$sql_insert = "INSERT INTO stats (refer, browser, ip, recieved)
VALUES('$refer', '$HTTP_USER_AGENT', '$REMOTE_ADDR', '$datum')";

danke


joey

const_char
22-01-2003, 14:05
1. Poste mal bitte des kompletten Code - inclusive mysql_query usw.
2. lass dir die "Meldung" von mysql_query ausgeben - mysql_error();
3. grundsätzlich trägt man kein Datum in MySQL Datenbanken ein sondern nur timestamps (time();)

joey.brunner
22-01-2003, 14:15
hi,

den kompletten code poste ich mal nicht, weil das ein wenig zu viel waere. aber ich hab die wichtigen stellen in ein kleines testskript geschrieben u das poste ich ;) das ergebnis ist das selbe.

timestamps kann ich nicht benutzten (vorgabe projektleiter).

fehlermeldung kann ich nicht posten, da es keine gibt. hab ich ja auch nie behauptet ;)
$refer = $HTTP_REFERER;
echo "$HTTP_REFERER<br>";
echo "<center><b>Herzlichen Willkommen auf meinen Statistikseiten</center></b><br><br>";

echo "Zu Testzwecken erlauben wir uns, einige Dinge aus der aktuellen Session herauszulesen und diese danach in eine Datenbank zu schreiben<br><br>";

$datum = date("Y-m-d H:i:s");

echo "Heutiges Datum: $datum<br>";
echo "Ihre IP-Adresse lautet: $REMOTE_ADDR<br>";
echo "Sie benutzen folgenden Browser: $HTTP_USER_AGENT<br>";
echo "<br>Diese Daten werden nun in unsere Datenbank geschrieben!<br>";


$db = @mysql_pconnect($db_host, $db_user, $db_pass) or die("Leider konnte die Verbindung zum Datenbank-Server $db_host nicht hergestellt werden");
@mysql_select_db($datenbank, $db) or die ("Leider konnte die Verbindung zur Datenbank $datenbank nicht hergestellt werden!");

$sql_insert = "INSERT INTO stats (refer, browser, ip, recieved)
VALUES('$refer', '$HTTP_USER_AGENT', '$REMOTE_ADDR', '$datum')";



$result = mysql_query($sql_insert, $db);
if($result)
{
echo "Datensatz ist erfolgreich eingef&uuml;gt worden.\n<br>";
}
else
{
echo "Beim Versuch den Datensatz einzuf&uuml;gen ist ein Fehler aufgetreten.<br>\n
Der Fehler hat folgende ID:
<b>".mysql_errno($db)."</b><br>\n
Die Fehlermeldung lautet:
<b>".mysql_error($db)."</b>";
}
?>

herzlichen dank

const_char
22-01-2003, 14:28
fehlermeldung kann ich nicht posten, da es keine gibt. hab ich ja auch nie behauptet

hi

ich habe auch nie behauptet, dass du die "Fehlermeldung" posten sollst sondern nur die "Meldung" die dir mysql_error" ausgibt. Es kann durchaus sein, dass ein "Fehler" oder ein kleiner nichtgewollter Syntaxfehler besteht oder sonstwas. ;) lass am besten einfach die kleine ifbedingung weg und schau was kommt.

beim überfliegen des codes habe ich keinen fehler gefunden ich schau aber noch.

echo "Datensatz ist erfolgreich eingefügt worden.\n<br>";

was sucht da das "\n"?

mach das weg :)

wieso nimmst du pconnect und nicht nur conncet?

Gaert
22-01-2003, 15:52
@Joey.Brunner:
Ich schätze du hast DATE als Feldtyp angegeben... der sieht bei MySQL nämlich YYYY-MM-DD aus! Ändere den Feldtyp in Varchar und schon sollte es gehen!
Es ist übrigens wirklich sinnvoller das Datum als Timestamp zu speichern (wie Mehlvogel schon sagte), weil du damit flexibler bist.

@const_char

was sucht da das "\n"?
Das \n erzeugt einen Zeilenumbruch vor <br>... wüsste nicht was daran verkehrt sein sollte... schließlich soll der HTML output ja auch lesbar sein!

pconnect ist u.U. schneller als connect (wenn nämlich schon ne Verbindung offen ist)... allerdings sollte man den wait_timeout bei mysql niedrig einstellen, da man sonst schnell ziemlich viele Verbindungen offen haben kann.

const_char
22-01-2003, 16:05
\n ist doch kein html

joey.brunner
22-01-2003, 16:25
jo jetzt gehts danke..

die fragen zum code wurden ja von gaert schon beantwortet.

danke

joey

Gaert
22-01-2003, 16:43
\n ist doch kein html
Nein "\n" ist kein HTML!
"\n" wird auch nicht als "\n" ausgegeben sondern erzeugt einen Zeilenumbruch... "\n\r" einen Zeilenumbruch mit Wagenrücklauf... "\t" einen Tabulator usw.
Probier einfach mal das hier aus, und schau dir mal den Quelltext der Ausgabe an!



<?php
echo "Hallo dieser Text steht in einer Linie!\n";
echo "<br>\n<br>\n";
echo "Dieser\nText\nsteht\nin\nmehreren\nLinien!\n";
?>