Willkommen in der Webstatt
User-1 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?
User-2 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.

xyz-141el

User-1 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!

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

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

User-3 am 03.04.06 20:39

SET `ID` = ''
Weg damit!

User-1 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),.

User-3 am 03.04.06 21:19

Quote
Original von xyz-29
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

User-1 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());

User-3 am 03.04.06 22:59

Ist langsamer als beides in einer Anfrage zu erledigen.

User-2 am 04.04.06 11:00

Obwohl xyz-145 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).

xyz-141el

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