1x bewertet

Ask & Answer

von Delite  |  22.02.2007 um 22:18 h
PHP Anwendungen
Typ: PHP Anwendungen
Stufe:Nur für Fortgeschrittene
Hui, dieses Skript ist jetzt wirklich seehr schwer! Alles wird in einer Datei verarbeitet: antwort erstellen, löschen und schreiben.
Zu erst geht ihr in PHPMyAdmin in der Menüleiste auf SQL und fügt in das Textfeld folgenden Code:

My-SQL Code:
CREATE TABLE `ask` (
`id` int(150) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`timestamp` int(150) NOT NULL,
`text` text NOT NULL,
`answer` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 ;


Jetzt haben wir die Tabelle ask erstellt mit id, name, email, timestamp, text und answer.
Jetzt erstellen wir unsere einzige Datei ask.php:


<?php
    
include("db.php"); // db.php includen, um Verbindung zur Datenbank zu
bekommen.

    
// Login-Daten zum Antworten:
    
$passwort "123";

    function 
postvars($string// Funktion um < und > in Sonderzeichen
umzuwandelnzur Sicherheit von PHP-Coden unt Html-Anwednung.
    { 
        
$string htmlspecialchars($_REQUEST[$string]);
        return 
str_replace("\n","<br>",$string);
    }

    if (isset(
$_REQUEST["submit"])) { // Wenn Formular abgeschickt,
dann..
        if(isset(
$_REQUEST["name"]) && isset($_REQUEST["text"])) { // Wenn
Name und Text ausgefüllt sind..
            
$eintrag "INSERT INTO ask (name, email, timestamp, text) 
            VALUES ('"
.postvars("name")."', '".postvars("email")."',
'"
.time()."', '".postvars("text")."')"// Eintragen in die Datenbank
time() ist der Timestamp und postvars die Funktion da oben
            $eintragen 
mysql_query($eintrag);
            if (
mysql_errno() == 0) { // Wenn MySQL keine Fehler hat dann..
                
echo "Frage ist eingetragen.<br /><br />";
            } else { 
// Wenn MySQL Fehler..
                
echo "Es ist leider ein Fehler aufgetreten "mysql_errno() .": ".
mysql_error(); // Fehlerausgabe
            
}
        }
    }

    if (
$_REQUEST["action"] == "answer" && $_REQUEST["passwort"] ==
$passwort && isset($_REQUEST["id"])) { // Wenn Passwort richtig ist,
die id da ist und die Aktion answer dann..
    
        
$abfrage "SELECT text, answer FROM ask WHERE id =
'"
.$_REQUEST["id"]."'"// Eintrag anzeigen wo id = id
        
$ergebnis mysql_query($abfrage); 
        while(
$row mysql_fetch_object($ergebnis)) 
        { 
?>
            <form action="ask.php?passwort=<? echo $_REQUEST["passwort"];
?>&action=answer2&id=<? echo $_REQUEST["id"]; ?>" method="post">
            <b>Antworten</b><br />
            <b>Frage:</b> <? echo $row->text?>
            <br />
            Antwort: <textarea rows=4 cols=20 name="text"><? echo $row->answer;
?></textarea><br />
            <br />
            <input type="submit" value="Answer!"> 
            </form>
            <br /><br />
<?
        

    } 
    elseif (
$_REQUEST["action"] == "answer2" && $_REQUEST["passwort"] ==
$passwort && isset($_REQUEST["id"])) { // Wenn Passwort richtig ist,
die id da ist und die Aktion answer2 (abschicken des Formulares)
dann..
        
$aendern "UPDATE ask Set answer = '".postvars("text")."' WHERE id
= '"
.$_REQUEST["id"]."'"
        
$update mysql_query($aendern); // Antwort hinzufügen
        
echo "Antwort hinzugefügt<br /><br />";
    }
    elseif(
$_REQUEST["action"] == "delete" && $_REQUEST["passwort"] ==
$passwort && isset($_REQUEST["id"])) { // Wenn Passwort richtig ist,
die id da ist und die Aktion delete (Löschendann..
        
$loeschen "DELETE FROM ask WHERE id = '".$_REQUEST["id"]."'"
        
$loesch mysql_query($loeschen); // Eintrag löschen
        
echo "Eintrag gelöscht<br /><br />";
    }
?>
<form action="ask.php" method="post">
<b>Frage stellen</b><br />
Name*: <input type="text" name="name"><br />
E-Mail: <input type="text" name="email"><br />
Text*: <textarea rows=4 cols=20 name="text"></textarea><br />
<br />
<input type="submit" name="submit" value="Neue Frage"> 
</form>
<br /><br />
<b>Fragen</b><br /><br />
<?php
    $proseite 
10// Wieviele Einträge pro Seite? 

    
if(!isset($_REQUEST["seite"])) { // Wenn die Seite leer ist, ist
Seite 0
        $seite 
0;
    } else {
        
$seite $_REQUEST["seite"];
    } 

    
// Hier beginnt die Anzeige!
    
$abfrage "SELECT * FROM ask LIMIT ".$seite.",".$proseite// Limit
fängt bei seite an und zeigt soviele Einträge wie bei proseite
    $ergebnis 
mysql_query($abfrage); 
    while(
$row mysql_fetch_object($ergebnis)) 
    { 
        echo 
"<b><a href=mailto:".$row->email.">".$row->name."</a></b> am
"
.date("d.m.Y",$row->timestamp)."<br />".$row->text."<br /><br
/><i>"
.$row->answer."</i><br />"// Eintrag anzeigen ;)
        
if($_REQUEST["passwort"] == $passwort) { // Wenn eingeloggt, dann
            
echo "<a
href=ask.php?action=answer&passwort="
.$_REQUEST["passwort"]."&id=".$row->id.">
Answer</a> | <a
href=ask.php?action=delete&passwort="
.$_REQUEST["passwort"]."&id=".$row->id.">
Löschen</a><br /><br />"
;
        }
    } 

    echo 
"<br /><br />";
    
$count 0// Seitenfunktion, siehe anderes Tutorial
    
$abfrage "SELECT id FROM ask"
    
$ergebnis mysql_query($abfrage); 
    while(
$row mysql_fetch_object($ergebnis)) 
    { 
        if(
$count%$proseite == 0) { 
            
$aktuelleseite $count/$proseite+1
            if(
$count == $seite) { 
                echo 
$aktuelleseite." "
            } else { 
                echo 
"<a
href=?seite=$count&passwort="
.$_REQUEST["passwort"].">".$aktuelleseite."</a>
"

            } 
        } 
        
$count++; 
    } 
?>



Die Kommentare sollten soweit alles erklären, hier auf der Seite sieht es etwas durcheinander aus, deswegen solltet ihr euch weiter unten das Ergebnis downloaden.

Einloggen, um die Daten zu löschen und zu antworten könnt ihr, indem ihr die Seite so besucht ask.php?passwort=(euer gewähltes Passwort). Hätte sich nicht gelohnt für den Login ein ganzes Formular zum Login zu machen, sonst würde es noch länger werden *g*
Die Kommentare sollten eigentlich alles erklären. Bei Fragen könnt ihr das natürlich hier posten.

DAS ERGEBNIS DOWNLOADEN



14 Kommentare




Sayuri

Irgentwie geht das bei mir mit den Antworten nciht...
am 11.06.2007 um 20:28 Uhr


Tobi

so:
du gibst in dir adressleiste ein:
www.deine-adresse.de/ask.php?passwort=deinpasswort

hoff das klappt bei dir
good luck xD
am 18.06.2007 um 13:43 Uhr


Das tut ist voll gut , doch iwie geht das Askme im allgemeinen bei mir nicht o.o

da steht immer
Parse error: syntax error, unexpected T_STRING in /var/www/web10/html/hostees/Nick/ask.php on line 3
am 12.10.2008 um 19:13 Uhr


Tanya C. Silver

@Darkness: Das Problem liegt an den Kommentaren ^^. Lösch sie einfach raus, dann erscheint dieser Fehler nicht. Der Code mag's nämlich nicht, wenn die über mehr als eine Zeile gehen und dann gibt's Probleme.
am 19.12.2008 um 19:15 Uhr


Coconutshake

bei mir klappt der code für mysql nicht .. da kommt dauernd nur

MySQL meldet: Dokumentation
#1046 - No database selected

und so ein rotes kreuz vor
`timestamp` int( 150 ) NOT NULL ,
am 03.03.2009 um 17:44 Uhr


CrazyMoFu

<a href=".$row->hp.">".$row-

>name."</a>
Ich möchte das die Hp in einem neuen Fenster angezeigt wird wie geht das?
am 05.01.2010 um 17:21 Uhr


yummy

<a href=".$row->hp." target="_blank" >".$row->name."</a> musst du einfügen.
am 05.01.2010 um 17:37 Uhr


CrazyMoFu

muss sonst noch etwas in den code also ganz oben?! oder so?!
am 05.01.2010 um 19:30 Uhr


CrazyMoFu

Jetztz ist plötzlich der fehler da Parse error: syntax error, unexpected T_STRING, expecting ′,′ or ′;′ in /data/multiserv/users/208478/projects/245321/www/login/ask.php on line 101

und das ist das was du mir gegeben hast ich verzweifel
am 05.01.2010 um 19:47 Uhr


monkeybox

Du musst die Anführungszeichen von target="_blank" mit einem Backslash schreiben. Also target=\"_blank\" Smilie
am 05.01.2010 um 21:12 Uhr


yummy

Sorry, ich hatte nicht darauf geachtet, dass es eine echo-Ausgabe ist ˆˆ"
am 05.01.2010 um 22:24 Uhr


CrazyMoFu

@monkeybox danke
@yummy ja nicht schlimm ich wusste halt nur nicht wie ich das bei echo machen muss im normalen weiss ich das... php ist noch nicht ganz so drin bei mir aber das meiste.. xD hab ja nen php buch aber das ist doof
am 05.01.2010 um 22:33 Uhr


CrazyMoFu

Ne also das geht nicht ich komme immer auf die kilu fehlerseite
Der code

<a href=".$row->hp." target=\"_blank\" >".$row->name."</a>

am 06.01.2010 um 14:38 Uhr


Sadako

ich weis, dass tutorial ist schon was älter aber ich versuche mich trotzdem grade dran, ich hab jetzt das problem in dieser zeile:


 echo "<b><a href=mailto:".$row->email.">".$row->name."</a></b> am 
".date("d.m.Y",$row->timestamp)."<br />".$row->text."<br /><br 
/><i>".$row->answer."</i><br />";



der echo-befehl wird geöffnet, aber gleich am anfang nach dem href=mailto:" wieder geschlossen, so funktioniert der ganze ab da folgende rest der datei nichtmehr.
ich weis leider nicht wie ich das " dort ersetzen oder umgehen könnte da es ja eigentlich gebraucht wird...
wegmachen oder durhc ′ ersetzen klappt nicht, kann mir wer helfen? D:
am 10.12.2011 um 22:43 Uhr