 | Wichtig!: |
In diesem Tutorial erkläre ich euch Schritt für Schritt wie ein Askme Skript eigentlich funktioniert und wie ihr es euch selber programmieren könnt.
Da viele Delites Loginreihe/ACP verwenden, habe ich versucht das Askme auch daran anzupassen. (Als evtl. Alternative zu ihrem Askus auf Webvids.de).
Die Code-Ausschnitte im Tutorial dienen lediglich den Erklärungen und dem besseren Verständnis, einen Datei-Download findet ihr am Ende des Tutorials.
Zu aller erst ist es eine Überlegung wert, wie man die Fragen und dazugehörigen Antworten speichern möchte:
- In PHP gibt es die Möglichkeit Texte in ein .txt-Dokument auf dem Server zu schreiben. Einzelne Kompontenten kann man dort durch bestimmte Sonderzeichen trennen und auch so auslesen.
- Ebenso kann man dies mit einer Datenbank(DB) lösen. Man legt eine Tabelle an und füllt sie Stück für Stück mit Inhalten.
In diesem Tutorial beschäftigen wir uns mit der 2. Variante, da dies verbreiteter und schlichtweg auch einfacher zu handhaben ist. Datensätze lassen sich im Gegensatz zu denen in einem .txt-Dokument einzeln löschen und ausgeben. Ebenso ist es bei der 2. Variante möglich, Antworten auf Fragen erst im Nachhinein zu geben und einfacher zu zu ordnen.
Tipp: Wer mehr über .txt-Handling über PHP wissen will, kann sich hier informieren:
Webmaster-Resource.de (Extern) (Tolle Tuts, nur zu empfehlen!)
1. Tabelle Wir beginnen mit der Tabelle in der Datenbank:
 | My-SQL Code: |
CREATE TABLE IF NOT EXISTS askme (
id int(100) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
ip varchar(255) NOT NULL,
email varchar(255) NOT NULL,
hp varchar(255) NOT NULL,
time varchar(255) NOT NULL,
frage text NOT NULL,
antwort text NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Einfach kopieren und in eurer Datenbank über den Reiter "SQL" einfügen.
2. Sicherheitb verschaffenDa wir später nicht haufenweise Spam in unserer Tabelle stehen haben wollen, erstellen wir uns mit folgendem Tut ein Captcha-Skript und ein passendes kleines Bildchen + Textart, die wir später verwenden wollen:
Captcha von Neontrauma (Intern - Giatu)3. Answer aus User-Sicht - FormularNun beginnen wir das Formular für die User zu basteln, über das sie Fragen stellen dürfen.
Wir benötigen folgende Felder:
- Name
- Email
- Homepage
- Text/Frage
Als Code schaut dies mit einer hübschen Tabelle wie folgt aus, askme.php:
<h1>Frage stellen</h1>
<form action="askme.php" method="POST">
<table>
<tr>
<td>Name*:</td>
<td><input type="text" name="name" value="<?php echo $_POST['name'];
?>"></td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input type="text" name="email" value="<?php echo $_POST['email'];
?>"></td>
</tr>
<tr>
<td>URL (mit http):</td>
<td><input type="text" name="hp" value="<?php echo $_POST['hp'];
?>"></td>
</tr>
<tr>
<td>Deine Frage*:</td>
<td><textarea rows=4 cols=20 name="frage"><?php echo $_POST['frage'];
?></textarea></td>
</tr>
<tr>
<td><img src="sicher.php" name="capt" alt=""></td>
<td><input type="text" name="captcha" size="5" value=""
maxlength="5"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="entragen" value="Neue Frage"></td>
</tr>
</table>
</form>
<b>* =</b> Pflichtfelder<br><br>
Erklärung dazu: - Das Captcha habe ich euch gleich mal miteingebaut.
- Die Post-Angaben bei den Value-Werten sorgen dafür, dass bei falsche Captchaeingabe die zuvor verfassten Texte noch immer in den Feldern stehen. So erleichtert ihr euren Besuchern das Frageschreiben und ihr werdet mit Sicherheit mehr ergattern! :)
- Name und Frage haben wir mal als Pflichtfelder gesetzt ( mit * gekennzeichnet).
Im Firefox schaut dies nu so aus:
3. Answer aus User-Sicht - Auswertung/Abfragen des FormularsAls nächsten Schritt bauen wir
über(!) dem Formular dessen Auswertung etc. ein.
Wir starten wie immer erst mit dem Starten der Session, der Einbindung der header.php, db.php und der function.inc.hp (falls die letzten 2 nicht schon in der heade.php einbunden). Anschließend refreshen wir die Session, wenn man die User-Ansicht als Eingelogter ansieht, damit unsere Session nich verfliegt:
<? //askme.php
session_start();
include('functions.inc.php');
include('db.php');
include('header.php');
if(isset($_SESSION["login"])) { // Wenn eingeloggt...
refresh($_SESSION["login"]);
}
?>
Jetzt fangen wir mit der eigentlichen Auswertung an und fragen ab ob das Fomular abgeschickt wurde und was dann passieren soll
<? //askme.php
if (isset($_POST["eintragen"])) {
if(isset($_SESSION["captchax"]) && $_SESSION["captchax"] ==
$_POST["captcha"]){
unset($_SESSION["captchax"]);
if(isset($_POST["name"]) && isset($_POST["frage"])) {
$eintrag = "INSERT INTO askme (name, ip, email, hp, time, frage,
antwort)
VALUES (
'".mysql_real_escape_string($_POST['name'])."',
'".getenv("REMOTE_ADDR")."',
'".mysql_real_escape_string($_POST['email'])."',
'".mysql_real_escape_string($_POST['hp'])."',
'".time()."',
'".mysql_real_escape_string($_POST['frage'])."',
'Noch nicht beantwortet'
)";
$eintragen = mysql_query($eintrag);
if (mysql_errno() == 0) {
echo "Frage ist eingetragen.<br /><br />";
}
else { // Wenn MySQL Fehler..
echo "Es ist leider ein Fehler aufgetreten ". mysql_errno() .":".
mysql_error();
}
}
}
else{
echo "Der Sicherheitscode ist falsch!";
}
}
?>
Erklärung dazu:- Wir fragen ob das Formular abgeschickt wurde, wenn ja...
- ...überprüfen ob ein Captcha erzeugt wurde und ob die Angabe im dazu gehörigen Inputfeld damit übereinstimmt, wenn nicht geben wir eine Fehlermeldung aus, wenn aber ja ...
- löschen wir den Zufallscode und generieren einen anderen für das Formular
- dann pberprüfen wir ob ein Name und eine Frage eingegeben wurde (Pflichtfelder), wenn ja...
- dann tragen wir in die DB-Tabelle die Frage ein und setze als provisorische Antwort "Noch nicht beantwortet"
- wenn kein Fehler auftritt, geben wir aus: "Frage ist eingetragen"
- Ansonsten "Es ist ein Fehler aufgetreten"
3. Answer aus User-Sicht - Bisherige Fragen ausgebenAn dieser Stelle ist euch natürlich überlassen ob ihr die bisherigen Fragen unter oder über das Formular für neue Fragen setzen möchtet. Der Code dafür ist folgender:
<?php //askme.php
echo "<h1>Bisherige Fragen</h1>";
$abfrage = "SELECT * FROM askme ORDER BY time DESC";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)){
echo "<table>";
echo "<tr>";
echo "<td>von <b>".$row->name."</b></td>";
echo "<td>am".date('d.m.Y',$row->time)."</td>";
echo "<td'>";
if($row->email != ""){
echo "<a href="mailto:".$row->email.""><img src="webicons/mail2.png"
border= "0"></a> ";
}
if($row->hp != ""){
echo "<a href="".$row->hp."" target="_blank"><img
src="webicons/hp3.png" border="0"</a>";
}
echo "</td>";
echo "</tr><tr>";
echo "<td colspan='3'>";
echo "Frage: ".$row->frage."<br>";
echo "<br>Antwort: <i>".$row->antwort."</i><br></td>";
echo "</tr>";
echo "</table>";
}
?>
Erklärung dazu:- Wir lesen die Datensätze aus der Tabelle
- Wir erstellen eine Tabelle und setzen die einzelnen Tabellenfelder ein
- Das colspan=3 steht dafür, dass der Inhalt über 3 td (table data) gehen soll
Gesamter Code - askme.phpHier das gesamte Skript "askme.php" zum Herunterladen:
Askme.php herunterladen Die askmebeantworten.php folgt in dem Teil 2 dieses Tutorials.
SmaX
Echt geiles Tutorial!