[MySQL] letzten Eintrag löschen

ArneSchroeder

Cadet 3rd Year
Registriert
Nov. 2005
Beiträge
49
Hi

Ich habe ein kleines Problen uund zwar erstellt mein News-Skript beim schreiben eines Beitrages immer gleich 2 neue Einträge einmal den mit den ganzen Daten wie "title" "posttime" "writer" ect. aber er erstellt auch noch einen neuen wo nur "posttime" einen Wert bekommt und alle anderen leer bleiben. Da ich keinen blassen schimmer habe wei soo es so ist wollte ich den letzten Einrag löschen was ich folgendermaßen realisiert habe:
PHP:
			$del = '1';
			$sql = 'SELECT ID,Title FROM news ORDER BY ID DESC';
			@mysql_connect($sql_host,$sql_user,$sql_pw) or die('Connection to MySQL server faild !!');
			mysql_select_db($sql_db) or die('Database doesn`t exist !!');
			$sql_result = mysql_query($sql);
			if (mysql_num_rows($sql_result)) {
				while ($row=mysql_fetch_assoc($sql_result)) {
					if ($del=='1') {
						$del = '0';
						$sql = "DELETE FROM news WHERE ID = ".$row['ID']; //." AND Title = ''";
						$result = mysql_query($sql);
					}
				}
			}

Das Problem dabei is jetzt das er nicht nur den letzten löscht sondern auch den vorletzten also den Eintrag wo wirklich etwas drin steht ;( und das soll ja nicht sein.

Oder kann ich schon beim erstellen eines neuen Eintrages etwas besser amchen ??

PHP:
			@mysql_connect($sql_host,$sql_user,$sql_pw) or die('Connection to MySQL server faild !!');
			mysql_select_db($sql_db) or die('Database doesn`t exist !!');
			$sql = "INSERT INTO news ( title , main , posttime , writer ) 
				VALUES (
					'".maskieren($_POST['title'])."', 
					'".maskieren($_POST['main'])."', 
					'".time()."', 
					'".maskieren($_POST['writer'])."')";
				
			$result = mysql_query($sql);

Wäre euch sehr dankbar wenn ihr mir weier helfen könntet!!

mfg
Arne
 
PHP:
@mysql_connect($sql_host,$sql_user,$sql_pw) or die('Connection to MySQL server faild !!');
            mysql_select_db($sql_db) or die('Database doesn`t exist !!');
            $sql = "INSERT INTO news ( title , main , posttime , writer ) 
                VALUES (
                    '".maskieren($_POST['title'])."', 
                    '".maskieren($_POST['main'])."', 
                    '".time()."', 
                    '".maskieren($_POST['writer'])."')";
                
            $result = mysql_query($sql);  
mysql_query('Delete from news where ID="'.mysql_insert_id.'" ;');
 
PHP:
			@mysql_connect($sql_host,$sql_user,$sql_pw) or die('Connection to MySQL server faild !!');
			mysql_select_db($sql_db) or die('Database doesn`t exist !!');
			$sql = "INSERT INTO news ( title , main , posttime , writer ) 
				VALUES (
					'".maskieren($_POST['title'])."', 
					'".maskieren($_POST['main'])."', 
					'".time()."', 
					'".maskieren($_POST['writer'])."')";
				
			$result = mysql_query($sql);

ArneSchroeder, ist das alles was du zum Erstellen verwendest oder folgen danach noch ein paar andere Befehle?
 
@ AlbertLast
vieln dank für die sinvolle Verkürzung des Quelltextes nur leider wird der letzte Beitrag dadurch auch gelöscht es werden also insgesammt 2 Beiträge gelöscht.
Es ist soo als wenn die beiden irgend wei zusammenhängen würden aber ich weis nich was ich dagegen tun kann ,(

@ ag3nt
nein da kommt nichts mehr hinter was mit der EIngabe zu tun hat nur noch n Statusfenster wo ich abfrage was in $result drine steht aber mehr nicht.
fehlt da denn noch was ???
 
Zuletzt bearbeitet:
Das nicht aber mich würde mal interessieren wo der 2. "leere" Eintrag herkommt
 
Hallo,

wenn ich jetzt alles richtig verstehe erstellt dein Script zwei Datensätze in einer Tabelle, welche jeweils aber die selbe ID haben.
Abgesehen von der Tatache, dass da schon wohl irgendetwas bei der Konzeption nicht so ganz optimal ist, so dass überhaupt ersteinmal zwei Datensätze erstellt werden müssen, sollte eine ID dann wenigstens auch einzigartig sein. ;)

Poste einmal deinen gesamten Code - die Möglichkeit einen Datensatz nachträglich zu löschen halte ich für einen falschen/unsauberen Weg.

MfG mh1001
 
das ist ja grade das Problem ich weis auch nicht wo der 2 Eintrag her kommt denn es steht nur in Posttime etwas und in der ID die sich vom eigendlichen untershceidet also haben dei beiden nicht die gleiche ID aber einzeln kann ich sie nicht löschen auser per phpmyadmin

PHP:
		if ($_GET['step']=='added') {
		// show status if msg was added or error	
			@mysql_connect($sql_host,$sql_user,$sql_pw) or die('Connection to MySQL server faild !!');
			mysql_select_db($sql_db) or die('Database doesn`t exist !!');
			$sql = "INSERT INTO news ( title , main , posttime , writer ) 
				VALUES (
					'".maskieren($_POST['title'])."', 
					'".maskieren($_POST['main'])."', 
					'".time()."', 
					'".maskieren($_POST['writer'])."');";
				
			$result = mysql_query($sql);

			mysql_query('Delete from news where ID="'.mysql_insert_id().'" ;');  

			if ($result == 1) {
				$template->info->info_msg = 'erfolgreich!';
			} else {
				$template->info->info_msg = 'Fehler !!';
			}
			$template->info->txt_back_admin = $lang[$lng.'_back_to_admin'];
			$template->info->url_back_admin = $_SERVER['PHP_SELF'];
			$template->info->txt_back_news  = $lang[$lng.'_back_to_news'];
			$template->info->url_back_news  = '/'.$sys['wdir'].'news.php';	
			printt($template, $tpl_page['admin']);
			exit;	
		} else {
 
PHP:
   $dbLink = @mysql_connect($sql_host,$sql_user,$sql_pw);
    
    $dbCurrent = mysql_select_db( $sql_db, $dbLink );
    
    if ( $dbLink === FALSE || $dbCurrent === FALSE )
    {
    	die('Connection to MySQL server faild !!' . mysql_error() );
    }
    
    
        $sql = "INSERT INTO news ( title , main , posttime , writer )  
            VALUES ( 
                '".maskieren($_POST['title'])."',  
                '".maskieren($_POST['main'])."',  
                '".time()."',  
                '".maskieren($_POST['writer'])."')"; 
             
        $result = mysql_query( $sql, $dbLink );

Was vielleicht mal einen Versuch Wert ist die Resourcen explizit anzugeben, eventuell ist damit das "Doppel-Problem" bereits behoben und wenn nicht wars zumindest einen Versuch wert ;)
Lass ausserdem mal das Semikoln am Ende weg, das benötigst du ohnehin nur in der MySQL-Konsole
 
also dein vorshclag hat nichts geändert wenn ich das ganze ohne das ich den Letzten lösche mach das sind da weider 2 Einträge.
UNd wenn ich das ganze mach wm den letzten weider zuz löschen dann sind bede weg oder werden garnicht erst erstellt was auch immer ;/
 
Funktioniert denn wenigstens das manuelle Einfügen, z.B. sowas in der Richtung wie das:
PHP:
INSERT INTO news ( title , main , posttime , writer ) VALUES ( 'TESTEINTRAG', 'TEST', 1204005, 'MOBY' )
 
also wenn ich das so mach wie du da beschrieben hast geht das und auch ohne das er einen 2 Eintrag erstellt. Also dachte ich das liegt dadran das ich da noch FunKtionen wei time() oder maskieren aufrufe aber wenn ich die werte vorher in Variablen speicher und die dann Eintrag ist wieder alles wie vorher ;/ er ertellt wieder 2 Einträge uund ich kann den Letzten auch nicht einzeln löschen.
 
hmm also vermutlich liegt es wohl schlicht an der folgenden zeile
PHP:
'".time()."',
ändere das mal so ab das keine Anführungszeichen mehr da sind
PHP:
".time().",

wenn es daran liegen sollte, verstehe ich aber immer noch nicht warum dann 2 Einträge erstellt werden, dass einzig sinnvolle wäre eine Fehlermeldung das die Typen nicht übereinstimmen.
 
wenn ich die Anführungszeichen weg lassen ändert das nichts daran er erstellt immer noch 2 Einträge. Kann das vielleicht auch an meinem System Liegen ?? Ich nutze XAMPP um es bei mir Lokal zu Testen.
 
an sich nicht, poste am besten mal die komplette "maskieren" funktion wahrscheinlich ist der Fehler da drin zu suchen
 
PHP:
function maskieren($string) {
  return (get_magic_quotes_gpc()) ? $string : addslashes($string);
}

function demaskieren($string) {
  return (get_magic_quotes_gpc()) ? stripslashes($string) : $string;
}

wurde mir hier im Forum von Quidoff empfohlen.
Aber das Problem hatte ich vorher auch schon und wenn ich die ganz weg lass hab ich genau das Gleiche das er immer 2 Einträge erstellt.

Gibt es vielleicht noch eine ander möglichkeit dieses Problem zu "umgegen" ???
 
Eigentlich ist dein Code ansich vollkommen richtig.
Neben einer fehlerhaften PHP- oder MySQL-Einrichtung könnte das ganze eigentlich nurnoch eventuell an falschen Feldtypen (sprich Feldern, welche den übergebenen Wert nicht aufnehmen können) liegen, wobei sich dies normalerweise anders äußern sollte.
Allerdings würde ich auch schon aufgrund des fehlerhaften "Löschverhaltens" auf einen serverseitigen Fehler tippen.

Das einzigste was du imho codemäßig noch versuchen könntest, wäre eine direkte Zuweisung der Werte, sprich:

PHP:
$sql = "INSERT INTO news SET title = '".maskieren($_POST['title'])."', main = '".maskieren($_POST['main'])."', posttime = NOW(), writer = '".maskieren($_POST['writer'])."')";

MfG mh1001
 
hba das ganze auch noch nal soo getestet aber ich bin beim gleichen ergebniss gelandet ;// zur sicherheit hab ich das auch noch mal auf mein webserver getestet aber da is es genau das gleiche ,/ http://schroeder87.sc.ohost.de/news/news.php

Könnt ihr euch ja mal angucken ......

was sollte posttime denn fur ein variablentyp sein hab da jetzt varchar und länge 20 zeichen das is doch ok oder ?
 
Datentypen

"posttime" als varchar(20) zu verwenden geht zwar aber es ist nicht sinnvoll, deutlich besser ist es den SQL eigenen Datentyp "TIMESTAMP" zu verwenden, der INSERT von vorhin sähe dann in so aus
Code:
INSERT INTO news ( title , main , posttime , writer ) VALUES ( 'TESTEINTRAG', 'TEST', CURRENT_TIMESTAMP, 'MOBY' )
Zu dem angesprochenen "maskieren" kann ich nur das Beispiel von php.net empfehlen.

Hab auch selbst mal bei mir getestet konnte aber mit keiner der verfügbaren Datenbanken (MySQL 4, 5, Postgre, Oracle, DB2, MSSQL 2k und 2k5, oracle) das Problem reproduzieren
 
:headshot:
Ich weis jetzt wodran es lag das es nicht ganz soo geklappt hat wei ich es vorhatte!!
Ich habe ja ein Template-System benutzt namens ETS(Easy Template System) und der rif die seiten scheinbar 2x auf um das auszugeben oder soo auf jeden fall funktioniert es wenn ich das ganze ohne das Template-System mache.

Kennt ihr das Template-System und is das möglich so wie ich das geschildert habe ??

Auf jeden fall sehr sehr vielen DANK an alle die versucht haben den fehler zu finden !!!!!!!:daumen:

mfg
Arne
 
Zurück
Oben