• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Gästebuch mit php und mysql

Status
Für weitere Antworten geschlossen.

krackmoe

Neues Mitglied
Hi

Bin relativer Programmierneuling und habe gerade mein erstes Gästebuch geschrieben.
Habt ihr noch irgendwelche Ideen bzw. Verbesserungsvorschläge für mich?

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>Zimmermann Daniel</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="javas.js"></script>
</head>
    <body>
        
            <div id="haupt">
                <div id="header" style="background-image: URL(slices/Bilder/header.png); width: 800px; height: 65px;">
                </div>
                <div id="menu" style="background-image: URL(slices/Bilder/menu.png);">
                    <div id="button">
                        <a href="index.html"  border="0" name="austausch" alt="home"></a><br>
                        <a href="lebenslauf.html" border="0" name="austausch2" alt="lebenslauf"></a><br>
                        <a href="gast.php?start=0"  border="0" name="austausch3" alt="gaestebuch"></a><br>
                    </div>
                </div>
                <div id="main" style="background-image: URL(slices/Bilder/main.png);">
                    <h3>Gästebuch</h3>
                    <div id="gast">
                        <?php
                            error_reporting(E_ALL);                            
                            define('MYSQL_HOST', 'localhost');
                            define('MYSQL_USER', 'xxx');
                            define('MYSQL_PASS', 'xxx');
                            define('MYSQL_DATABASE', 'xxx'); 
                            mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
                                die("Es konnte keine Verbindung aufgebaut werden\n".mysql_error());
                            mysql_select_db(MYSQL_DATABASE) OR
                                die("Konnte ".MYSQL_DATABASE." nicht benutzen ".mysql_error());    
                                
                            $name="";
                            $mail="";
                            $mitteilung="";
                            $gesendet=false;
                            
                            echo'
                                <form action="gast.php" METHOD="POST">
                                    <div id="textfeld">
                                        Name:<br>
                                        <input type="text" name="name"><br>
                                        Email:<br>
                                        <input type="text" name="mail"><br>
                                        Mitteilung:(160 Zeichen)<br>
                                        <textarea name="mitteilung" rows="4" cols="16" onKeyUp="count(this.value);" ></textarea><br>
                                        <input type="text" name="ausgabe" id="ausgabe">
                                        <input type="submit" value="senden">
                                    </div>
                                </form>
                                ';
                            if(isset($_POST["name"]) && isset($_POST["mitteilung"])){ //prüfen ob alles gesetzt ist
                                $user = $_POST["name"];
                                $email = $_POST["mail"];
                                $msg = $_POST["mitteilung"];
                                
                                if(preg_match('#[<>&\/\\\]#', $user) || preg_match('#[<>&\/\\\]#', $email) || preg_match('#[<>&\/\\\]#', $msg)){ // spam filter, ob wörter vorkommen mit den bestimmten zeichenfolgen
                                    echo '
                                        <div id="again">
                                            Keine Sonderzeichen bitte!
                                        </div>
                                    ';
                                }
                                else{        // ip adresse vergleichen und schaun ob er innerhalb von 10 minuten gepostet hat                    
                                    if($user != null && $msg != null){
                                        $datum = date("Y.m.d - H:i");
                                        $ipadresse ="$REMOTE_ADDR";                                
                                        $ergebnis = "";                                        
                                        $result = mysql_query("SELECT timestamp FROM gastebuch WHERE ip = '$ipadresse' ORDER BY TIMESTAMP DESC LIMIT 1");
                                        
                                        if(mysql_num_rows($result) == 0){ // wenn     keine einträge bisher da sind.. dann...                            
                                            $times = time();
                                            mysql_query($eintrag = "INSERT INTO gastebuch(name, mail, mitteilung, datum, ip, timestamp) VALUES ('$user', '$email', '$msg', '$datum','$ipadresse', '$times')");
                                            $gesendet=true;
                                        }                                    
                                        else{ // wenn einträge vorhanden sind dann
                                            $ergebnis = mysql_result($result,0,0);
                                            if($ergebnis + 600 > time()){ // wenn er früher als 10 minuten postet dann... gehts ned
                                                echo "Du kannst erst in 10 Minuten wieder posten!";
                                            }
                                            else{
                                                $times = time(); // ansonsten gehts                                                
                                                mysql_query($eintrag = "INSERT INTO gastebuch(name, mail, mitteilung, datum, ip, timestamp) VALUES ('$user', '$email', '$msg', '$datum','$ipadresse', '$times')");
                                                $gesendet = true;
                                            }
                                        }
                                    }                            
                                    else{
                                        echo'
                                            <div id="again">                                                
                                                Felder leer, nochmal bitte
                                            </div>
                                        ';
                                    }
                                }
                            }
                            $start = 0;
                            $count = 0;    
                            if(!empty($_GET['start']) AND intval($_GET['start'])){ // schaun ob start leer is, bzw. ob start ein integer ist
                                $start = $_GET['start'];
                            }
                            $vor = $start + 3;
                            $zuruck = $start - 3;
                            if($zuruck < 1){
                                $zuruck = 0;
                            }
                            
                            $sql = mysql_query("SELECT name, mail, mitteilung, datum FROM gastebuch ORDER BY datum DESC LIMIT ".$start.",3") OR die(mysql_error());    //gebe nur werte aus zwischen start und 3, insgesamt 3                            
                                                
                                                        
                            echo '<div id="eintrage">'; // einträge ausgeben
                                while($row = mysql_fetch_assoc($sql)){
                                    echo '<b>Datum:</b> '.$row["datum"].'<br>';
                                    echo '<b>Name:</b>'.$row["name"].' @: '.'<a href="mailto:'.$row["mail"].'">'.$row["mail"].'</a><br>';
                                    echo '<b>Mitteilung:</b><br>'.$row["mitteilung"].'<br><br>';
                                    $count++;
                                }
                            echo'</div>';                            
                            if($count >= 3){ // vor button
                                echo'
                                    <div id="vor">
                                        <a href="http://www.daniel-zimmermann.at/test/gast.php?start='.$vor.'">Nächste Seite</a><br>
                                    </div>
                                    ';
                            }
                            if($start >= 3){ // zurück button
                                echo'
                                    <div id="back">
                                        <a href="http://www.daniel-zimmermann.at/test/gast.php?start='.$zuruck.'">Letzte Seite</a>
                                    </div>
                                    ';
                            }
                        ?>
                    </div>
                </div>
                <div id="footer" style="background-image: URL(slices/Bilder/footer.png); width: 800px; height: 59px;">
                </div>                
            </div>
            <div id="unten">
                <a href="http://www.daniel-zimmermann.at" class="p1">2008, Zimmermann Daniel | www.daniel-zimmermann.at</a>  <a href="impressum.html" class="p2">Impressum</a>
            </div>
        
    </body>
</html>
 
Ohne jetzt großartig den HTML/PHP-Code anzuschauen, ist mir aufgefallen, dass die Verbindungsdaten für die Datenbank in eine extra Datei ausgelagert werden sollten. Und zwar in ein Verzeichniss, dass durch eine htaccess-Datei geschützt ist.

Warum? Sollte aus irgeneinem Grund der Webserver einen Schuss haben, und PHP läuft nicht, werden die Verbindungsdaten im Webbrowser angezeigt, und das darf nicht sein.

Gruß thuemmy
 
Gutgut. Aber wie gesagt würd ich auch die MYSQL Daten in eine Externe Datei verlagern und dann mit require_once("datei.php"); einbinden.

Außerdem würde ich folgendes anders schreiben:

Vorher:
PHP:
else{        // ip adresse vergleichen und schaun ob er innerhalb von 10 minuten gepostet hat                    
                                    if($user != null && $msg != null){
                                        $datum = date("Y.m.d - H:i");
                                        $ipadresse ="$REMOTE_ADDR";                                
                                        $ergebnis = "";                                        
                                        $result = mysql_query("SELECT timestamp FROM gastebuch WHERE ip = '$ipadresse' ORDER BY TIMESTAMP DESC LIMIT 1");
                                        
                                        if(mysql_num_rows($result) == 0){ // wenn     keine einträge bisher da sind.. dann...                            
                                            $times = time();
                                            mysql_query($eintrag = "INSERT INTO gastebuch(name, mail, mitteilung, datum, ip, timestamp) VALUES ('$user', '$email', '$msg', '$datum','$ipadresse', '$times')");
                                            $gesendet=true;
                                        }                                    
                                        else{ // wenn einträge vorhanden sind dann
                                            $ergebnis = mysql_result($result,0,0);
                                            if($ergebnis + 600 > time()){ // wenn er früher als 10 minuten postet dann... gehts ned
                                                echo "Du kannst erst in 10 Minuten wieder posten!";
                                            }
                                            else{
                                                $times = time(); // ansonsten gehts                                                
                                                mysql_query($eintrag = "INSERT INTO gastebuch(name, mail, mitteilung, datum, ip, timestamp) VALUES ('$user', '$email', '$msg', '$datum','$ipadresse', '$times')");
                                                $gesendet = true;
                                            }
                                        }
                                    }
Nachher:
PHP:
elseif($user != null && $msg != null) {        // ip adresse vergleichen und schaun ob er innerhalb von 10 minuten gepostet hat                    
                                        $datum = date("Y.m.d - H:i");
                                        $ipadresse ="$REMOTE_ADDR";                                
                                        $ergebnis = "";                                        
                                        $result = mysql_query("SELECT timestamp FROM gastebuch WHERE ip = '$ipadresse' ORDER BY TIMESTAMP DESC LIMIT 1");
                                        
                                        if(mysql_num_rows($result) == 0){ // wenn     keine einträge bisher da sind.. dann...                            
                                            $times = time();
                                            mysql_query($eintrag = "INSERT INTO gastebuch(name, mail, mitteilung, datum, ip, timestamp) VALUES ('$user', '$email', '$msg', '$datum','$ipadresse', '$times')");
                                            $gesendet=true;
                                        }                                    
                                        else{ // wenn einträge vorhanden sind dann
                                            $ergebnis = mysql_result($result,0,0);
                                            if($ergebnis + 600 > time()){ // wenn er früher als 10 minuten postet dann... gehts ned
                                                echo "Du kannst erst in 10 Minuten wieder posten!";
                                            }
                                            else{
                                                $times = time(); // ansonsten gehts                                                
                                                mysql_query($eintrag = "INSERT INTO gastebuch(name, mail, mitteilung, datum, ip, timestamp) VALUES ('$user', '$email', '$msg', '$datum','$ipadresse', '$times')");
                                                $gesendet = true;
                                            }
                                        }
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben