kostenloser Webspace werbefrei: lima-city


Problem mit PHP Shoutbox

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    Hi !

    Ich habe hier eine PHP Shoutbox, an der ich einige Anpassungen vornehmen möchte, wo ich eure Hilfe brauche :biggrin:

    Zuerst das Skript:

    <?php
    // Der MySql-Server
    $mysql['host'] = 'localhost';
    // Der MySql-Benutzer
    $mysql['user'] = 'xx';
    // Und das dazugehörige Passwort...
    $mysql['pass'] = 'xx';
    // Noch die Datenbank
    $mysql['root'] = 'xx';
    // Und zu guter letzt die Tabelle
    $mysql['table'] = 'shoutbox';
    
    
    // Verbindet zum MySQL-Server
    $mysql['handle'] = mysql_pconnect($mysql['host'], $mysql['user'], $mysql['pass']);
    // Und wählt die Datenbank aus
    mysql_select_db($mysql['root']);
    
    // Prüft, ob der User das Formular schon abgesendet hat.
    if(array_key_exists('submited', $_POST) && $_POST['submited'] == 'save') {
        // Die Variable, in der die Fehler gespeichert werden (array)
        $error = array();
        // Überprüfen, ob alle Felder ausgefüllt wurden
        if(trim($_POST['name']) == '') $error[] = 'Bitte einen Namen angeben!';
        if(trim($_POST['text']) == '') $error[] = 'Bitte einen Text angeben!';
        
        // So, nun zählen wir, wieviele Werte im Array sind.
        // Wenn mehr als 0 ist ein Fehler aufgetreten.
        if(count($error) > 0) {
            // Ja, Fehler ist aufgetreten.
            // Wir geben nun aus, welche Fehler aufgetreten sind.
            // Wir benutzen implode('<br />'), damit ein Zeilenumbruch
            // zwischen den Fehlermeldungen steht
            echo implode('<br />', $error);
        } else {
            // Gut, alle Felder ausgefüllt. Dann wird mal gespeichert...
            // Addslashes verwenden wir, damit kein Fehler auftritt, wenn
            // jemand in seinem Namen oder im Text ein ' tippt.
            mysql_query('INSERT INTO `'.$mysql['table'].'` (`name`, `text`, `time`) VALUES (\''.addslashes($_POST['name']).'\', \''.addslashes($_POST['text']).'\', \''.time().'\')');
        } // End if..else
    } // End if
    ?>
    <?php
    // Sendet einen Query an die Datenbank, der die Daten direkt nach der Id sortiert,
    // da die Id fortlaufend ist und DESC bedeuted, das die Daten absteigend
    // sortiert werden, werden die neusten Einträge automatisch oben angezeigt.
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC');
    // Das eigentliche auslesen
    while($row = mysql_fetch_assoc($query)) {
        // Nun machen wir erstmal die Ausgabe des Namens, fettgeschrieben
        // Stripslashes ist das Gegenteil von addslashes und würde man
        // es nicht schreiben, würden alle ' escaped ausgegeben werden,
        // also mit einem \ davor.
        echo '<b>'.stripslashes($row['name']).'</b>';
        // Nun in Klammern die Uhrzeit dahinter
        // Wer mehr über die Buchstaben des ersten Parameters
        // erfahren will kann auf http://www.php.net/date nachlesen.
        echo ' ('.date('j.n.Y h:i', $row['time']).')';
        // So, ein Zeilenumbruch, damit der Text in einer extra Zeile steht
        // chr(10) erzeugt einen Zeilenumbruch im Quellcode und ist im Grunde
        // das gleiche wie \n.
        echo '<br />'.chr(10);
        // Die Ausgabe des Textes
        echo stripslashes($row['text']);
        // Noch 2 Umbrüche, damit Platz für die nächsten
        // Einträge ist :)
        echo '<br />'.chr(10).'<br />'.chr(10);
    } // End While
    ?>
    <form method="post" action="<?=$path?>">
    <b><font face="Arial">Name:
    <input type="text" name="name" maxlength="10" size="20">&nbsp; Nachricht&nbsp;
    <input type="text" name="text" maxlength="200" size="20"><br />
    </font></b>
    <br />
    <input type="submit" name="submit" value="Senden" />
    <input type="hidden" name="submited" value="save" />
    </form>


    Jetzt hätte ich gerne:

    1. Wenn ich um 20:30 einen Eintrag mache, steht in der Shoutbox 8:30, ich will aber, das da steht 20:30.

    2. Ich will, dass nur 10 Beiträge auf einer Seite angezeigt werden. Wie mache ich das?

    3. Gibt es die Möglichkeit, eine History hinzuzufügen?

    4. Das ein User (IP) maximal 6 Einträge hintereinander machen kann.

    5. Mir ist aufgefallen, dass wenn man einen Eintrag macht und dann auf Aktualisieren (F5) drückt, wird der gleiche Eintrag nochmal gemacht. Geht das weg?

    Zum Testen: http://davidlohmann.de/test/shoutbox.php

    Beitrag zuletzt geändert: 6.2.2009 21:05:16 von davy
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. ho ;)

    Nummer 1 ist easy, auch wenn ich kein PHP kann :D

    // Nun in Klammern die Uhrzeit dahinter
        // Wer mehr über die Buchstaben des ersten Parameters
        // erfahren will kann auf http://www.php.net/date nachlesen.
        echo ' ('.date('j.n.Y H:i', $row['time']).')';


    Der unterschied liegt im großen H in der Time Funktion...
    (kleines h gibt Stunden im 12er Format aus, großes H gibt sie im 24er Format aus)

    lg
    Sincer
  4. davy schrieb:
    1. Wenn ich um 20:30 einen Eintrag mache, steht in der Shoutbox 8:30, ich will aber, das da steht 20:30.

    2. Ich will, dass nur 10 Beiträge auf einer Seite angezeigt werden. Wie mache ich das?

    3. Gibt es die Möglichkeit, eine History hinzuzufügen?

    4. Das ein User (IP) maximal 6 Einträge hintereinander machen kann.

    5. Mir ist aufgefallen, dass wenn man einen Eintrag macht und dann auf Aktualisieren (F5) drückt, wird der gleiche Eintrag nochmal gemacht. Geht das weg?


    Zu Punkt 1 hat sincer ja schon das richtige geschrieben

    zu 2.:
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` LIMIT `10` ORDER BY `id` DESC');

    Müsste bewirken, dass nurnoch 10 Beiträge aufgerufen werden

    zu 3: Ja es geht, wie stellst du dir das genau for? extra seite oser so?

    zu 4: Auch das geht, hierzu würde ich aber empfehlen die datenbank zu erweitern und die ip zu speichern ...

    zu 5: Ja auch das geht. Z.B. überprüfung ob der post schon existiert oder einfach den Post unterdrücken beim reload, bzw das man eine gewisse zeit waren muss bis man wieder was posten kann. (die welt vom php ist nahezu unendlich :wink: )

    Beitrag zuletzt geändert: 6.2.2009 23:34:36 von furlinger
  5. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    zu 2.:

    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC');


    änderst du zu

    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC LIMIT 10');


    zu 3.:

    Das Einfachste, um so eine History einzubauen wäre wahrscheinlich folgende:

    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10"
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    Wenn du jetzt also die shoutbox über Dateiname.php?show=history aufrufst, werden dir alle einträge angezeigt, beim normalen aufruf nur die ersten 10.

    zu 5. & 4.:
    naja, wenn du die Seite neu lädst, senden viele Browser die POST-Formulardaten einfach ein zweites mal ab; Wenn du eine IP-Sperre einbaust, um max. 6 einträge nacheinander zu erlauben, könntest du dort auch gleich einbauen, dass zwischen den einrägen - meinetwegen 15sekunden liegen müssen; macht das ganze natürlich etwas umfangreicher!
  6. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    aldistammkunde schrieb:
    zu 2.:

    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC');


    änderst du zu

    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC LIMIT 10');


    zu 3.:

    Das Einfachste, um so eine History einzubauen wäre wahrscheinlich folgende:

    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10"
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    Wenn du jetzt also die shoutbox über Dateiname.php?show=history aufrufst, werden dir alle einträge angezeigt, beim normalen aufruf nur die ersten 10.

    zu 5. & 4.:
    naja, wenn du die Seite neu lädst, senden viele Browser die POST-Formulardaten einfach ein zweites mal ab; Wenn du eine IP-Sperre einbaust, um max. 6 einträge nacheinander zu erlauben, könntest du dort auch gleich einbauen, dass zwischen den einrägen - meinetwegen 15sekunden liegen müssen; macht das ganze natürlich etwas umfangreicher!


    Danke !

    Wo muss das

    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10"
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    hin?
  7. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.


    Wo muss das
    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10"
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    hin?


    einfach statt

    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC');


    Beitrag zuletzt geändert: 7.2.2009 14:17:56 von aldistammkunde
  8. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    aldistammkunde schrieb:

    Wo muss das
    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10"
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    hin?


    einfach statt

    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC');



    Hab ich gemacht, geht aber nicht !
  9. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    "geht nicht" heißt?

    Fehlermeldung oder wirklich einfach keine Funktion?

    Mir fällt gerade auf, dass da ein Semikolon fehlt:

    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10";
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    probiers mal so

    Beitrag zuletzt geändert: 7.2.2009 14:53:19 von aldistammkunde
  10. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    aldistammkunde schrieb:
    "geht nicht" heißt?

    Fehlermeldung oder wirklich einfach keine Funktion?

    Mir fällt gerade auf, dass da ein Semikolon fehlt:

    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10";
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);


    probiers mal so


    So geht´s auch nicht.

    Es kommt keine Fehlermeldung, einfach nur eine leere Seite

    Das Skript bis jetzt:

    <?php
    // Der MySql-Server
    $mysql['host'] = 'localhost';
    // Der MySql-Benutzer
    $mysql['user'] = 'xx';
    // Und das dazugehörige Passwort...
    $mysql['pass'] = 'xx';
    // Noch die Datenbank
    $mysql['root'] = 'xx';
    // Und zu guter letzt die Tabelle
    $mysql['table'] = 'shoutbox';
    
    
    // Verbindet zum MySQL-Server
    $mysql['handle'] = mysql_pconnect($mysql['host'], $mysql['user'], $mysql['pass']);
    // Und wählt die Datenbank aus
    mysql_select_db($mysql['root']);
    
    // Prüft, ob der User das Formular schon abgesendet hat.
    if(array_key_exists('submited', $_POST) && $_POST['submited'] == 'save') {
        // Die Variable, in der die Fehler gespeichert werden (array)
        $error = array();
        // Überprüfen, ob alle Felder ausgefüllt wurden
        if(trim($_POST['name']) == '') $error[] = 'Bitte einen Namen angeben!';
        if(trim($_POST['text']) == '') $error[] = 'Bitte einen Text angeben!';
        
        // So, nun zählen wir, wieviele Werte im Array sind.
        // Wenn mehr als 0 ist ein Fehler aufgetreten.
        if(count($error) > 0) {
            // Ja, Fehler ist aufgetreten.
            // Wir geben nun aus, welche Fehler aufgetreten sind.
            // Wir benutzen implode('<br />'), damit ein Zeilenumbruch
            // zwischen den Fehlermeldungen steht
            echo implode('<br />', $error);
        } else {
            // Gut, alle Felder ausgefüllt. Dann wird mal gespeichert...
            // Addslashes verwenden wir, damit kein Fehler auftritt, wenn
            // jemand in seinem Namen oder im Text ein ' tippt.
            mysql_query('INSERT INTO `'.$mysql['table'].'` (`name`, `text`, `time`) VALUES (\''.addslashes($_POST['name']).'\', \''.addslashes($_POST['text']).'\', \''.time().'\')');
        } // End if..else
    } // End if
    ?>
    <?php
    // Sendet einen Query an die Datenbank, der die Daten direkt nach der Id sortiert,
    // da die Id fortlaufend ist und DESC bedeuted, das die Daten absteigend
    // sortiert werden, werden die neusten Einträge automatisch oben angezeigt.
    if(isset($_GET['show']) and $_GET['show']=="history"){
    $zusatz="";
    }else{
    $zusatz=" LIMIT 10"[b];[/b]
    }
    
    $query = mysql_query('SELECT * FROM `'.$mysql['table'].'` ORDER BY `id` DESC'.$zusatz);
    // Das eigentliche auslesen
    while($row = mysql_fetch_assoc($query)) {
        // Nun machen wir erstmal die Ausgabe des Namens, fettgeschrieben
        // Stripslashes ist das Gegenteil von addslashes und würde man
        // es nicht schreiben, würden alle ' escaped ausgegeben werden,
        // also mit einem \ davor.
        echo '<b>'.stripslashes($row['name']).'</b>';
    // Nun in Klammern die Uhrzeit dahinter
        // Wer mehr über die Buchstaben des ersten Parameters
        // erfahren will kann auf http://www.php.net/date nachlesen.
        echo ' ('.date('j.n.Y H:i', $row['time']).')';
        // So, ein Zeilenumbruch, damit der Text in einer extra Zeile steht
        // chr(10) erzeugt einen Zeilenumbruch im Quellcode und ist im Grunde
        // das gleiche wie \n.
        echo '<br />'.chr(10);
        // Die Ausgabe des Textes
        echo stripslashes($row['text']);
        // Noch 2 Umbrüche, damit Platz für die nächsten
        // Einträge ist :)
        echo '<br />'.chr(10).'<br />'.chr(10);
    } // End While
    ?>
    <form method="post" action="<?=$path?>">
    <input type="hidden" name="submited" value="save" />
    <b><font face="Trebuchet MS">Name:
    <input type="text" name="name" maxlength="10" size="20"></font><font face="Trebuchet MS">&nbsp; 
    Nachricht:
    <input type="text" name="text" maxlength="200" size="42"></font></b><div align="left">
      <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="57%" id="AutoNumber1" height="31">
        <tr>
          <td width="69%" height="5"><span style="font-size: 4pt">&nbsp;</span></td>
          <td width="34%" height="5">
          <font face="Trebuchet MS" style="font-size: 4pt">&nbsp;</font></td>
        </tr>
        <tr>
          <td width="69%" height="26">&nbsp;</td>
          <td width="34%" height="26"><font face="Trebuchet MS">
    <input type="submit" name="submit" value="Senden" /></font></td>
        </tr>
      </table>
    </div>
    </form>
  11. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    ehm... das [ b] [/b] gehört da nicht rein - das hatte ich eigtl. nur eingefügt, um zu zeigen, wo das Semikolon hingehört (was aber nicht so ganz funktioniert hat). Also entferne das mal. Du könntest an den Anfang deines scripts auch mal

    error_reporting(E_ALL);


    setzen, das macht die Fehlersuche einfacher!

    Beitrag zuletzt geändert: 7.2.2009 15:15:27 von aldistammkunde
  12. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    aldistammkunde schrieb:
    ehm... das [ b] [/b] gehört da nicht rein - das hatte ich eigtl. nur eingefügt, um zu zeigen, wo das Semikolon hingehört (was aber nicht so ganz funktioniert hat). Also entferne das mal. Du könntest an den Anfang deines scripts auch mal

    error_reporting(E_ALL);


    setzen, das macht die Fehlersuche einfacher!


    Danke ! Jetzt geht es !

    Es wäre noch schön, wenn das Datum im Format dd.mm.yyyy stehen würde, also statt 1.1.2009 halt 01.01.2009

    Und die IP Sperrre hätte ich auch noch gerne

    Beitrag zuletzt geändert: 7.2.2009 16:08:54 von davy
  13. aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    http://de.php.net/manual/de/function.date.php

    <- da ist eine Tabelle, in der alle Buchstaben & ihre Bedeutung aufgelistet sind!
  14. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    OK, das mit dem Datum hab ich geschafft ;)

    Jetzt fehlt noch:

    eine IP Sperre (maximal 6 Beiträge hintereinander)

    Wie kann man Smilies einfügen?

    davy schrieb:
    aldistammkunde schrieb:
    ehm... das [ b] [/b] gehört da nicht rein - das hatte ich eigtl. nur eingefügt, um zu zeigen, wo das Semikolon hingehört (was aber nicht so ganz funktioniert hat). Also entferne das mal. Du könntest an den Anfang deines scripts auch mal

    error_reporting(E_ALL);


    setzen, das macht die Fehlersuche einfacher!


    Danke ! Jetzt geht es !

    Es wäre noch schön, wenn das Datum im Format dd.mm.yyyy stehen würde, also statt 1.1.2009 halt 01.01.2009

    Und die IP Sperrre hätte ich auch noch gerne
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!