Loading...   Upload Image

Askme mit MySQLTutorials » PHP/MySQL Tutorials » Askme mit MySQL

Verfasst von Alice am 18.04.2009 - wurde schon 4250 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
1x bewertet
Schwierigkeit: einfach
Kommentare: [ 1 ]

Tag - Schlagwort PHP Tag - Schlagwort MySQL

Askme mit MySQL - Tutorial

Im Wishbook wurde ein Tutorial gewuenscht, dass aufzeigt, wie man ein Askme erstellt, wo nicht alles in einer einzigen Datei steckt ...

Ich bin zwar der Meinung, dass man sich nicht unnoetig viel Gepaeck aufladen sollte, aber nun denn ...

Unser Askme wird aus insgesamt 11 Dateien bestehen, nein kein Schreibfehler, wunderschoene 11 Dateien -.-
Wer es deutlich handlicher moechte, der liest hier bitte nicht weiter, sondern widmet sich dem Tutorial Ask and answer, da kommt am Schluss genau das Selbe in gruen bei raus, nur eben in einer einzigen Datei!

Was wird benoetigt?


- PHP / MySql Grundkenntnisse
- 1 MySql Datenbank
- Webspace der PHP unterstuetzt

Wie schauts aus?


- Askme
- Admin => Login
- Admin => Uebersicht
- Admin => Antworten

Step 1 - Die Datenbank


Als erstes erstellen wir eine neue Tabelle in der Datenbank(mit PHPMyAdmin)
CREATE TABLE IF NOT EXISTS `askme` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `frage` text NOT NULL,
  `antwort` text NOT NULL,
  `f_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `a_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `status` enum('B','U') NOT NULL DEFAULT 'U',
  `ip` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
);


Step 2 - DB Verbindung | config.inc.php



Config.inc.php heisst unsere Datei mit der wir eine Verbindung zur Datenbank herstellen
 


Step 3 - ask_me.php



Die Datei ask_me.php listet alle bisher gestellen Fragen, welche beantwortet wurden, auf...

 


Grafixx - Askme 










Grafixx - Askme


Frag mich ..."; // ALLE fragen zaehlen $alle = "SELECT id FROM askme"; $result_a= mysql_query($alle, $connection) or die (mysql_error()); $total = mysql_num_rows($result_a); // ALLE unbeantworteten fragen zaehlen $unbe = mysql_query("SELECT id, frage, ip FROM askme WHERE status='U'"); $unbeantwortet = mysql_num_rows($unbe); // ---------------------------------- Fragen auslesen -------------------------------------------- $show = "id, DATE_FORMAT(f_date, '%d.%m.%Y') AS f_datum, DATE_FORMAT(a_date, '%d.%m.%Y') AS a_datum, frage, antwort"; $result = mysql_query("SELECT $show FROM askme WHERE status='B'"); // DB Abfrage aller Eintrage mit status = B $beantwortete = mysql_num_rows($result); // Anzahl der beantworteten Fragen if ($total == '1'){ echo "

Es wurde bisher $total Frage gestellt"; }else{ echo "

Es wurden bisher $total Fragen gestellt"; } if($unbeantwortet == '1'){ echo ",
$unbeantwortet Frage davon ist noch unbeantwortet ...

"; }else{ echo ",
$unbeantwortet Fragen davon sind noch unbeantwortete ...

"; } // ------------------- Formular zum Fragen einbinden ----------------------------------------------- include('ask.php'); // ------------------------------------------------------------------------------------------------- echo "

Frage & Antwort ...


"; // Headline ausgeben // ---------------------- Seitennavigationsdaten -------------------------------------------------- $links_per_page = "5"; // Anzahl der Links die Pro Seite angezeigt werden sollen $p = "5"; // Anzahl der Links die in der Seitenavigation ausgegeben werden include('navigation.php'); // Seitennavigation einbinden // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- // Pruefen ob Fragen vorhanden if(!$result || mysql_num_rows($result)<1) { echo "

Es sind bisher noch keine Fragen vorhanden ...

\n"; } else { // Datenbank-Abfrage ----------------------------------------------- $abfrage = mysql_query("SELECT $show FROM askme WHERE status='B' ORDER BY id DESC LIMIT $start,$links_per_page"); while ($row=mysql_fetch_array($abfrage)) { // Ausgabe der Fragen ... extract($row); echo "
\n"; echo "Frage:
"; echo $frage; // Frage ausgeben echo "

"; echo "Antwort:
"; echo $antwort; // Antwort ausgeben echo "
"; echo "Gestellt am ".$f_datum." | Beantwortet am ".$a_datum."
\n"; echo "
\n
\n "; } // close while } // close nix vorhanden echo "
\n"; echo "Seite $go von $pages\n"; echo $link_string; // Ausgabe der Seitennavigation echo "
\n"; ?>

Grafixx - Askme © Alice-Grafixx.de | Login



Step 4 - ask.php



In unsere Datei ask_me.php wird die Datei ask.php mittels include() Befehl eingebunden, die Datei ask.php ist dafuer zustaendig, dass Fragen gestellt werden koennen ...

Error ...

\n"; echo "

Wenn du keine Frage stellst, kann ich dir auch nicht antworten ...

\n"; }else{ $visitorip = $_SERVER['REMOTE_ADDR']; // ip auslesen // pruefen ob IP schon eine Frage gestellt hat in den letzen 5 Minuten $check_ip = mysql_query("SELECT id FROM askme WHERE f_date > DATE_SUB(NOW(), INTERVAL 5 MINUTE) AND ip = '$visitorip'"); if(mysql_num_rows($check_ip) == 0){ // Wenn mit der IP noch keine Frage gestellt wurde // Datenbankeintrag $eintragen = mysql_query("INSERT INTO askme (id, ip, frage, f_date) VALUES ('','$visitorip','$ask',now())"); // Wenn Frage erfolgreich in DB eingetragen if ($eintragen){ echo "

Wunderbar ...

\n"; echo "

Die Frage wurde erfolgreich eingereicht ...

\n"; }else{ // Wenn nicht erfolgreich in DB eingetragen echo "Da lief was schief ...\n"; } }else{ // Fehler ausgeben, wenn schon gefragt echo "

Error ...

\n"; echo "

Du hast schon ein Frage in den letzten 5 Minuten gestellt ...

\n"; echo "Bitte versuch es spaeter nochmal ;)

\n
\n"; } // close Fehlerausgeben }// close empty }// close isset submit if(!$eintrag){ //-------------------------------------------------------------- Formular um Frage zu stellen ?>

Frag auch du mich etwas ...
 



Step 5 - login.php



Die Datei login.php enthaelt das Formular zum Einloggen in den Admin-Bereich unseres Askme Scriptes ...


 


Grafixx - Askme || Adminpanel 










Grafixx - Askme


'; $error = "1"; } if(empty($login_pass)) { $message .= 'Bitte geben Sie ihr Passwort ein ...
'; $error = "1"; } if($login_name != $grafixx_name OR $login_pass != $grafixx_pass){ $message .= 'Zugriff verweigert ...
'; $error = "1"; } if($error != "1"){ // session handle----------------------------- $_SESSION['login'] = $_SERVER['REMOTE_ADDR']; echo ""; } if($error == "1"){ echo "

Error ...

\n

$message

"; } } // close isset [admin_login] ?>
Login

Grafixx - Askme © Alice-Grafixx.de


Hier MUESSEN die Variablen $grafixx_name und $grafixx_pass mit den Zugangsdaten bestueckt werden!!!

Step 6 - admin.php


Es folgt die Datei admin.php, diese Datei listet uns ALLE unbeantworteten Fragen auf, damit diese dann beantwortet oder ggf. geloescht werden koennen ...



 


Grafixx - Askme 










Grafixx - Askme


Unbeantwortete Fragen"; if($total_records < 1){ // Pruefen ob Fragen beantwortet werden muessen echo "

Zur Zeit existieren keine unbeantworteten Fragen ...

"; }else{ $abfrage = mysql_query("SELECT id, frage FROM askme WHERE status ='U' ORDER BY id DESC LIMIT $start,$links_per_page"); while ($row=mysql_fetch_array($abfrage)) { // Ausgabe der Fragen ... extract($row); echo "
\n"; echo "Frage:
"; echo $frage; // Frage ausgeben echo "
\n
\n "; echo "\n"; } // close while // ---------------------- Seitennavigation ausgeben ------------------------------------------ echo "
\n"; echo "Seite $go von $pages\n"; echo $link_string; // Ausgabe der Seitennavigation echo "
\n"; } // close fragen vorhanden echo "

Grafixx - Askme © Alice-Grafixx.de ".date('Y')." | "; if(isset($_SESSION['login'])){ // Admin Logout echo "logout"; } ?>



Step 7 - answer.php


Die Datei answer.php ist fuer das Beantworten einer Frage zustaendig ...



 


Grafixx - Askme 










Grafixx - Askme


Error ...

\n"; echo "

Es wurde keine ID uebergeben

\n
\n"; }else{ // Sofern ID uebergeben wurde // Abfrage der Daten $abfrage = mysql_query("SELECT frage,ip FROM askme WHERE id='$id'"); // Ausgabe der Daten $row = mysql_fetch_object($abfrage); echo "

Frage ".$id." beantworten

\n

Frage: ".$row->frage."\n"; echo "von IP ".$row->ip."

\n"; if (isset($_POST['okay'])){ // Wenn auf absenden geklickt wurde $antwort = clean_it($_POST['antwort']); if (empty($_POST['antwort'])) { echo "

Error ...

\n"; echo "

Bitte Danke Antwort eingeben ...

\n"; }else{ // Datenbankeintrag $antworten = mysql_query("Update askme SET antwort ='$antwort', a_date = now(), status='B' WHERE id ='$id'"); // Wenn Frage erfolgreich beantwortet wurde if ($antworten){ echo ""; // Weiterleitung => Login }else{ // wenn nicht beantwortet wurde echo "Da lief was schief ...\n"; } }// close empty } // close Post submit ?>

Grafixx - Askme © Alice-Grafixx.de ".date('Y')." | "; if(isset($_SESSION['login'])){ // Admin Logout echo "logout"; } ?>


Step 8 - delete.php


Die Datei delete.php ist fuer das Loeschen einer unbeantworteten Frage zustaendig ...

Error ...

\n"; echo "

Es wurde keine ID uebergeben

\n
\n"; }else{ // Sofern ID uebergeben wurde $delete = mysql_query("DELETE FROM askme WHERE id='$id'"); // Frage Loeschen if($delete){ // Wenn erfolgreich geloescht echo ""; // Weiterleitung => admin.php }else{ // Wenn nicht => Fehler ausgeben echo "

Error ...

\n"; echo "

Die Frage konnte nicht geloescht werden

\n
\n"; }// close $delete } // close GET id ?>


Step 9 - logout.php


Und dann gaebe es noch die Datei logout.php, welche zum Abmelden fuer den Admin-Bereich verantwortlich ist ...
";	// Weiterleitung => Login
	
?>


Step 10 - navigation.php


Als naechstes haetten wir dann die Datei navigation.php, diese Datei wird sowohl als auch in die admin.php und die ask_me.php eingebunden, da diese uns ermoeglicht eine Blaetterfunktion fuer die Fragen zu bieten ...
 $pages) {
    $go = 1;
} else {
    $go = $_GET['go'];
}

// Linkkette
$links = array();

if(($go - $p) < 1){          
  $prevOffset = $go - 1;      
}else {          
  $prevOffset = $p;      
}            
if(($go + $p) > $pages) {          
  $nextOffset = $pages - $go;      
}else {          
  $nextOffset = $p;      
}          
$off = ($go - $prevOffset);    
                
if ($go- $prevOffset > 1){          
    $first = 1;
    $links[] = "« Erste ...\n";      
}      
if($go != 1){          
    $prev = $go-1;
    $links[] = " «\n";     
}   
       
for($i = $off; $i <= ($go + $nextOffset); $i++){  
  if ($i != $go){              
        $links[] = "$i\n";
  }elseif($i == $pages) {              
        // aktuelle Seite, braucht keinen Link
        $links[] = "[ $i ]\n";  
        }          
  elseif($i == $go){              
        // aktuelle Seite, braucht keinen Link
        $links[] = "[ $i ]\n";  
        }      
}                
if($go != $pages){          
    $next = $go+1;
    $links[] = " » \n";
}      

if ($off+$prevOffset*2 < $pages){          
    // zur letzen Seite springen
    $last = $pages;
    $links[] = "... Letzte »\n";
}      
 
$link_string = implode("   ", $links);  // Packt alles in einen String

$start = ($go-1) * $links_per_page; 

?>


Step 11 - function.php


Und dann gaebe es da noch die Datei function.php, sie ist fuer das 'Saeubern' der Daten zustaendig, welche mit der DB zu tun haben, die Datei wird mittels include() Befehl in alle Dateien eingebunden, welche mit der DB was am Hut haben ...
 SQL Injektions
function clean_it($dirty){ 
    
     // Auswirkungen von magic_quotes_gpc zuruecksetzen, wenn ON
    if (get_magic_quotes_gpc()) {
        $clean = mysql_real_escape_string(stripslashes(htmlspecialchars($dirty)));
    }else{
        $clean = mysql_real_escape_string(htmlspecialchars($dirty));
    }

    return $clean;
}

?>


Step 12 - login_check.php


Und zu guter Letzt haetten wir da noch die Datei login_check.php, welche prueft ob man korrekt eingeloggt ist...
";	// Weiterleitung => Login

}
?>


Aehm ja, ich glaube das waeren dann alle Dateien, naehere Ausfuehrungen zu diesen erspare ich mir der Einfachheit halber jetzt mal, die einzelnen Dinge sind eigentlich recht gut auskommentiert, so dass man sich mit ein paar PHP-Kentnissen recht gut zurecht finden kann, vorrausgesetzt man steht auf 1000 Dateien, wenn es auch eine Einzige tut...

Sollte jemand das dringende Beduerfnis hegen, die komplette Dateisammlung herunterladen zu wollen, bitteschoen ...

Tutorial Dateien downloaden

Kommentar schreibenHinterlasse einen Kommentar

Du musst angemeldet sein, um einen Kommentar zu hinterlassen...

Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...


Neuste Tutorials

Neuste Forenthemen

Neuste Kommentare

Affiliates:   Gallery Yuri  •   Chibi Graphics  •   Pat DG  •   The Seduction  •   Colorful Gfx  •   Blue-Graphics  •   Design Grafixx  • Show all ...
designenlassen.de - Der Design-Marktplatz für Webdesign, Logo-Design, Flyerdesign u.v.m.        ALL-INKL.COM - Webhosting Server Hosting Domain Provider