Shoutbox - Ausgabe

P

PasiXXL

Hallo,

Ich bin gerade dabei mir selbst PHP beizubringen. Zunächst habe ich mit einer Shoutbox angefangen. Zur Zeit hänge ich am Code.
Die Ausgabe klappt nämlich nur teilweiße. Erst wenn ein neuer Eintrag hinzugefügt wird, wird der vorherige Beitrag aus der Datenbank dargestellt.
Ich bekomme keine Fehlermeldungen. Das Aufrufen der Datenbank funktioniert.
Da ich noch ein Anfänger bin, würde ich mich freuen, wenn ihr mir eine Ausführliche Antwort gibt.
Der PHP-Code ist:
PHP:
<?PHP
  include("dbconnect.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Shoutbox</title>

</head>
<body>
<?
    $abfrage = "SELECT username,nachricht FROM shoutbox";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
    {
    echo "<p>\n";
    echo "Autor: ";
    echo $row->username;
    echo "<br />\n";
    echo "Nachricht: <br />\n";
    echo $row->nachricht;
    echo "<br />\n";
    echo "-----------------------------------------------------<br />\n";
    echo "</p>\n";

    }
?>
<?PHP {


$result = mysql_query("INSERT INTO shoutbox (username, nachricht) VALUES ('".$_POST["username"]."', '".$_POST["nachricht"]."')");

}
?>

<form method="POST" action="<?=$PHP_SELF?>">
Name: <input type="text" name="username" value="Dein Name" size="20"><br>
Nachricht: <input type="text" name="nachricht" value="Deine Nachricht" size="20"><br>
<br>
<input type="submit" name="submit" value="Eintragen!">
</form> 
</body>
</html>
<?
mysql_close();
?>

Danke für euere Bemühungen

Pasi
 
Zuletzt bearbeitet von einem Moderator:
Dein Script schreibt bei jedem Aufruf der Seite einen neuen Eintrag in die Datenbank, weil du das Eintragen eines Eintrages von nichts abhängig gemacht hast.
D.h. du müsstest die Zeile, die zum Eintragen verantwortlich ist, in eine IF-Abfrage setzen.

Persönlich frage ich immer ab, ob die Variable $_POST['submit'] gesetzt ist, was natürlich vorraussetzt, dass du diese Variable irgendwo im Formular auch übergibst. Dazu eignet sich der Submit-Button am Besten.

Code:
if(isset($_POST['submit'])) {
// hier deine Zeile zum Eintragen
}
 
HI,

vielen Dank für deine Antwort.

Für das eintragen ist doch der Submit-Button. Soll der also in eine if-Abfrage gesteckt werden?
PHP:
if(isset($_POST['submit'])) {
$result = mysql_query("INSERT INTO shoutbox (username, nachricht) VALUES ('".$_POST["username"]."', '".$_POST["nachricht"]."')");
}
Und was muss ich in der Variable $_POST['submit'] setzen?
Ich hoffe, ich konnte mich verständlich Ausdrücken.

Pasi
 
Wenn du die IF-Abfrage, ob das Formular gesendet wurde, auf den Submit-Button setzt, steht in dem Array anschließend nur das, was du als "value" - also bei einem Button deren Beschriftung - angegeben hast.
Die Funktion isset() fragt einfach nur ab, ob diese Variable existiert.
Da diese nur gesetzt wird, wenn das Formular über genau diesen Button abgeschickt wird, dient dies also als sehr gute Möglichkeit den Stand der Dinge abzufragen.

Hast du dein Script getestet, funktioniert es?
 
HI,

danke für deine Antwort.

es kann ja noch nicht funktionieren, da die Varible $_POST['submit'] noch keinen Wert enthält. Es war ja noch meine Frage, was ich setzen soll.
PHP:
$_POST['submit'] = (in meinem Beispiel) $abfrage

Würde das funktionieren?

Pasi
 
nee, das ist folgendermaßen:

Du hast einen Button definiert
PHP:
<input type="submit" name="submit" value="Send">
Der Button hat das value "Send". mittles
PHP:
if(isset($_POST["submit"]));
prüfst du nur, ob die Variable existiert. Mittels
PHP:
if($_POST["submit"] == "Send");
ob die Abfrage auch von dem richtigen Formular kommt ;)
 
HI,

auch mit deinem Tipp, hat sich leider nix verändert. Erst nach einem weiteren Eintrag wird der vorherige angezeigt.

PHP:
<?PHP
  include("dbconnect.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Shoutbox</title>

</head>
<body>
<?
    $abfrage = "SELECT username,nachricht FROM shoutbox";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
    {
    echo "<p>\n";
    echo "Autor: ";
    echo $row->username;
    echo "<br />\n";
    echo "Nachricht: <br />\n";
    echo $row->nachricht;
    echo "<br />\n";
    echo "-----------------------------------------------------<br />\n";
    echo "</p>\n";

    }
?>
<?PHP 


if($_POST["submit"] == "Send");  {
$result = mysql_query("INSERT INTO shoutbox (username, nachricht) VALUES ('".$_POST["username"]."', '".$_POST["nachricht"]."')");

}
?>

<form method="POST" action="<?=$PHP_SELF?>">
Name: <input type="text" name="username" value="Dein Name" size="20"><br>
Nachricht: <input type="text" name="nachricht" value="Deine Nachricht" size="20"><br>
<br>
<input type="submit" name="submit" value="Send">
</form> 
</body>
</html>
<?
mysql_close();
?>

Ich hab es doch mit dem Code richtig eingefügt?

Pasi
 
Das muss gehen.

Ersetze:
PHP:
if($_POST["submit"] == "Send");  {
$result = mysql_query("INSERT INTO shoutbox (username, nachricht) VALUES ('".$_POST["username"]."', '".$_POST["nachricht"]."')");

}
in
PHP:
if($_POST["submit"] == "Send")  
{
   $nick = trim(strip_tags(mysql_real_escape_string($_POST["username"])));
   $message = trim(strip_tags(mysql_real_escape_string($_POST["nachricht"])));
   $result = mysql_query("INSERT INTO `shoutbox` (`username`, `nachricht`) 
                                      VALUES ('$nick','$message');");
   if (mysql_affected_rows($result))
   {
     echo 'Erfolgreich eingetragen';
   }

}
 
Hallo,

danke für deine Antwort.

Wenn ich deinen verbesserten Code einfüge, bekomme ich eine Fehlermeldung angezeigt:

"Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in C:\Programme\xampp\htdocs\shoutbox\eintraege.php on line 37"

Was bedeuten denn beiden neuen Daten für die Variabeln?

Gruss

Pasi
 

Neue Beiträge

Zurück