Willkommen in der Webstatt Zum Webstatt Blog und Stories
Bonze am 03.04.06 19:27

als ich heut mal in meinem news scrpt die news editieren wollte(testhalber) viel mir auf das ich beim abspeichern immer einen
Duplicate entry '0' for key 1
bekomme
und nur eine leere zeilemit der ID 0 eingetragen wird, jedoch komm ich zum verrecken nich auf den fehler, und was es überhaupt sein könnte,.

netcup.de Warum gibt es hier Werbung?
Michael Michael am 03.04.06 19:38

Die Fehlermeldung heisst, dass du einen neuen Datensatz mit dem gleichen Key (hier 0) in der Datenbank speichern wolltest =)

Du könntest den Key als auto_increment definieren und nie explizit setzen oder anstelle eines INSERTs UPDATE benutzen. Nur zwei von vielen Möglichkeiten.

Michael

Bonze am 03.04.06 19:39

ich benutze schon update, und auto increment is auch eingestellt :(

ich hab gedacht das ich irgendwo der ID 0 zuweisen würde und so den fehler selbst verschuldet hab , finde es aber nicht!

Michael Michael am 03.04.06 19:49

Wenn du UPDATE benutzt und nicht den Key veränderst sollte kein Fehler kommen.
Vielleicht postest du den entsprechenden Teil des Codes und/oder zumindest das Tabellendesign

Bonze am 03.04.06 19:57

so
CREATE TABLE news (
ID SMALLINT AUTO_INCREMENT PRIMARY KEY,
Kategorie VARCHAR(20),
Autor VARCHAR(20),
Titel VARCHAR(100),
Inhalt TEXT,
Datum VARCHAR(11)
);
und hier noch das nächste
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body><div align="center">
<div align="center"><a href="news_add.php"><font size="1"face="Verdana">News Schreiben</font></a>
• <a href="index.php?page=news&pn=edit"><font size="1"face="Verdana">User
Verwaltung</font></a> • <a href="index.php?page=news"><font size="1"face="Verdana">Daten
Editieren</font></a> </div>
<div align="center"> <center> </div>
<br>
<?PHP
$mysql = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('projects', $mysql) or die(mysql_error());

if (array_key_exists('delete',$_GET)) {
$deleteid = (int) $_GET['delete'];
$sql = "DELETE FROM news WHERE ID = '".$_GET['delete']."'";
$query = mysql_query($sql) OR die(mysql_error());
echo 'Ihr Datensatz wurde erfolgreich gelöscht.';
exit;
}

if (isset($_GET['edit']) && !empty($_GET['edit']) && is_numeric($_GET['edit'])){
$sql = "SELECT * FROM news WHERE ID = '".$_GET['edit']."'";
$query = mysql_query($sql) OR die(mysql_error());
$ds = mysql_fetch_object($query);
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table width="500" border="0" cellpadding="3" cellspacing="1" bgcolor="#000">
<tr>
<td colspan="2" bgcolor="#AAA" align="center"><font color="#FFFFFF"><b>News
Bearbeiten </b></font></td>
</tr>
<tr>
<td colspan="2" bgcolor="#CCC"><font color="#FFFFFF">von <?echo($ds->Autor);?></font></td>
</tr>
<tr>
<td width="287" bgcolor="#CCC"><font color="#FFFFFF">Titel</font></td>
<td width="198" bgcolor="#C0C0C0"><font color="#FFFFFF">
<input name="email" type="text" style="font-family: Verdana; font-size: 11px;" value="<?echo($ds->Titel);?>" size="33" />
</font></td>
</tr>
<tr>
<td bgcolor="#CCC"><font color="#FFFFFF">News</font></td>
<td bgcolor="#C0C0C0"><font color="#FFFFFF">
<input name="Passwort" type="text" style="font-family: Verdana; font-size: 11px;" value="<?echo($ds->Inhalt);?>" size="33" />
</font></td>
</tr>
<tr>
<td bgcolor="#CCC"><font color="#FFFFFF">Kategorie</font></td>
<td bgcolor="#C0C0C0"><font color="#FFFFFF">
<input name="links2" type="text" style="font-family: Verdana; font-size: 11px;" value="<?echo($ds->kat);?>" size="33" />
</font></td>
</tr>
<tr>
<td bgcolor="#CCC"><font color="#FFFFFF">Links</font></td>
<td bgcolor="#C0C0C0"><font color="#FFFFFF">
<input name="links" type="text" style="font-family: Verdana; font-size: 11px;" value="<?echo($ds->links);?>" size="33" />
</font></td>
</tr>
<tr>
<td height="49" colspan="2" valign="top" bgcolor="#CCC"> <font color="#FFFFFF">&nbsp;
</font>
<div align="center"><font color="#FFFFFF">
<input name="speichern" type="submit" value="Speichern">
<input type="hidden" name="id" value="<? echo ($ds->ID); ?>">
</font> </div>
</td>
</tr>
</table>
<?
exit;
}

if (isset($_POST['speichern'])){
$sql = "UPDATE `news` SET `ID` = '',
`Kategorie` = '".addslashes($_POST['kat'])."',
`Autor` = '".addslashes($_POST['name'])."',
`Titel` = '".addslashes($_POST['titel'])."',
`Inhalt` = '".addslashes($_POST['news'])."',
`Datum` = '".time()."'
";
$query = mysql_query($sql) OR die(mysql_error());
echo 'Ihr Datensatz wurde erfolgreich gespeichert.';
exit;
}

$sql = 'SELECT * FROM news ORDER BY `ID` DESC ';
$query = mysql_query($sql) OR die(mysql_error());

if (!mysql_num_rows($query) > 0){
echo 'Keine Eintr&auml;ge vorhanden.';
exit;
} else {
echo '<table border="1" bordercolor="#000000" style="border-collapse: collapse">';
$cntquery = mysql_query('SELECT COUNT(*) cnt FROM news');
$row = mysql_fetch_assoc($cntquery);
$count = $row['cnt']+1;
?>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="90%" id="AutoNumber1">
<tr bgcolor="#E1F0F4">
<td colspan="3"><font size="2"face="Verdana"><b>News Titel</b></font></td>
<td width="50%"><font size="2">&nbsp;</font></td>
<td width="13%"><font size="2"face="Verdana">&nbsp;</font></td>
<td width="9%"> <center>
<font size="2" face="Verdana"><b> Bearbeiten </b></font></center></td>
<td width="6%"> <center>
<font size="2" face="Verdana"><b> Löschen </b></font></center></td>
<td width="14%"> <center>
<font size="2" face="Verdana"><b> Feedback </b></font></center></td>
</tr>
<?php
while ($ds = mysql_fetch_object($query)){
--$count;
$timestamp = $ds->Datum;
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
?>

<tr bgcolor="#FFFFFF">
<td width="3%"><b><font color="#000000" size="2">Nr<em><?php echo($count);?></em></font></b></td>
<td width="1%"><em><?php echo($ds->Autor);?></em></td>
<td width="4%"><b><font color="#000000" size="2"><em><?php echo(substr($ds->Titel, 0, 50))?></em></font></b></td>
<td width="50%"><b><em><?php echo(substr($ds->Inhalt, 0, 50))?>...</em></b></td>
<td><font color="#000000" size="2"><b>vom <?php echo $datum,"-",$uhrzeit,"Uhr"; ?>
</b></font></td>
<td width="9%"> <center>
<font color="#000000" size="2" face="Verdana"><a href="?edit=<? echo $ds->ID; ?>">X</a>
</font>
</center></td>
<td width="6%"> <center>
<font color="#000000" size="2"><a href="?delete=<? echo $ds->ID; ?>">X</a>
</font>
</center></td>
<td width="14%"> <center>
<font color="#000000" size="2"><?php
echo"<a href=\"kommentar.php?edit=$ds->ID\">Kommentare bearbeiten</a>";
?>
</td>
</tr>

<?
}
echo '</table>';
}
?>
ich hoffe damit kannste was anfangen :D

milahu milahu am 03.04.06 20:39

SET `ID` = ''
Weg damit!

Bonze am 03.04.06 20:58

mhh das funktionierte aber die ganze zeit so X(

habs jetzt weggemacht , jedoch funzt jetzt auch ned, bzw es zeigt mir zwar an datensatz erfolgreich gespeichert, aber es wird kein datensatz in die db geschrieben !

EDIt :D mh kannsein das es daran lag , ich idiot hatte natürlich , vergessen die namen vom input feld zu ändern ()scheiss copy and paste),.
jetzt gehts aber mal ne frage nebenbei, wie muss ich das machen , wenn ich die news lösche , und auch noch die kommentare aus der news_comments tabelle löschen wil? (die dazugehörigen , in der die newsid = dere ID von den news is),.

milahu milahu am 03.04.06 21:19

Quote
Original von Bonze
wie muss ich das machen , wenn ich die news lösche , und auch noch die kommentare aus der news_comments tabelle löschen wil?

Steht zwar alles im manual, aber ich kaue es dir gerne vor:
delete from artikel, kommentare where artikel.id = $ID and kommentare.artikel = $ID

Bonze am 03.04.06 21:47

mhh dachte so?
$sql = "DELETE FROM news WHERE ID = '".$_GET['delete']."'";
$sql2 = "DELETE FROM news_comments WHERE NewsID = '".$_GET['delete']."'";
$query = mysql_query($sql) OR die(mysql_error());
$query2 = mysql_query($sql2) OR die(mysql_error());

milahu milahu am 03.04.06 22:59

Ist langsamer als beides in einer Anfrage zu erledigen.

Michael Michael am 04.04.06 11:00

Obwohl milahu natürlich vollkommen Recht hat - eine Abfrage ist sicherlich schneller - sei dennoch angemerkt, dass es meiner Meinung nach die Übersichtlichkeit steigert, aus zwei Tabellen in zwei Abfragen zu löschen.
Die beiden Abfragen sind relativ gesehen natürlich langsamer, absolut gesehen ist das aber unmerkbar, zumal du ja nicht sooft News und deren Kommentare löschst (und wenn dann macht das ein Admin).

Michael

P.S.: Ist euch schon einmal aufgefallen, dass MySQL in ein ENUM Feld (trotz NOT NULL) nichts speichert, wenn versucht wird einen ungültigen Wert einzufügen? So einen Schmarrn habe ich lange nicht gesehen...

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt