PHP Nachrichtenscript
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
antwort
array
attribut
button
code
eckigen klammern
header
http
jemand
markieren
markierten nachrichten
nachricht
post
problem
schleife
sicherheit
stichwort
text
url
-
Hallo !
Ich programmiere gerade ein Nachrichtenscript.
Wie geht es, dass ich einzelne Nachrichten mit einem Kontrollkästchen markieren kann (auch mit einem Kontrollkästchen alle markieren), und dann alle markierten Nachrichten löschen kann? Wie hier bei Lima
Für das "Alles Markieren" ist doch bestimmt ein Javascript notwendig, welches ist das?
Mfg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das wichtigste steht hier: http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#input
Falls du noch mehr Infos brauchst, bitte melden! -
Hallo !
Ich versuche gerade ein Script zu schreiben, dass die markierten Nachrichten löscht. Irgendwie geht es aber nicht. Es wird nichts gelöscht.
Die Nachrichtenausgabe:
<td class='nachrichten'><input type='checkbox' name='mails[]' value='$Id' /></td>
Der PHP Teil:
if ($_POST['delpn1'] == 'Markierte Löschen') { foreach($_POST['mails'] as $Id) mysql_query("DELETE FROM nachrichten WHERE id = '".$Id."'"); }
Der Submit Button:
<input type='submit' name='delpn1' value='Markierte Löschen'>
Beitrag zuletzt geändert: 31.3.2010 11:26:07 von davy -
Ich vermute es liegt an den eckigen Klammern im name-Tag:
...name='mails[]'...
Gib die mal weg.
Beitrag zuletzt geändert: 31.3.2010 11:43:39 von wagnerm -
wagnerm schrieb: Ich vermute es liegt an den eckigen Klammern im name-Tag:
...name='mails[]'...
Gib die mal weg.
Die eckigen Klammern müssen aber sein, damit PHP automatisch ein Array anlegt. -
Hat jemand noch eine Idee?
-
davy schrieb:
if ($_POST['delpn1'] == 'Markierte Löschen') { foreach($_POST['mails'] as $Id) mysql_query("DELETE FROM nachrichten WHERE id = '".$Id."'"); }
Das ö wird so nicht mehr bei PHP ankommen. Ich würde einfach
nehmen, das reicht.if ($_POST["delpn1"])
Ansonsten solltest du dir mal Gedanken über die Sicherheit machen, Stichwort SQL-Injections.
Stell dir mal vor, jemand schickt da
als Nachrichten-ID an dich. Und schwupps, sind alle Nachrichten aller User weg. Und das ist nur ein einfaches Beispiel, damit kann man noch viel mehr gefährliche Sachen machen.' or ''='
-
theseven schrieb:
davy schrieb:
if ($_POST['delpn1'] == 'Markierte Löschen') { foreach($_POST['mails'] as $Id) mysql_query("DELETE FROM nachrichten WHERE id = '".$Id."'"); }
Das ö wird so nicht mehr bei PHP ankommen. Ich würde einfach
nehmen, das reicht.if ($_POST["delpn1"])
Ansonsten solltest du dir mal Gedanken über die Sicherheit machen, Stichwort SQL-Injections.
Stell dir mal vor, jemand schickt da
als Nachrichten-ID an dich. Und schwupps, sind alle Nachrichten aller User weg. Und das ist nur ein einfaches Beispiel, damit kann man noch viel mehr gefährliche Sachen machen.' or ''='
Danke ! Jetzt gehts !
Wie schütze ich das Script gegen SQL-Injections ? -
theseven schrieb:
Siehe http://de3.php.net/mysql_real_escape_string
Also wäre das Problem schon gelöst, indem ich:
if (mysql_real_escape_string($_POST['delpn1'])) { foreach($_POST['mails'] as $Id) mysql_query("DELETE FROM nachrichten WHERE id = '".$Id."'"); }
schreibe?
Mfg -
Wenn du dir nicht sicher bist ob dein Skript funktioniert: Debugge es.
Außerdem brauchst du nicht das Attribut "Value" des Submit-Buttons abfragen.
Viel eher solltest du abfragen ob dieser Button im POST-Header "gesendet" wurde.
Das kannst du ganz einfach mit der Funktion isset() überprüfen.
Gruß,
dex -
qap2 schrieb:
Wenn du dir nicht sicher bist ob dein Skript funktioniert: Debugge es.
Außerdem brauchst du nicht das Attribut "Value" des Submit-Buttons abfragen.
Viel eher solltest du abfragen ob dieser Button im POST-Header "gesendet" wurde.
Das kannst du ganz einfach mit der Funktion isset() überprüfen.
Gruß,
dex
Öhm, das hat sich doch alles schon geklärt...
Und nein, es gibt keinen POST-Header
So sollte es aussehen:
if ($_POST['delpn1']) { foreach($_POST['mails'] as $Id) mysql_query("DELETE FROM nachrichten WHERE id = '".mysql_real_escape_string($Id)."'"); }
Du wirst in dem Script aber vermutlich noch zig andere Stellen haben wo das fehlt.
Beitrag zuletzt geändert: 31.3.2010 12:28:05 von theseven -
Das ist alles schön und gut, ich wollte ihm eigentlich den Debug-Tip da lassen, weil geschrieben wurde "wäre das Problem dann so schon gelöst".
Das es keinen POST-Header gibt will ich bezweifeln ;)
Vielleicht kennst du es unter einer anderen Bezeichnung. -
qap2 schrieb:
Das ist alles schön und gut, ich wollte ihm eigentlich den Debug-Tip da lassen, weil geschrieben wurde "wäre das Problem dann so schon gelöst".
Das es keinen POST-Header gibt will ich bezweifeln ;)
Vielleicht kennst du es unter einer anderen Bezeichnung.
Die erste Zeile des HTTP-Requests
würde ich nicht unbedingt als Header bezeichnen.POST /path HTTP/1.1
Und die POST-Daten werden eben nicht in HTTP-Headern übertragen, sondern so wie die Seite selber, bloß in der anderen Richtung (als HTTP-Content).
Die globale Variable $_POST hat auch nicht wirklich was mit Headern zu tun.
Ich wollte dich auch nur drauf aufmerksam machen, dass der Begriff "POST-Header" technisch etwas fragwürdig ist -
Hi !
Wie baue ich in das Script noch ein, dass mir nach dem erfolgreichen Löschen der Nachrichten ein Text ausgegeben wird?
Z.B. "Das Löschen war erfolgreich!" -
davy schrieb:
Hi !
Wie baue ich in das Script noch ein, dass mir nach dem erfolgreichen Löschen der Nachrichten ein Text ausgegeben wird?
Z.B. "Das Löschen war erfolgreich!"
$query = mysql_query("DELETE FROM nachrichten WHERE id = '".mysql_real_escape_string($Id)."'"); if($query == true) { echo "Das Löschen war Erfolgreich."; }
-
Schau Dir doch nochmal die ganzen PNs von gestern an. Da ist eigentlich alles beantwortet!
Zur foreach Schleife:
Dein Formular zeigt mehrere Nachrichten an. Daher hast Du richtigerweise die Checkbox als "mail[]" benannt, so dass ein Array übergeben wird.
<input type='checkbox' name='mails[]' value='$id'>
Jede "aktive" Checkbox fügt einen Eintrag in dieses Array, so dass es danach z.B. so aussehen wird
$_POST[mails] = Array { [0] => 12 [1] => 15 [2] => 37 }
Liest Du jetzt mit der beschrieben foreach Schleife dieses Array aus, so erhälst Du nur 0,1,2 und würdest somit nur diese mails anstatt 12,15,37 löschen.
Daher :
foreach($_POST['mails'] as $key=>$value) mysql_query("DELETE FROM nachrichten WHERE id = '".mysql_real_escape_string($value)."'");
-
rnitsche schrieb:
Liest Du jetzt mit der beschrieben foreach Schleife dieses Array aus, so erhälst Du nur 0,1,2 und würdest somit nur diese mails anstatt 12,15,37 löschen.
Öhm, nein. Wenn du im foreach nur eine Variable angibst statt "$key=>$value", dann bekommst du in der die value, nicht den key. -
Oh ja stimmt.... Komisch. Ich hab da schon mal lange drüber gesessen und dann immer nur als Antwort "Array" bekommen, bis ich dann auf $key=>$value umgestiegen bin.
Sorry! -
Hi !
Es gibt mit dem Script leider wieder ein kleines Problem mit dem Javascript.
Sorry, dass ich das hier im PHP Board poste, aber im Thread bekomme ich leider keine Antwort mehr ( http://www.lima-city.de/thread/nachrichtenscript-markierungen-javascript ) Im letzten Post im Thread steht das Problem. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage