Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
DELETE Probleme [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




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

 
Abraxax
13-12-2003, 12:20 
 
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&oumlschen</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&oumlschen</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">&nbsp;</td>
<td width="310" align="center"><br><br>
<input type="submit" name="submit" value="L&ouml;schen" style="border:thin dotted #000000">
</td>
</tr>
</tr>
</table>
<br><br> <center>
<font color="#000000" size="2" type="tahoma">&copy; 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

 
Abraxax
13-12-2003, 12:39 
 
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']';

 
Abraxax
13-12-2003, 12:46 
 
@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&oumlschen</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&oumlschen</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">&nbsp;</td>
<td width="310" align="center"><br><br>
<input type="submit" name="submit" value="L&ouml;schen" style="border:thin dotted #000000">
</td>
</tr>
</tr>
</table>
<br><br> <center>
<font color="#000000" size="2" type="tahoma">&copy; by <a href="http://www.schnubbi-web.de"><font
color="#000000" size="2" type="tahoma">Schnubbi</a></font</font></center>
<br></center>

 
Abraxax
13-12-2003, 12:47 
 
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

 
Abraxax
13-12-2003, 12:50 
 
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

 
Abraxax
13-12-2003, 13:18 
 
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 &Aumlndern</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">&nbsp;</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">&copy; by <a href="http://www.schnubbi-web.de"><font color="#000000" size="2" type="tahoma">Schnubbi</a></font</font></center>
<br>
<?
}

#####Ändern Ende#####

?>

 
Abraxax
13-12-2003, 14:25 
 
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 ?

 
Abraxax
13-12-2003, 16:16 
 
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.

 
Abraxax
13-12-2003, 16:37 
 
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 ?

 
Abraxax
13-12-2003, 18:08 
 
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 &Aumlndern</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">&nbsp;</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">&copy; 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'

 
Abraxax
13-12-2003, 18:33 
 
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 ;)

 
Abraxax
13-12-2003, 20:24 
 
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());


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:07 Uhr.