hallo, ist auch klar, beim aktualisieren wird das formular neu versendet, $eintragen.
du brauchst eine reloadsperre
Hallo!
Ich habe mich hier angemeldet, weil ich schon eine Woche nach einer Lösung suche, aber ich nicht weiter komme. Ich habe als Projekt in meiner Schule ein Gästebuch gewählt und habe ein Problem, da ich doch ein Anfänger bin.
Es ist nun so, dass ich eine Tabelle erstellt habe und ein Formular und alles was da eingetragen wird kommt auch schön brav da rein. Das Problem, es kommt alles rein. Wenn ich aktualisiere kopiert er mir Beiträge ins unendliche. Ich habe gegoogelt etc., aber konnte bisher keine Antwort finden.
Hier ist meine Bastelei:
PHP-Code:<?php
$server = "localhost";
$user = "root";
$pass = "";
$database = "guestbook";
$table = "gaestebuch";
$name = $_POST['name'];
$eintrag = $_POST['eintrag'];
$eMail = $_POST['eMail'];
$homepage = $_POST['homepage'];
$datum = date("d.m.Y - H:i");
$verbindung = mysql_connect($server, $user, $pass)
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("guestbook") or die ("Datenbank konnte nicht ausgewählt werden");
$query = "INSERT INTO gaestebuch (name, eintrag, datum, eMail, homepage) VALUES ('$name', '$eintrag', '$datum', '$eMail', '$homepage')";
$eintragen = mysql_query($query);
if (isset($_POST['submit']))
{
$eintragen;
}
else
{
die;
}
if($name == "" OR $eintrag == "") {
echo "Eingabefehler. Bitte Name UND Nachricht einfügen.";
exit;
}
if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $eMail)) //E-Mail Überprüfung
{
echo "";
}
$query = "SELECT * FROM gaestebuch ORDER BY datum";
$result = mysql_query($query);
while($daten = mysql_fetch_array ($result, MYSQL_ASSOC))
{
echo "Name: ";
echo $daten['name'];
echo "<br />";
echo "E-Mail: ";
echo $daten['eMail'];
echo "<br />";
echo "Datum: ";
echo $daten['datum'];
echo "<br />";
echo "Beitrag: ";
echo $daten['eintrag'];
echo "<br />";
echo "<hr />";
echo "<br />";
}
mysql_close($verbindung);
?>
hallo, ist auch klar, beim aktualisieren wird das formular neu versendet, $eintragen.
du brauchst eine reloadsperre
computer tun nur das was man ihnen sagt, meistens
...sollte dir weiterhelfen.PHP-Code:header("LOCATION: deinGaestebuch.php");
WOW!
So schnelle Antwort! Vielen Dank. Gut jetzt habe ich das gemacht aber da kommt diese Fehlermeldung:
Was ist damit gemeint?PHP-Code:Warning: Cannot modify header information - headers already sent by (output started at C:xampphtdocstestgaestebuch.php:5) in C:xampphtdocstestgaestebuch.php on line 6
Viele liebe Grüße
Lyc
das muss in die erste zeile, bevor sonstiges php oder html kommt
computer tun nur das was man ihnen sagt, meistens
Danke und jetzt kommt das nächste Problem. Langsam aber sicher fühle ich mich unfähig.
Die Seite ist leer wenn ich sie aufrufe, also nicht einmal eine Fehlermeldung und speichert mir in die Datenbank Kopien. Hilfe!
Verzeiht mir bitte mein Ungeschick und nochmals vielen Dank für die rasche und kompetente Hilfe.
viele liebe Grüße
Lyc
P.S.: Na toll jetzt komm ich nicht mal mehr in die Datenbank rein. Was ist passiert?
Geändert von Lycanthia (16.06.2009 um 15:29 Uhr)
was steht jetzt in deiner datei?
kannst auch mal als anhang machen
computer tun nur das was man ihnen sagt, meistens
Ok jetzt ist mir gerade mein PC abgestürzt und ich komme nirgends mehr rein, weil der Browser schreibt:
MySQL meldet:
#2003 - Der Server antwortet nicht.
Um Gottes Willen, was habe ich angestellt?
Ich habe den header befehl ganz am Anfang vorm html geschrieben.
Also
PHP-Code:<?php header... ?>
<html> etc...
Habe auch keinen Abstand gemacht. Aber jetzt ist meine Datei geschrottet und ich komme nicht mehr ins phpmyadmin rein.
Heut ist nicht mein Tag.
lg
So Edit: Aus unerfindlichen Gründen geht es jetzt wieder. Ich habe mich nur bei google nach der Ursache gesucht und aus Frust zum 100ersten Mal auf reset gedrückt und jetzt geht die DB wieder.
Das heißt Fehler 1 eliminiert.![]()
xampp control center -> apache und mysql gestartet?
computer tun nur das was man ihnen sagt, meistens
Vermutlich hast du header(...) an den Anfang der Datei mit deinem Formular geschrieben.Die Seite ist leer wenn ich sie aufrufe, also nicht einmal eine Fehlermeldung und speichert mir in die Datenbank Kopien.
Sieht zumindest so aus. Dadurch ruft sich die Datei immer wieder selber auf.PHP-Code:<?php header... ?>
<html> etc...
EDIT
ach so. Lokaler eigener Server? Dann hat sich das Teil in der Endlosschleife aufgehaengtund braucht eine Weile zum Erholen.
Das ist so nicht richtig.$eintragen = mysql_query($query);
if (isset($_POST['submit']))
{
$eintragen;
}
else
{
die;
}
So ist es besser.if (isset($_POST['submit']))
{
$eintragen = mysql_query($query);
}
else
{
die;
}
Und so war es vermutlich mit dem header gemeint.if (isset($_POST['submit']))
{
$eintragen = mysql_query($query);
header("LOCATION: deinGaestebuch.php");
}
else
{
die;
}
Idealer Weise sind Formular und Verarbeitung in zwei Dateien (naja Geschmackssache).
Geschrottet wird eine Datei durch sowas nicht. Dein Webspaceanbieter hat halt mal einen Aussetzer.Aber jetzt ist meine Datei geschrottet und ich komme nicht mehr ins phpmyadmin rein.
Gruss Guin
Mein Blog
Herzlichen Glückwunsch zu deiner ersten Endlosschleife ;-)
Geh mal in den Taskmanager und beende die Prozesse apache.exe und mysqld-nt.exe. Danach XAMPP Control Center aufrufen und beides neustarten. Dann noch das von Guin reinbasteln und fertig..
Hallo!
Vielen vielen lieben Dank an euch. Ihr seit echt spitze. Ja das ganze hat sich aufgehängt und 1000ende Einträge hinterlassen. XD
Nun gut ich bin ehrlich ich habe das Problem mit einer Fachkundigen, die mir das alles wieder hingebogen hat, anders gelöst und möchte euch die Lösung nicht vorenthalten.
Dennoch möchte ich mich nochmals bedanken. Es ist das erste Forum, wo sich wirklich rasch Leute melden und einem helfen.PHP-Code:<?php
$error = FALSE;
mysql_connect("localhost", "root", "");
mysql_select_db("guestbook");
if(isset($_POST['senden']))
{$senden = $_POST['senden'];}else{$senden = "";}
if(isset($_POST['name']))
{$name = $_POST['name'];}else{$name = "";}
if(isset($_POST['eintrag']))
{$eintrag = $_POST['eintrag'];}else{$eintrag="";}
if(isset($_POST['eMail']))
{$eMail = $_POST['eMail'];}else{$eMail="";}
if(isset($_POST['homepage']))
{$homepage = $_POST['homepage'];}else{$homepage="";}
$datum = date("d.m.Y - H:i");
if(!empty($senden))
{
if( (empty($name)) || (empty($eintrag)) ) //Hier wird gschaut ob name UND eintrag da is
{
$error = TRUE;
$eig = "<p><strong>Eingabefehler. Bitte Name UND Nachricht einfügen.</strong></p>";
}
}
if((!empty($senden)) && ($error != TRUE) )
{
$query = "INSERT INTO gaestebuch (name, eintrag, datum, eMail, homepage) VALUES ('$name', '$eintrag', '$datum', '$eMail', '$homepage')";
$eintragen = mysql_query($query);
echo "<script type=\"text/javascript\">location.href='gaestebuch.php';</script>"; //damit beim aktualisieren nicht noch mal versendeet wird
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Willkommen!</title>
</head>
<style type="text/css">
<!--
hr {width: 300px;}
-->
</style>
<body style="text-align: center; background-color: #69B8D6; font-family: Georgia, "Times New Roman", Times, serif;">
<p>Die mit * gekennzeichneten Felder müssen ausgefüllt werden.</p>
<?php
if($error == TRUE)
{
echo $eig;
}
?>
<form action="gaestebuch.php" method="post">
<input type="text" name="Antispam" style="display:none;">
<table style="text-align: left;">
<tr>
<td>
Name:* </td>
<td>
<input type="text" name="name" size="50"> </td>
</tr>
<tr>
<td>
Email-Adresse: </td>
<td>
<input type="text" name="eMail" size="50"> </td>
</tr>
<tr>
<td>
Homepage:</td>
<td>
<input type="text" name="homepage" size="50"> </td>
</tr>
<tr>
<td>
Nachricht*:</td>
<td>
<textarea name="eintrag" rows="5" cols="39"></textarea> </td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" name="senden" value="Eintragen" size="50"></td> </tr> </table>
</form>
<?php
$ausgabe = "SELECT * FROM gaestebuch ORDER BY datum";
$result = mysql_query($ausgabe) or die(mysql_error());
while($daten = mysql_fetch_array($result)) //Hier ist die Schleife der Ausgabe
{
echo "Name: ";
echo $daten['name'];
echo "<br />";
echo "E-Mail: ";
echo $daten['eMail'];
echo "<br />";
echo "Datum: ";
echo $daten['datum'];
echo "<br />";
echo "Beitrag: ";
echo $daten['eintrag'];
echo "<br />";
echo "<hr />";
echo "<br />";
}
?>
</body>
</html>
Das ist begrüßenswert und motiviert mich in Gebieten zu helfen, wo ich mich auskenne.
Einen wunderschönen Tag noch.
viele liebe Grüße
Lyc
Moin,
dieser Code ...
...ist mehr oder weniger sinnfrei und könnte auch so abgekürzt werden ...PHP-Code:if(isset($_POST['senden']))
{$senden = $_POST['senden'];}else{$senden = "";}
if(isset($_POST['name']))
{$name = $_POST['name'];}else{$name = "";}
if(isset($_POST['eintrag']))
{$eintrag = $_POST['eintrag'];}else{$eintrag="";}
if(isset($_POST['eMail']))
{$eMail = $_POST['eMail'];}else{$eMail="";}
if(isset($_POST['homepage']))
{$homepage = $_POST['homepage'];}else{$homepage="";}
Nutzlos bleibt er aber trotzdem, da die Eingaben nicht validiert werden, was das Script extrem unsicher macht. Verschlimmert wird es noch dadurch, dass die Benutzereingabe auch einfach so an die Datenbank geschickt wird, wodurch Tür und Tor für Angriffe offen steht. Hier sollte unbedingt mit mysql_real_escape_string gearbeitet werden und natürlich vorher die Eingabe einer Prüfung unterzogen werden.PHP-Code:if (isset( $_POST['senden'], $_POST['name'], $_POST['eintrag'], $_POST['eMail'], $_POST['homepage'] ))
{
extract( $_POST );
}
else
{
// Code falls ein Feld nicht übermittelt wurde
}
Ob ein Datenbankeintrag letztendlich fehlerfrei funktioniert hat kann man mit mysql_affected_rows abfragen.
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PHP Tutorials und kostenlose Scripts gibt's bei phpBuddy.eu
Follow phpBuddy on Twitter
LTFB - anfängerfreundliche Tutorials
.
Hallo!
Danke für deine Antwort. Ich hab das mit einer Web Development - Trainerin gemacht und da ich selber Anfänger bin was PHP und MySQL angeht nehme ich halt alles hin. XD
Und das es unsicher ist, ist mir schon klar. Es dient auch mehr dazu, dass ich mir mal das wichtigste merke und lerne. Weil soweit bin ich noch net. Ich will ja auch einmal eine Black List einfügen etc. Aber dazu muss ich das erst lernen.
Auf alle Fälle sage ich aber Danke, weil ich jede Hilfe begrüße.
viele liebe Grüße
Lyc
Sorry, aber das hier ist ja mal totaler Quark - und dann noch vor dem HTML-Tag. Und das von einer "Web Development - Trainerin"?! Da mache ich mir wirklich Gedanken, um deren Qualifikation machen.Code:echo "<script type=\"text/javascript\">location.href='gaestebuch.php';</script>";
Genau an dieser Stelle sollte der Header-Befehl stehen. Was die anderen allerdings vergessen haben, zu sagen, ist, dass danach noch ein
folgen muss, sonst wird trotz header(...) das PHP-Skript weiter ausgeführt, was zu schwer zu findenden Fehlern führen kann.PHP-Code:exit;
Der Abschnitt sollte also so aussehen:
PHP-Code:if((!empty($senden)) && ($error != TRUE) )
{
$query = "INSERT INTO gaestebuch (name, eintrag, datum, eMail, homepage) VALUES ('$name', '$eintrag', '$datum', '$eMail', '$homepage')";
$eintragen = mysql_query($query);
header('Location: gaestebuch.php');
exit;
}
...Meine Meinung
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)