kostenloser Webspace werbefrei: lima-city


PHP Nachrichtenscript

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das wichtigste steht hier: http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#input
    Falls du noch mehr Infos brauchst, bitte melden!
  4. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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&ouml;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&ouml;schen'>


    Beitrag zuletzt geändert: 31.3.2010 11:26:07 von davy
  5. 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
  6. 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.
  7. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    Hat jemand noch eine Idee?
  8. davy schrieb:
    if ($_POST['delpn1'] == 'Markierte L&ouml;schen') {
    	foreach($_POST['mails'] as $Id)
    	mysql_query("DELETE FROM nachrichten WHERE id = '".$Id."'");
    }



    Das &ouml; wird so nicht mehr bei PHP ankommen. Ich würde einfach
    if ($_POST["delpn1"])
    nehmen, das reicht.

    Ansonsten solltest du dir mal Gedanken über die Sicherheit machen, Stichwort SQL-Injections.
    Stell dir mal vor, jemand schickt da
    ' or ''='
    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.
  9. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    theseven schrieb:
    davy schrieb:
    if ($_POST['delpn1'] == 'Markierte L&ouml;schen') {
    	foreach($_POST['mails'] as $Id)
    	mysql_query("DELETE FROM nachrichten WHERE id = '".$Id."'");
    }



    Das &ouml; wird so nicht mehr bei PHP ankommen. Ich würde einfach
    if ($_POST["delpn1"])
    nehmen, das reicht.

    Ansonsten solltest du dir mal Gedanken über die Sicherheit machen, Stichwort SQL-Injections.
    Stell dir mal vor, jemand schickt da
    ' or ''='
    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.


    Danke ! Jetzt gehts !

    Wie schütze ich das Script gegen SQL-Injections ?
  10. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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
  11. 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
  12. 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
  13. 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.
  14. 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
    POST /path HTTP/1.1
    würde ich nicht unbedingt als Header bezeichnen.
    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 ;-)
  15. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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!"
  16. 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.";
    }
  17. 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)."'");
  18. 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.
  19. 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!
  20. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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.
  21. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!