Daten per Post senden, die nicht im Form stehen?

  • Daten per Post senden, die nicht im Form stehen?

    Hallo,
    ich arbeite mich grade etwas in PHP ein. Weit bin ich noch nicht, aber ich versuch mich grade an einem kleinen News-Script.
    Problematisch ist jetzt der Teil, wo es um das Bearbeiten eines News-Eintrags geht.
    Den passenden News-Eintrag auswählen und dann ein Formular mit vor gefüllten Werten laden klappt soweit.
    Ich hab dann mein Formular, dass etwa so aussieht:

    Quellcode

    1. <form action="newsEdit.php" method="post">
    2. <fieldset>
    3. <legend>News-Daten eingeben</legend>
    4. <label>Schlagzeile: <input type="text" name="Header" value="Test News"/></label><br>
    5. <label>Bild (optional): <input type="text" name="IMG_ID" /></label><br>
    6. <label>Text: <br>
    7. <textarea type="text" name="Inhalt" rows="10" cols="100">Ein bisschen Text.
    8. Mit einem Absatz</textarea></label><br>
    9. <label>Datum: <select name="DateDay" />
    10. <option value="01">01</option>
    11. <option value="02" selected>02</option>
    12. <option value="03">03</option>
    13. <option value="04">04</option>
    14. // Ich kürz das hier mal ab :)
    15. </select></label>
    16. <label><select name="DateMonth" />
    17. <option value="01">Jan.</option>
    18. <option value="02" selected>Feb.</option>
    19. // das auch
    20. </select></label>
    21. <label><select name="DateYear" />
    22. <option value="2009" selected>2009</option>
    23. <option value="2010">2010</option>
    24. // und das auch :)
    25. </select></label><br>
    26. <label>Autor: <select name="Autor" />
    27. <option value="TestUser1">User Test 1</option>
    28. <option value="TestUser2" selected>Test 2 User</option>
    29. <option value="TestUser3">3 User Test</option>
    30. </select></label><br>
    31. <input type="submit" name="formaction" value="Vorschau" />
    32. <input type="submit" name="formaction" value="Eintragen" />
    33. </fieldset>
    34. </form>
    Alles anzeigen

    Wenn ich jetzt entweder Vorschau oder Eintragen drücke, wird auch das passende Script geladen, und ich kann mir aus $_POST[] die einzelnen Werte raus ziehen. Allerdings sind dort nur die Werte zu finden, die auch im Formular angegeben sind. Weiterhin würde ich aber gerne auch die ID des News-Eintrags übergeben.
    Ich könnte diese natürlich auch in das Form integrieren, aber dann könnte der User die ID auch ändern, und das würde böse ausgehen :)
    Gibt es eine Möglichkeit die ID weiter zu geben ohne dass sie im Form steht? (Sie in dem Script, welches das Form erstellt zu laden, ist kein Problem!)

    TIA
    Look
  • Einzige was da gehen würde, wäre beim Aufruf eine Session zu schreiben diese mit der ID zu füllen und beim erfolgreichen Eintrag das ganze wieder zu löschen.
    Oder du verschlüsselst die ID im Formular und entschlüsselst sie im Verarbeitungsscript. Natürlich muss das ganze noch mit einem nur dir bekannten "Passwort" verschlüsselt werden

    Aber das ist schwachsinn, pack das ganze in dein Formular mit rein als hidden Feld und überprüf die ID einfach. POST und GET Variablen musst du sowieso immer auf richtigkeit überprüfen damit es kein böses Erwachen gibt.


    z.B.

    Quellcode

    1. <form>
    2. ...//dein inhalt
    3. <input type="hidden" value="newsid">
    4. </form>


    Quellcode

    1. $newsid=intval($_POST['newsid']);
    2. $sql=mysql_query('SELECT id FROM news WHERE id='".$newsid."'')
    3. $rows=mysql_num_rows($sql);
    4. if($rows <= 0 ){
    5. exit("Keine Berechtigung");
    6. }


    Das ganze verhindert dann natürlich nicht, dass ein anderer Newsbeitrag bearbeitet werden kann, wenn die ID existiert. Aber wenn das ganze nutzerabhängig geschaltet sein sollte, fragt man einfach ab, ob die ID des Newseintrag und die Userid die in der Db steht passend mit der momentan angemeldeten Userid ist. Ist das der Fall und der User hat an der Newsid zahl gespielt, würde er nur seine eigenen Newseinträge zerstören, ansonsten gibt es ein Exit mit der Meldung "Keine Berechtigung"