Archiv verlassen und diese Seite im Standarddesign anzeigen : DELETE Probleme
schnubbi 13-12-2003, 12:16 Also ich hab lokal nen wampp 2 laufen. Sind auch noch die Standardkonfig.
Ich arbeite zur Zeit an nem Newsscript bei dem ich die News auch wieder löschen will.
Es soll so von statten gehen das ich per while schleife alle Überschriften aufliste und hinter jeder übeschrift eine checkbox ist wo die id drin steht.
Wenn nun die Checkbox aktiviert ist soll es auf buttonclick die jeweiligen ausgewählten News aus der da tenbank löschen. ( jap is mit mysql gemacht ;) )
Jetzt wollt ich hier mal fragen wie das funktioniert weil mir bisher kein Tutorial und keine Documentation darüber aufschluss gegeben hat.
MfG Schnubbi
für die checkboxen nimmst du immer name="cb[]" und als value nimmst du die id der news.
in der nachfolgenden seite hast du dann ein array $_POST['cb'] in dem alle id enthalten sind, welche gelöscht werden sollen.
schnubbi 13-12-2003, 12:29 Hab das mal eingebaut aber irgendwie werden die ids nicht an den $_POST[cb] übergeben.
hab sie jetzt nochmal per echo ausgelesen und sie haben den inhalt array ... also nix ;)
Ich post ma den code vl. ist das einfacher.
if ($switch == 'nloesch'){
$abfrage = @ mysql_query("select * FROM schnubb_news ORDER BY id DESC")or die("Konnte den Select Befehl nicht ausführen.");
?>
<br><br><center><b><u><font color="#000000" size="4" type="tahoma">News Löschen</b></u></font>
<br></center>
<br>
<table width="100%">
<tr>
<td><b><u><font color="#000000" size="2" type="tahoma"><center>Überschrift</center></font></td>
<td> <b><u><font color="#000000" size="2" type="tahoma"><center>Löschen</center></font></td>
</tr>
<form action="admin.php?action=nloesch" method="POST">
<?
while($eintrag = mysql_fetch_object($abfrage)) {
echo '<tr>';
echo '<td>'.$eintrag->ueberschrift.'</td>';
echo '<td><center><input type="checkbox" name="cb[]" value="'.$eintrag->id.'"></center></td>';
}
@mysql_free_result($abfrage);
?>
<tr>
<td width="190"> </td>
<td width="310" align="center"><br><br>
<input type="submit" name="submit" value="Löschen" style="border:thin dotted #000000">
</td>
</tr>
</tr>
</table>
<br><br> <center>
<font color="#000000" size="2" type="tahoma">© by <a href="http://www.schnubbi-web.de"><font color="#000000" size="2" type="tahoma">Schnubbi</a></font</font></center>
<br></center>
<?
$sql = "DELETE schnubb_news where $_POST['cb']";
@ mysql_query($sql) ;
}
?>
Elotrohombre 13-12-2003, 12:36 probiers mal so:
<?php
if(isset($_POST['cb'])) {
$id = $_POST['cb'];
$sql = "DELETE schnubb_news where $_POST['cb']";
@ mysql_query($sql) ;
}
keine Ahnung obs funktioniert...aber meiner meinung nach sollte es funktionieren
Original geschrieben von Elotrohombre
keine Ahnung obs funktioniert...aber meiner meinung nach sollte es funktionieren tut es aber nicht. schaue dir doch mal deinen syntax an. :goth:
Elotrohombre 13-12-2003, 12:39 ich sollte nachdenken bevor ich sachen schreibe... ich meins natürlich so:
<?php
if(isset($_POST['cb'])) {
$id = $_POST['cb'];
$sql = "DELETE schnubb_news where id = ''$id' LIMIT 1";
@ mysql_query($sql) ;
}
sry
schnubbi 13-12-2003, 12:43 nein erzielt keine wirkung.
kann es sein das die übergabe durch POST nicht richtig geht ?
Also das die ID erst garnicht richtig ausgelesen wird ?.
also das in der zeile was nicht hinhaut ?
echo '<td><center><input type="checkbox" name="cb[]" value="'.$eintrag->id.'"></center></td>';
Elotrohombre 13-12-2003, 12:46 Das kannst du ganz leicht überprüfen indem du ihm sagst:
echo $_POST['cb']';
@schnubbi
ungetestet
<?php
if (isset($_POST['action'], $_POST['cb']) && $_POST['action']=='nloesch' && count($_POST['cb'])>0)
{
$res = mysql_query('DELETE * FROM schnubb_news
WHERE id IN ('.implode(',', $_POST['cb']).')')
or die(mysql_error());
}
?>
<br><br><center><b><u><font color="#000000" size="4" type="tahoma">News Löschen</b></u></font>
<br></center>
<br>
<table width="100%">
<tr>
<td><b><u><font color="#000000" size="2" type="tahoma"><center>Überschrift</center></font></td>
<td> <b><u><font color="#000000" size="2" type="tahoma"><center>Löschen</center></font></td>
</tr>
<form action="admin.php" method="POST">
<input type="hidden" name="action" value="nloesch">
<?php
$abfrage = mysql_query("SELECT * FROM schnubb_news
ORDER BY id DESC") or die(mysql_error());
while( $eintrag = mysql_fetch_assoc($abfrage))
{
echo '<tr>';
echo '<td>'.$eintrag['ueberschrift'].'</td>';
echo '<td><center><input type="checkbox" name="cb[]" ';
echo 'value="'.$eintrag['id'].'"></center></td>';
}
?>
<tr>
<td width="190"> </td>
<td width="310" align="center"><br><br>
<input type="submit" name="submit" value="Löschen" style="border:thin dotted #000000">
</td>
</tr>
</tr>
</table>
<br><br> <center>
<font color="#000000" size="2" type="tahoma">© by <a href="http://www.schnubbi-web.de"><font
color="#000000" size="2" type="tahoma">Schnubbi</a></font</font></center>
<br></center>
Original geschrieben von Elotrohombre
ich sollte nachdenken bevor ich sachen schreibe... ich meins natürlich so:auch käse. $_POST['cb'] ist ein array.
Elotrohombre 13-12-2003, 12:48 Stimmt...und ich gebe auf...ich glaub i kenn mi selba ned gut genug aus um irgendwelche tipps zu geben ;)
ich überlasse hiermit das Feld den routinierteren und intelligenteren.
Aber versucht hab ichs immerhin
Original geschrieben von Elotrohombre
echo $_POST['cb']'; auch käse. wenn dann schon eher.
echo '<pre>';
print_r($_POST['cb']);
echo '</pre>';
Original geschrieben von Elotrohombre
Aber versucht hab ichs immerhin das ist wahr.
aber sinnvoll helfen und versuchen ist zu den versuchen von dir noch weit entfernt. das aber nur als tipp am rand. (nicht böse gemeint)
schnubbi 13-12-2003, 13:11 Juhu einen Schritt weiter :D
Es kommt ne fehlermeldung ;)
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM schnubb_news WHERE id IN (2
mach mal den * bei -> DELETE * FROM <- weg. den habe ich durch copy&paste von dir übernommen.
schnubbi 13-12-2003, 13:21 muuuh thx es funzt :):rocks:
schnubbi 13-12-2003, 14:12 hab gerade noch ein änderscript schreiben wollen also ein UPDATE sogesehen.
Es funzt rein theoretisch sogar :D
Nur das Problem ist das es immer den letzten aufgezeigten datensatz evrwendet und nicht den wo man am Button draufklickt.
#####Ändern Anfang #####
if ($switch == 'laendern'){
if($url == "") {
$fehler = 1;
$fehlermeldung .= '<tr><td><font color="#000000" size="2" type="tahoma">Die URL</td> ';
$fehlermeldung .= '<td><td><font color="#000000" size="2" type="tahoma">Du hast noch keine URL angegeben!</td> </tr> ';
}
if(!$submit) {
?>
<br><br><center><b><u><font color="#000000" size="4" type="tahoma">Hyperlink Ändern</b></u></font>
<br>
<center>
<form action="admin.php?action=leintrag" method="post">
<br><br>
<?
$abfrage = @ mysql_query("select * FROM schnubb_link ORDER BY id DESC")or die("Konnte den Select Befehl nicht ausführen.");
while($eintrag = mysql_fetch_object($abfrage)) {
echo '<table width="500">';
echo '<tr>';
echo '<td width="190" ><font color="#000000" size="2" type="tahoma">Die Überschrift<font color="red" size="2" type="tahoma">*</font><font color="#000000" size="2" type="tahoma">:</font></td>';
echo '<td width="310" ><input type="text" name="ueberschrift" size="20" class="input" style="border:thin dotted #000000" value="'.$eintrag->ueberschrift.'"></td>';
echo '</tr><tr><td width="190" ><font color="#000000" size="2" type="tahoma">Die URL<font color="red" size="2" type="tahoma">*</font><font color="#000000" size="2" type="tahoma">:<b><br>(mit http:// angeben)</b></font></td>';
echo '<td width="310" ><input type="text" name="url" size="20" class="input" style="border:thin dotted #000000" value="'.$eintrag->url.'"></td>';
echo '</tr><tr> <td width="190" ><font color="#000000" size="2" type="tahoma">Die Banner-URL:<b><br>(mit http:// angeben)</b></font></td>';
echo '<td width="310" ><input type="text" name="banner" size="20" class="input" style="border:thin dotted #000000" value="'.$eintrag->banner.'"></td>';
?> </tr>
<tr>
<td width="190"> </td>
<td width="310" align="center">
<input type="submit" name="submit" value="Eintragen" style="border:thin dotted #000000">
</td>
</tr>
</table>
<?
}
}elseif($submit && $fehler == 1) {
echo $fehlermeldungStart;
echo $fehlermeldung;
echo $fehlermeldungEnde;
}else{
$text = strip_tags($text);
$text = htmlentities($text);
$text = replace($text);
$sql = "UPDATE schnubb_link VALUES ('','$ueberschrift','$url','$banner')";
@ mysql_query($sql) ;
}
?>
<center> <br><br>
</center>
<br><br> <center>
<font color="#000000" size="2" type="tahoma">© by <a href="http://www.schnubbi-web.de"><font color="#000000" size="2" type="tahoma">Schnubbi</a></font</font></center>
<br>
<?
}
#####Ändern Ende#####
?>
tja. du gibst ja auch keine id an.
---
$abfrage = @ mysql_query("select * FROM schnubb_link ORDER BY id DESC")or die("Konnte den Select Befehl nicht ausführen.");
---
dann nochwas... schaue dir mal den code von mir von eben an. habe ich da ein @ drin?
habe ich da innerhalb von die() einen nichtssagenden text drin?
schnubbi 13-12-2003, 15:31 das mit dem @ versteh ich net. Manche sagen es soll rein manche lassen es weg.
Und das mit der ID sollte doch durch die while schleife geklärt sein oder irre ich mich da ?
ein @ unterdrückt nur die fehlermeldung, aber der fehler ist dennoch vorhanden.
daher solltest du dir angewöhnen OHNE @'s zu arbeiten. ein @ ist nur an bestimmten punkten sinnvoll.
und was deine id angeht. so schaue dir doch erst einmal deinen code an und vergleiche ihn mit dem, was du eigentlich machen willst.
schnubbi 13-12-2003, 16:31 ok den grundlegenden fehler für das Problem hab ich erstmal gefunden. war ein action noch falsch *sich selber schlag*
So die buttons sind durch den namen welcher jetzt der jeweiligen id entspricht auch eindeutig identifiziert. Doch wie is der sql befehl für das update. Weil wie im manual beschrieben per update into sowie update tabelle set übernimmt er es nicht.
und ein echo $SQL; zeigt auch nix an obwohl ja inhalte drin sein müssten.
Original geschrieben von schnubbi
und ein echo $SQL; zeigt auch nix an obwohl ja inhalte drin sein müssten. müsste vielleicht: ja.
ist aber dann anscheinend nicht. -> weiter suchen... ;)
schnubbi 13-12-2003, 17:03 ok ich revidiere mich :D
die submitbuttons werden durch die name = id zuweisung doch nicht zu einem unikat. Egal welcher button ausgeführt wird es wird durch die Ordnung sort by ID immer der Datensatz mit der kleinsten ID ( in dem Fall 1 ) aktualisiert. Ich habs ma per echo mir ausgeben lassen. Warum $sql keinen inhalt hat ist auch klar. der updatebefehl ist falsch.
Laut mysqlfront ist er
UPDATE schnubb_link SET ueberschrift= 'test' WHERE id=1
Dies würde bedeuten ueberschrift = Datensatzspalte , test muss der inhalt welcher in einer variable steht welche $eintrag->ueberschrift heisst sein.
Aber die frage ist wieso er trotzdem es nicht updated. Überseh ich was grundlehgendes oder bin ich auf der richtigen fährte ?
~edit~
ma ne grundlegende frage. ISt es normal in meinem script das $eintrag->id usw. ( also alle objects mit $eintrag davor ) leer sind ?
Weil das ist bei mir der fall und ich denke grade vl. ist das der fehler. dann würde es bedeuten das das mit dem value falsch läuft. Also das der das net abspeichert.
~edit2~
so jetzt weiss ich glaube ich das Problem. Es liegt am Fomular. Die Inhalte der einzelnen inputs wird durch ein value bestimmt. Dieses value ließt per mysql_object das ganze aus einer Datenbank aus. Wenn man nun etwas neues reinschreibt wird das value ja eigentlich überschrieben aber sobald der submit kommt wird es wieder aus der Datenbank genommen oder ?
Insofern updated der das deswegen nicht oder ?
Original geschrieben von schnubbi
ma ne grundlegende frage. ISt es normal in meinem script das $eintrag->id usw. ( also alle objects mit $eintrag davor ) leer sind ?wenn du meinen code 1:1 übernommen hast, ist $ergebnis kein object mehr, sondern ein array. schaue es dir mal genau an ... ;) print_r()
und dieser update ist auch ein wenig merkwürdig. hier hast du nämlich nur ein INSERT genommen, aber UPDATE geschrieben. :p
$sql = "UPDATE schnubb_link VALUES ('','$ueberschrift','$url','$banner')";
schnubbi 13-12-2003, 18:24 ich hatte deinen code nicht verwendet weil ich mit ihm nicht zurecht kam.
SO jetzt hab ich es mal so auf deinen Code umgemodelt und krieg nen parserror in Zeile 139. Da du eh nicht weiss welche zeile das ist geb ich die bemerkung. Sie steht unten dran nochmal da fett net funzt im code bereich ;)
if ($switch == 'laendern'){
if($url == "") {
$fehler = 1;
$fehlermeldung .= '<tr><td><font color="#000000" size="2" type="tahoma">Die URL</td> ';
$fehlermeldung .= '<td><td><font color="#000000" size="2" type="tahoma">Du hast noch keine URL angegeben!</td> </tr> ';
}
if(!$submit) {
?>
<br><br><center><b><u><font color="#000000" size="4" type="tahoma">Hyperlink Ändern</b></u></font>
<br>
<center>
<form action="admin.php?action=laendern" method="post">
<br><br>
<?
if (isset($_POST['action'], $_POST['cb']) && $_POST['action']=='laendern' && count($_POST['cb'])>0)
{
$res = mysql_query('UPDATE schnubb_link SET ueberschrift = '$ueberschrift', url = '$url', banner = '$banner'
WHERE id IN ('.implode(',', $_POST['cb']).')')
or die(mysql_error());
}
$abfrage = mysql_query("SELECT * FROM schnubb_link
ORDER BY id DESC") or die(mysql_error());
while( $eintrag = mysql_fetch_assoc($abfrage))
{
echo '<table width="500">';
echo '<tr>';
echo '<td width="190" ><font color="#000000" size="2" type="tahoma">Die Überschrift<font color="red" size="2" type="tahoma">*</font><font color="#000000" size="2" type="tahoma">:</font></td>';
echo '<td width="310" ><input type="text" name="ueberschrift" size="20" class="input" style="border:thin dotted #000000" value="'.$eintrag['ueberschrift'].'"></td>';
echo '</tr><tr><td width="190" ><font color="#000000" size="2" type="tahoma">Die URL<font color="red" size="2" type="tahoma">*</font><font color="#000000" size="2" type="tahoma">:<b><br>(mit http:// angeben)</b></font></td>';
echo '<td width="310" ><input type="text" name="url" size="20" class="input" style="border:thin dotted #000000" value="'.$eintrag['url'].'"></td>';
echo '</tr><tr> <td width="190" ><font color="#000000" size="2" type="tahoma">Die Banner-URL:<b><br>(mit http:// angeben)</b></font></td>';
echo '<td width="310" ><input type="text" name="banner" size="20" class="input" style="border:thin dotted #000000" value="'.$eintrag['banner'].'"></td>';
?> </tr>
<tr>
<td width="190"> </td>
<td width="310" align="center">
<? echo' <input type="submit" name="'.$eintrag['id'].'" value="Eintragen" style="border:thin dotted #000000">';
}}
?> </td>
</tr>
</table>
<center> <br><br>
</center>
<br><br> <center>
<font color="#000000" size="2" type="tahoma">© by <a href="http://www.schnubbi-web.de"><font color="#000000" size="2" type="tahoma">Schnubbi</a></font</font></center>
<br>
<?
}
$res = mysql_query('UPDATE schnubb_link SET ueberschrift = '$ueberschrift', url = '$url', banner = '$banner'
irgendwann fällst du immer wieder auf die schnauze, wenn du variablen in einem string direkt unterbringt.
bei ' werden sie nämlich nicht interpretiert.
so sollte es passen.
$res = mysql_query('UPDATE schnubb_link SET ueberschrift = '".$ueberschrift."', url = '".$url."', banner = '".$banner."'
WHERE .......')
or die(mysql_error());
allerdings solltest du WHERE noch korrekt anpassen.
und warum schreibe ich eigentlich deinen code?
schnubbi 13-12-2003, 18:49 aber immer wenn ich es per test = '".$test."' schreibe krieg ich nen parse error. Da is bei mir schon immer so ... sobad ich die " wegalsse is er auch weg.
Und du schreibst net meinen Code. Du gibst mir gedanken anstöße ;)
arg. jetzt habe ich doch mal wieder einen fehler in der schnelle gemacht..... :(
mach mal so.
$res = mysql_query("UPDATE schnubb_link SET ueberschrift = '".$ueberschrift."', url = '".$url."', banner = '".$banner."'
WHERE .......")
or die(mysql_error());
|