Supportnet Computer
Planet of Tech

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
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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: