Supportnet / Forum / Skripte(PHP,ASP,Perl...)
datensatz löschen
Frage
Hi , undzwar s schreibe ich eine onlineliste für mitglieder , update der db geht , und das schreiben auch , leider löscht er mir den datensatz nicht :
kann mir jemand helfen? ich finde den fehler einfach nicht
Antwort 1 von jackdanielz
$timestamp=time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
$tabellenname="onlineliste";
$sql="SELECT * FROM $tabellenname ORDER BY ID DESC";
$result=mysql_query($sql,$conn);
$anzahl=mysql_num_rows($result);
for($i=0;$i<$anzahl;$i++)
{
$ergebnis[$i]=mysql_fetch_array($result);
}
for($i=0;$i<$anzahl;$i++)
{
if($ergebnis[$i]['timestamp']+300 < $timestamp)
{
$sql="DELETE FROM onlineliste WHERE nickname=".$ergebnis[$i]['nickname']."";
$result=mysql_query($sql,$conn);
}
}
if($_COOKIE['user'])
{
$neueruser=$_COOKIE['user'];
for($i=0;$i<$anzahl;$i++)
{
if($ergebnis[$i]['nickname']==$neueruser)
{
$meld=$neueruser;
$id=$ergebnis[$i]['ID'];
}
}
if($meld)
{
$sql="UPDATE onlineliste SET zeit='".$uhrzeit."' WHERE ID=".$id;
$result=mysql_query($sql,$conn);
}
if(!$meld)
{
$sql="INSERT INTO $tabellenname (nickname, zeit, timestamp) values ( '".mysql_real_escape_string($neueruser,$conn)."', '".$uhrzeit."', ".$timestamp.")";
$result=mysql_query($sql,$conn);
}
}
for($i=0;$i<=count($ergebnis);$i++)
{
echo $ergebnis[$i]['nickname']." - ".$ergebnis[$i]['zeit']."<br>";
}
?>
Antwort 2 von jackdanielz
sorry das war der alte code , das ist der neue :
<?php
require('db_verbindung.php');
$timestamp=time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
$tabellenname="onlineliste";
$sql="SELECT * FROM $tabellenname ORDER BY ID DESC";
$result=mysql_query($sql,$conn);
$anzahl=mysql_num_rows($result);
for($i=0;$i<$anzahl;$i++)
{
$ergebnis[$i]=mysql_fetch_array($result);
}
if($_COOKIE['user'])
{
$neueruser=$_COOKIE['user'];
for($i=0;$i<$anzahl;$i++)
{
if($ergebnis[$i]['nickname']==$neueruser)
{
$meld=$neueruser;
$id=$ergebnis[$i]['ID'];
}
}
if($meld)
{
$sql="UPDATE onlineliste SET zeit='".$uhrzeit."' WHERE ID=".$id;
$result=mysql_query($sql,$conn);
}
$blub=$ergebnis[$i]['timestamp']+300;
for($i=0;$i<$anzahl;$i++)
{
if($blub < $timestamp)
{
$sql="DELETE FROM onlineliste WHERE ID=".$id;
$result=mysql_query($sql,$conn);
}
}
if(!$meld)
{
$sql="INSERT INTO $tabellenname (nickname, zeit, timestamp) values ( '".mysql_real_escape_string($neueruser,$conn)."', '".$uhrzeit."', ".$timestamp.")";
$result=mysql_query($sql,$conn);
}
}
for($i=0;$i<=count($ergebnis);$i++)
{
echo $ergebnis[$i]['nickname']." - ".$ergebnis[$i]['zeit']."<br>";
}
?>Antwort 3 von Woo
Moin,
sieht eg. richtig aus.
Mach am besten mal einen
sieht eg. richtig aus.
Mach am besten mal einen
echo $sql; und gib das mal in phpMyadmin als SQL Befehl ein, dann kriegst du evtl. auch eine Fehlermeldung.Antwort 4 von ClemBra
for($i=0;$i<$anzahl;$i++)
{
if($blub < $timestamp)
{
$sql="DELETE FROM onlineliste WHERE ID=".$id;
$result=mysql_query($sql,$conn);
}
}Alleine dieser bereich ist Schwachsinn, da in der Schleife nichts gemacht wird, als nur x mal hintereinander die gleiche ID, nämlich die des aktuellen Users, gelöscht wird.
schreib doch folgendes über deinen code
$timeout=300;
$sql="DELETE FROM `" . $tabellenname . "` WHERE `timestamp`<" . (time() - $timeout);
$result = mysql_query($sql);
if (!$result) {
echo "Datenbankfehler: " . mysql_error();
}
Es ist wesentlich schneller die Datenbank die Sortierarbeit machen zu lassen, als dies von PHP erledigen zu lassen.
Nebenbei, warum speicherst du die "Zeit" als normalen Text in die Datenbank ab??
In solchen Fällen speicher ich einmal einen Timestamp wenn der jenige User online ging und bei jedem Seitenabruf aktualisiere ich diesen.
Gruß Clemens

