5x bewertet

Eigenes Ask&Answer Skript (Teil 2)

von Isa_G  |  07.12.2009 um 19:02 h
PHP Anwendungen
Typ: PHP Anwendungen
Stufe:Mittel
Wichtig!:
Bitte erst den 1. Teil meines A&A Tuts lesen

... Fortsetzung:

Bei dem 1. Teil haben wir unten mit dem Formular begonnen und anschließend die Auswertung vorgenommen, die wir im PHP-Dokument darüber geschrieben haben.
Hier im 2. Teil erkläre ich euch die 2.PHP-Datei ebenso von unten nach oben
Warum? Da es dann einfach besser zu folgen ist, wei sich die Abfragen/Auswertungen stets auf das Formular beziehen.
Die Code-Ausschnitte im Tutorial dienen lediglich den Erklärungen und dem besseren Verständnis, ein Download aller Dateien findet ihr am Ende des Tutorials.

4. Ask & Answer aus ACP Sicht - Fragen ausgeben und Aktionen einläuten
Wir fangen also auch hier damit an, die Fragen aus der Datenbank auszulesen und mögliche Aktionen wie Löschen und Bearbeiten zu erstellen.
Dies geht wiederum über 2 Möglichkeiten:
  • Entweder man übermittelt die ID der Frage, die man bearbeiten oder löschen möchte, in einem Hiddenfeld (unsichtbares Formularfeld) und gibt dem Submitbuttons, die die Aktion eineiten sollen einen eindeutigen Namen (Methode ist über POST möglich)
  • Oder man bleibt beim GET und schreibt sowohl die ID als auch die Aktion, die ausgeführt werden soll in die URL, Beispiel: Dein-server.de/askbeantworten.php?action=antwort&id=227

    Wir nehmen das 2. Beispiel und beginnen mit dem Auslesen der Fragen:
    <?php //askbeantworten.php

    echo "<h1>Askme-Fragen</h1>";
    $abfrage "SELECT * FROM askme ORDER BY time DESC";
    $ergebnis mysql_query($abfrage);
    while(
    $row mysql_fetch_object($ergebnis)){
    echo 
    "<div>";
    echo 
    "<table><tr><td><b>Gefragt von:</b></td>";
    echo 
    "<td>".$row->name."</td></tr>";
    echo 
    "<tr><td><b>Gefragt am:</b></td>";
    echo 
    "<td>".date("d.m.Y",$row->time)." um
    "
    .date("H:i",$row->time)."</td></tr>";
    if(
    $row->email !=""){
    echo 
    "<tr><td><b>Email:</b></td>";
    echo 
    "<td>".$row->email."</td></tr>";
    }
    echo 
    "<tr><td><b>Frage:</b></td>";
    echo 
    "<td>".$row->frage."</td></tr>";
    echo 
    "<tr><td><b>Antwort:</b></td>";
    echo 
    "<td><i>".$row->antwort."</i></td></tr></table>";
    echo 
    "<p align='right'>";
    echo 
    "<a
    href=askbeantworten.php?action=antwort&id="
    .$row->id.">Bearbeiten</a>
    "
    ;
    echo 
    "<a
    href=askbeantworten.php?action=delete&id="
    .$row->id.">Löschen</a>";
    echo 
    "</p></table></DIV>";
    }
    ?>

    Erklärung dazu:

    • Tabellen-SELECT-Befehl sortiert nach Zeit, damit die neusten immer als erste da stehen
    • Tabelle mit Ausgaben der Daten
    • 2 Links zum Bearbeiten/Beantworten und Löschen der Frage, mit Weiterleitung der ID der Frage


    4. Ask & Answer aus ACP Sicht - Die Aktion "BEARBEITEN"/"ANTWORTEN"
    Wir fangen nun ganz oben in der ersten Zeile der Datei ein (über der Tabelle) und kopieren folgende Includes und "BIST DU EINGELOGGT?"-Abfrage rein:
    <?php //ask beantworten
    session_start();
    include(
    'header.php');
    include(
    'db.php');
    include(
    'functions.inc.php');

    if(isset(
    $_SESSION['login'])) { // Wenn eingeloggt..
    refresh($_SESSION['login']); ?>



    Anschließend fragen wir nach ob die Aktion "ANTWORT" ausgeführt wurde und ob ID vorhanden ist, überprüfen diese, fragen dann wieder die Tabelle nach der ID ab, geben die Daten der Frage in einem Formular mit einer Tabelle aus und ermöglichen es uns die Standardantwort "Noch nicht beantwortet" zu bearbeiten:
    <?php
    if($_REQUEST["action"] == "antwort" && isset($_REQUEST['id'])) {
    if(
    is_numeric($_REQUEST['id'])){
    $abfrage "SELECT frage, antwort FROM askme WHERE id
    ='"
    .$_REQUEST['id']."'";
    $ergebnis mysql_query($abfrage); 
    while(
    $row mysql_fetch_object($ergebnis)){ 
    echo 
    "<form
    action=\"askbeantworten.php?action=update&id="
    .$_REQUEST['id']."\"
    method=\"POST\">"
    ;
    echo 
    "<table>";
    echo 
    "<tr>";
    echo 
    "<td><b>Frage:</b></td>";
    echo 
    "<td><textarea rows=4 cols=20
    name=\"frage\">"
    .$row->frage."</textarea></td>";
    echo 
    "</tr><tr>";
    echo 
    "<td><b>Antwort:</b></td>";
    echo 
    "<td><textarea rows=4 cols=20
    name=\"antwort\">"
    .$row->antwort."</textarea></td>";
    echo 
    "</tr><tr>";
    echo 
    "<td></td>";
    echo 
    "<td><input type=\"submit\" value=\"antwort!\"></td>";
    echo 
    "</tr></table></form><br /><br />";
    }
    }
    }
    ?>

    Erklärung dazu:

    • is_numeric überprüft ob die ID auch wirlklich eine Zahl ist und keine Hacker-Manipulation
    • Das Formular ist wiederum mit einer anderen Aktion vernetzt, die eintritt wenn man es abschickt und zwar "UPDATE" - diese Aktion speichert die vorgenommene Änderung der Standardantwort in die Tabelle der DB



    4. Ask & Answer aus ACP Sicht - Die Aktion "UPDATE"
    Darunter bauen wir auch gleich die UPDATE Aktion ein:

    <?php
    elseif($_REQUEST["action"] == "update" && isset($_REQUEST['id'])) {
    if(
    is_numeric($_REQUEST['id'])){
    $aendern "UPDATE askme Set 
    frage= '"
    .mysql_real_escape_string($_POST['frage'])."', 
    antwort = '"
    .mysql_real_escape_string($_POST['antwort'])."' 
    WHERE id= '"
    .$_REQUEST['id']."'"
    $update mysql_query($aendern); // Antwort hinzufügen
    echo "Antwort hinzugefügt<br /><br />";
    }
    }
    ?>

    Erklärung dazu:

    • kein IF oder ELSE sondern ELSEIF = Da keine 2 oder mehr Aktionen gleichzeitig eintreten können
    • mysql_real_escape_string filtert die Eingabe im Feld nach Skript-Manipulation


    4. Ask & Answer aus ACP Sicht - Die Aktion "LÖSCHEN"
    Darunter nun die Lösch-Aktion, die sofort löscht (keine WIRKLICH?-Funktion)
    <?php
    elseif($_REQUEST["action"] == "delete" && isset($_REQUEST['id'])) {
    if(
    is_numeric($_REQUEST['id'])){
    $loeschen "DELETE FROM askme WHERE id = '".$_REQUEST['id']."'"
    $loesch mysql_query($loeschen); // Eintrag löschen
    echo "Eintrag gelöscht<br /><br />";
    }
    }
    ?>



    4. Gesamter Code - asbeantworten.php
    Hier der gesamte Code zum Download mit askme.php, askbeantworten.php und dem Captcha:
    Ask&Answer - PHP und MYSQL



6 Kommentare




CrazyMoFu

Hey echt hammer aber vielleicht kannst du alle datein als zip zum downloaden machen, denn ich wollte schon immer wissen wie man ein chapta und name einbaut ich habe ein askme von wakscript...
am 07.12.2009 um 20:24 Uhr


Isa_G

Hallo Crazymofu:
die Idee ist gut, ich setze sie gleich mal um und lade ein zip hoch :)
danke
am 08.12.2009 um 08:58 Uhr


CrazyMoFu

Hey ISA danke wenn ich das jetzt downloade und auf mein Server packen würde, würde es dann gehen wie ein echtes richtiges Askme oder muss man noch was machen?!
Naja ich will eh nur wissen wegen dem Chapta... scheiß spamer immer xD
ABER DANKE!!!!!
am 08.12.2009 um 14:05 Uhr


Isa_G

Naja also dein Ask&Answer Skript von Wask o.ÖÄ. funktioniert glaube ich ohne MYSQL.
Hier für mein Tut brauchst du jedoch noch eine Datenbank.
Es ist daher eher für Websites mit eine Loginbereich gemacht :)

Und Dieses Tutorial gehört noch dazu!
Ich habe es in 2 Teile geteilt, da es sonst zu lang wäre. Hier im 2. Tut ist aber auch die Datei aus dem 1. Teil im Download enthalten. Musst dort also nur den MYSQL-Code kopieren, in deinem PHPmyAdmin einrichen und die Verbindung mit der dbl.php aufbauen. Dich wie sonst immer einloggen und dann sollte es mit den beiden php-datein klappen :)

Wie man ein Captcha einbaut ist hier erklärt:
captcha

Mit dem Wask Ask&Answer müsst ich mich nochmal auseinandersetzen um dir zu erklären wo es da hinmüsste. Viell. mache ich dazu noch ein Tut. Hast du da denn so viel Spam drin, oder wie?
am 08.12.2009 um 14:32 Uhr


CrazyMoFu

Ja oft einfach nur "jbsefowfb" oder so und wenn ich ein Chapta habe dann sind leute zu faul deßwegen was einzugeben vllt. ist es auch ein PC ~Mystiriös~ xD wäre aber echt toll...
am 08.12.2009 um 14:36 Uhr


CrazyMoFu

Hat sich erledigt.... war nur doof glaub ich xD
am 08.12.2009 um 15:42 Uhr