App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
PHP - probleme mit Post bei einer Shoutbox
- Ersteller der-gott
- Erstellt am
der-gott
Vice Admiral Special
- Mitglied seit
- 02.05.2006
- Beiträge
- 763
- Renomée
- 1
- Mein Laptop
- HP Compaq NC4200 + Reiseakku (zusammen 8-10h WLAN Betrieb)
- Prozessor
- AMD AM2 X2 4800+ EE
- Mainboard
- ASROCK ALive NF6G-VSTA BIOS 2.20
- Kühlung
- Thermaltake Sonic Tower
- Speicher
- 4x 1024MB MDT PC800 CL5
- Grafikprozessor
- Sparkle 8500GT passiv
- Display
- Belinea 2025S1W - 20,1"
- HDD
- 400GB Samsung SATA 16MB Cache - 500GB Samsung SATA 16MB Cache - WD Elements 500GB USB2
- Optisches Laufwerk
- 16x LG DVD Brenner
- Soundkarte
- Creative Audigy 2 ZS + Edifier S530
- Gehäuse
- Sharkoon Rebel 9 Economy mit 2x 120mm Scythe Flex
- Betriebssystem
- Windows XP SP2 - Vista und Server 2003 per VirtualPC
- Webbrowser
- Firefox 3.0
Schönen guten Tag ... habe ein kleines Problemchen
und zwar bei bei meienr Shoutbox (hier ansehen gibt es einen kleinen aber feinen und vorallem störenden Fehler.
Wenn man eine Nachricht eingibt und dann auf F5 drückt um die (gesamte) Seite zu aktualisieren wird der EIntrag nochmal gepostet. Warum er das macht (neuer Aufruf der Post Action) ist mir halbwegs klar nur wie um alles in der Welt kann ich das unterbinden ??
hier mal der Code :
Ich hoffe mir kann das jemand erklären.
Danke schonmal und schönen Vormittag noch
und zwar bei bei meienr Shoutbox (hier ansehen gibt es einen kleinen aber feinen und vorallem störenden Fehler.
Wenn man eine Nachricht eingibt und dann auf F5 drückt um die (gesamte) Seite zu aktualisieren wird der EIntrag nochmal gepostet. Warum er das macht (neuer Aufruf der Post Action) ist mir halbwegs klar nur wie um alles in der Welt kann ich das unterbinden ??
hier mal der Code :
<HTML><HEAD><TITLE>.. www.der-gott.de</TITLE>
<meta http-equiv=refresh content=10;url=http://www.der-gott.de/msg.php>
<style type="text/css">
<!--
A:link {text-decoration:none; border-bottom: 1px dotted; color: #000000; }
A:visited {text-decoration:none; border-bottom: 1px dotted; color:#000000; }
A:hover {color:#ffcc00; text-decoration: underline; }
a:visited:hover {text-decoration:none; border-bottom: 1px solid; color: #ffcc00; }-->
input{font: 7px Verdana color: #000000; border: 1px solid #000000}
.button{border:1px solid #000000;color:#000000;background:#DDDDDD;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:9px;}
.textfeld{border:1px solid #000000; color:#000000;background:#DDDDDD;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:9px;}
body {
font-family:verdana;
font-size:7pt;
color="#000000"
}
-->
</style>
<META content="NOTEPAD" name=GENERATOR>
</HEAD>
<BODY bgcolor="#FFFFFF" border="0" bgproperties="fixed"><center><table width=135>
<font face="Geneva,Verdana,Arial,Helvetica,Geneva" style="font-size:6px;">
<?
$person = str_replace ("\n"," ", $person);
$person = str_replace ("<", " ", $person);
$person = str_replace (">", " ", $person);
$person = stripslashes ($person);
?>
<form action="msg.php" method="post">
<table>
<tr>
<td><font face="Verdana" size="1,5"><b>Nick:</b></td>
<td><input type="text" name="person" class=textfeld size="20" maxlength="20" value="<? echo $person; ?>"><br></td>
</tr>
<tr>
<td><font face="Verdana" size="1,5"><b>Message:</b></td>
<td><input type="text" name="message" class=textfeld size="20" maxlength="90"><br></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="hinschreiben" class=button></td>
</tr>
</table>
</form>
<?php
$message = $_POST["message"];
$person = $_POST["person"];
$chat_file_ok = "msg.txt";
$chat_lenght = 15;
$max_single_msg_lenght = 1024;
$max_file_size = $chat_lenght * $max_single_msg_lenght;
$file_size= filesize($chat_file_ok);
if ($file_size > $max_file_size) {
$lines = file($chat_file_ok);
$a = count($lines);
$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
$msg_old = $lines[$i] . $msg_old;
}
$deleted = unlink($chat_file_ok);
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, $msg_old);
fclose($fp);
}
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("<", " ", $msg);
$msg = str_replace (">", " ", $msg);
$msg = stripslashes ($msg);
if ($msg != ""){
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, "\n<b>$person :</b> $msg");
fclose($fp);
}
$lines = file($chat_file_ok);
$a = count($lines);
$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
echo $lines[$i] . "<br>";
}
?>
</table>
</BODY>
</HTML>
Ich hoffe mir kann das jemand erklären.
Danke schonmal und schönen Vormittag noch
Phil S.
Vice Admiral Special
- Mitglied seit
- 26.12.2001
- Beiträge
- 802
- Renomée
- 5
- Standort
- Mittelfranken
- Mein Laptop
- Schwarzes Macbook
- Prozessor
- AMD XP-M 2600+
- Mainboard
- ABIT KV7
- Speicher
- 2x512 MB Corsair Pro RAM
- Grafikprozessor
- ATI Radeon 9800 pro
- Display
- 1x 19" Belinea 106080 und 1x17" Iiyama HM704UTc, beide auf 1152x864
- HDD
- WD1600BB
- Optisches Laufwerk
- LG Brenner und AOpen DVD-Rom
- Soundkarte
- Creative Live 1024
- Gehäuse
- LianLi (das mit dem Aquarium Seitenteil)
- Betriebssystem
- Gentoo
- Webbrowser
- Firefox
- Verschiedenes
- ...und dann war da noch der quietische iMac G3. :-)
Tach,
wenn du auf den "hinschreiben" Button drückst, wird die gesamte Seite neugeladen. Nur das diesesmal ein paar Daten mitgesendet werden, nämlich die die du eingegeben hast. Drückst du auf "neu laden", wird nur der letzte HTTP Transfer erneut gesendet, also wieder genau die selben Daten wie beim Eintragen. Und damit erscheint der Post nochmal. Der Browser weist einen deswegen extra darauf hin, ob man das ganze wirklich neu laden will, weil man eben diese POST Daten mitsendet.
Was man dagegen machen kann:
Ansätze dafür gibt es viele. Sei kreativ, denk dir ne Lösung aus und setze sie um.
Bye
Phil
wenn du auf den "hinschreiben" Button drückst, wird die gesamte Seite neugeladen. Nur das diesesmal ein paar Daten mitgesendet werden, nämlich die die du eingegeben hast. Drückst du auf "neu laden", wird nur der letzte HTTP Transfer erneut gesendet, also wieder genau die selben Daten wie beim Eintragen. Und damit erscheint der Post nochmal. Der Browser weist einen deswegen extra darauf hin, ob man das ganze wirklich neu laden will, weil man eben diese POST Daten mitsendet.
Was man dagegen machen kann:
- Meldungen lesen und beachten. *SCNR*
- Nach dem Posten auf eine andere Seite weiterleiten, die das Formular gar nicht zeigt. So macht es zum Beispiel die Forensoftware von P3D hier. Oder:
- Überprüfen ob vielliecht der letzte Eintrag genau der selbe ist, wie der, der gerade erneut gesendet wird und dann eben nicht in die Datei/Datenbank schreiben. Oder:
- Mit einer Session verschiedene Bedingungen überprüfen, z.B. wann der letzte Post gemacht wurde und dementsprechend schreiben lassen oder nicht.
- ...
Ansätze dafür gibt es viele. Sei kreativ, denk dir ne Lösung aus und setze sie um.
Bye
Phil
Zuletzt bearbeitet:
der-gott
Vice Admiral Special
- Mitglied seit
- 02.05.2006
- Beiträge
- 763
- Renomée
- 1
- Mein Laptop
- HP Compaq NC4200 + Reiseakku (zusammen 8-10h WLAN Betrieb)
- Prozessor
- AMD AM2 X2 4800+ EE
- Mainboard
- ASROCK ALive NF6G-VSTA BIOS 2.20
- Kühlung
- Thermaltake Sonic Tower
- Speicher
- 4x 1024MB MDT PC800 CL5
- Grafikprozessor
- Sparkle 8500GT passiv
- Display
- Belinea 2025S1W - 20,1"
- HDD
- 400GB Samsung SATA 16MB Cache - 500GB Samsung SATA 16MB Cache - WD Elements 500GB USB2
- Optisches Laufwerk
- 16x LG DVD Brenner
- Soundkarte
- Creative Audigy 2 ZS + Edifier S530
- Gehäuse
- Sharkoon Rebel 9 Economy mit 2x 120mm Scythe Flex
- Betriebssystem
- Windows XP SP2 - Vista und Server 2003 per VirtualPC
- Webbrowser
- Firefox 3.0
Das hatte ich mir auch gedacht nur bin ich leider nicht fähig, dass umzusetzen.[*]Überprüfen ob vielliecht der letzte Eintrag genau der selbe ist, wie der, der gerade erneut gesendet wird und dann eben nicht in die Datei/Datenbank schreiben. Oder:
Brutus5000
Fleet Captain Special
- Mitglied seit
- 13.04.2002
- Beiträge
- 283
- Renomée
- 2
- Standort
- Bochum
- Prozessor
- Intel C2D E8400
- Mainboard
- ASUS P5B, Sockel 775 Intel P965
- Speicher
- 2x 1024MB DDR2 Corsair XMS2 CL 5, PC6400/800
- Grafikprozessor
- XFX GeForce 7950GT 570M XT
- Display
- BenQ FP93GX 19"
- HDD
- WD6400AAKS
- Soundkarte
- Creative SoundBlaster Audigy SE
- Gehäuse
- Coolermaster Centurion5
- Netzteil
- Be Quiet! Dark Power Pro 430W
- Betriebssystem
- Windows NT 5.1 SP2
Ich denke Phils 2. Vorschlag ist der einfachste.
Du hast ja sicherlich nen Link auf das PHP-Skript, wo es einfach nur angezeigt wird. Wenn du nach dem hinzufügen eines Eintrages mit
bzw. einem entsprechenden Link arbeitest sollte es gehen.
Du hast ja sicherlich nen Link auf das PHP-Skript, wo es einfach nur angezeigt wird. Wenn du nach dem hinzufügen eines Eintrages mit
header("Location: shoutbox.php?mode=show");
bzw. einem entsprechenden Link arbeitest sollte es gehen.
Phil S.
Vice Admiral Special
- Mitglied seit
- 26.12.2001
- Beiträge
- 802
- Renomée
- 5
- Standort
- Mittelfranken
- Mein Laptop
- Schwarzes Macbook
- Prozessor
- AMD XP-M 2600+
- Mainboard
- ABIT KV7
- Speicher
- 2x512 MB Corsair Pro RAM
- Grafikprozessor
- ATI Radeon 9800 pro
- Display
- 1x 19" Belinea 106080 und 1x17" Iiyama HM704UTc, beide auf 1152x864
- HDD
- WD1600BB
- Optisches Laufwerk
- LG Brenner und AOpen DVD-Rom
- Soundkarte
- Creative Live 1024
- Gehäuse
- LianLi (das mit dem Aquarium Seitenteil)
- Betriebssystem
- Gentoo
- Webbrowser
- Firefox
- Verschiedenes
- ...und dann war da noch der quietische iMac G3. :-)
Dann zeig doch mal deinen Ansatz, dann schauen wir mal wo der Fehler liegt.Das hatte ich mir auch gedacht nur bin ich leider nicht fähig, dass umzusetzen.
Bye
Phil
Eine ganz banale Lösung, die ich mir vor Jahren mal überlegt habe, auf die bestimmt andere auch schon gekommen sind:
In der Session wird eine Variable abgelegt, anhand der man feststellen kann, ob das Formular gespeichert werden darf. Im Code, der das Eingabeformular darstellt, machst Du sinngemäß Folgendes:
Das input-Feld muss in Dein Formular mit rein. Der Code, der dann die Seite auswertet und abspeichert, sieht dann etwa so aus:
Das Ganze sorgt dafür, dass nur einmal das Formular gespeichert wird. Der Code ist jetzt mal nur so auf die Schnelle hingeschrieben, ich denke aber, dass man die Grundidee daraus erkennen kann.
Mit dieser Lösung braucht man keine merkwürdigen Mechanismen, die auf Client-Seite sichtbar werden, wie es z.B. beim Redirect der Fall ist.
In der Session wird eine Variable abgelegt, anhand der man feststellen kann, ob das Formular gespeichert werden darf. Im Code, der das Eingabeformular darstellt, machst Du sinngemäß Folgendes:
PHP:
<?php
// Counter anlegen
if ( !isset($_SESSION["writeCounter"]) ) {
$_SESSION["writeCounter"] = 0;
}
$_SESSION["writeCounter"]++;
?>
<input type="hidden" name="writeCounter" value="<?php echo $_SESSION["writeCounter"];?>" />
Das input-Feld muss in Dein Formular mit rein. Der Code, der dann die Seite auswertet und abspeichert, sieht dann etwa so aus:
PHP:
<?php
// Nur abspeichern, wenn Counter identisch
if ( $_SESSION["writeCounter"] == $_REQUEST["writeCounter"] ) {
// Formularbeitrag speichern
/* vorhandenen Code einsetzen */
// Counter erhöhen, damit beim nächsten Aufruf die Werte nicht mehr
// zusammenpassen und das Formular nicht nochmal gespeichert wird.
$_SESSION["writeCounter"]++;
}
?>
Das Ganze sorgt dafür, dass nur einmal das Formular gespeichert wird. Der Code ist jetzt mal nur so auf die Schnelle hingeschrieben, ich denke aber, dass man die Grundidee daraus erkennen kann.
Mit dieser Lösung braucht man keine merkwürdigen Mechanismen, die auf Client-Seite sichtbar werden, wie es z.B. beim Redirect der Fall ist.
der-gott
Vice Admiral Special
- Mitglied seit
- 02.05.2006
- Beiträge
- 763
- Renomée
- 1
- Mein Laptop
- HP Compaq NC4200 + Reiseakku (zusammen 8-10h WLAN Betrieb)
- Prozessor
- AMD AM2 X2 4800+ EE
- Mainboard
- ASROCK ALive NF6G-VSTA BIOS 2.20
- Kühlung
- Thermaltake Sonic Tower
- Speicher
- 4x 1024MB MDT PC800 CL5
- Grafikprozessor
- Sparkle 8500GT passiv
- Display
- Belinea 2025S1W - 20,1"
- HDD
- 400GB Samsung SATA 16MB Cache - 500GB Samsung SATA 16MB Cache - WD Elements 500GB USB2
- Optisches Laufwerk
- 16x LG DVD Brenner
- Soundkarte
- Creative Audigy 2 ZS + Edifier S530
- Gehäuse
- Sharkoon Rebel 9 Economy mit 2x 120mm Scythe Flex
- Betriebssystem
- Windows XP SP2 - Vista und Server 2003 per VirtualPC
- Webbrowser
- Firefox 3.0
Ich kann PHP nicht also habe ich auch keinen Ansatz. Habe das Script so ausm Netz und es funktioniert ja auch soweit mal abgesehen eben von dem beschriebenem Problem.
@Rones
Habe den Code jetzt mal so geändert wie ich dachte, dass du es meinst . Rausgekommen ist
Funktionieren tut es aber immer noch nicht weshabl ich davon ausgehen muss, dass ich einen Fehler gemacht habe. Würdest du mir vielleicht verraten wo der Fehler liegt =) ?
@Rones
Habe den Code jetzt mal so geändert wie ich dachte, dass du es meinst . Rausgekommen ist
Code:
<HTML><HEAD><TITLE>.. www.der-gott.de</TITLE>
<style type="text/css">
<!--
A:link {text-decoration:none; border-bottom: 1px dotted; color: #000000; }
A:visited {text-decoration:none; border-bottom: 1px dotted; color:#000000; }
A:hover {color:#ffcc00; text-decoration: underline; }
a:visited:hover {text-decoration:none; border-bottom: 1px solid; color: #ffcc00; }-->
input{font: 7px Verdana color: #000000; border: 1px solid #000000}
.button{border:1px solid #000000;color:#000000;background:#DDDDDD;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:9px;}
.textfeld{border:1px solid #000000; color:#000000;background:#DDDDDD;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:9px;}
body {
font-family:verdana;
font-size:7pt;
color="#000000"
}
-->
</style>
<META content="NOTEPAD" name=GENERATOR>
</HEAD>
<BODY bgcolor="#FFFFFF" border="0" bgproperties="fixed"><center><table width=135>
<font face="Geneva,Verdana,Arial,Helvetica,Geneva" style="font-size:6px;">
<?
$person = str_replace ("\n"," ", $person);
$person = str_replace ("<", " ", $person);
$person = str_replace (">", " ", $person);
$person = stripslashes ($person);
?>
<form action="msg.php" method="post">
<table>
<tr>
<td><font face="Verdana" size="1,5"><b>Nick:</b></td>
<td><input type="text" name="person" class=textfeld size="20" maxlength="20" value="<? echo $person; ?>"><br></td>
</tr>
<tr>
<td><font face="Verdana" size="1,5"><b>Message:</b></td>
<td><input type="text" name="message" class=textfeld size="20" maxlength="90"><br></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="hinschreiben" class=button></td>
</tr>
</table>
</form>
<?php
$message = $_POST["message"];
$person = $_POST["person"];
$chat_file_ok = "msg.txt";
$chat_lenght = 15;
$max_single_msg_lenght = 1024;
$max_file_size = $chat_lenght * $max_single_msg_lenght;
$file_size= filesize($chat_file_ok);
if ($file_size > $max_file_size) {
$lines = file($chat_file_ok);
$a = count($lines);
$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
$msg_old = $lines[$i] . $msg_old;
}
$deleted = unlink($chat_file_ok);
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, $msg_old);
fclose($fp);
}
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("<", " ", $msg);
$msg = str_replace (">", " ", $msg);
$msg = stripslashes ($msg);
if ($msg != ""){
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, "\n<b>$person :</b> $msg");
fclose($fp);
}
$lines = file($chat_file_ok);
$a = count($lines);
$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
echo $lines[$i] . "<br>";
}
f ( $_SESSION["writeCounter"] == $_REQUEST["writeCounter"] ) {
if ( !isset($_SESSION["writeCounter"]) ) {
$_SESSION["writeCounter"] = 0;
}
$_SESSION["writeCounter"]++;
?>
<input type="hidden" name="writeCounter" value="<?php echo $_SESSION["writeCounter"];?>"
$_SESSION["writeCounter"]++;
}
?>
</table>
</BODY>
</HTML>
Funktionieren tut es aber immer noch nicht weshabl ich davon ausgehen muss, dass ich einen Fehler gemacht habe. Würdest du mir vielleicht verraten wo der Fehler liegt =) ?
Ich hab jetzt die comments oben nicht gelesen.
Aber ich hätte das jetzt ganz einfach so gemacht.
Du überprüfst ganz einfach vor dem eintragen des posts in die mysql datenbank
ob der name mit dem eintrag schon existiert.
Wenn ja dann soll ers nicht eintragen, wenn nein soll ers eintragen. Fertig!
machs so
danach
So Far !
Aber ich hätte das jetzt ganz einfach so gemacht.
Du überprüfst ganz einfach vor dem eintragen des posts in die mysql datenbank
ob der name mit dem eintrag schon existiert.
Wenn ja dann soll ers nicht eintragen, wenn nein soll ers eintragen. Fertig!
machs so
PHP:
$result = mysql_query("SELECT * FROM shoutbox WHERE name = '".$name."' AND einrag = '".$eintrag:"'");
danach
PHP:
if (mysql_num_rows($result1)>0)
{
//hier nichts machen
}
else
{
//Den shoutbox eintrag in der mysql abspeichern :)
}
So Far !
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 1K
- Antworten
- 0
- Aufrufe
- 999
- Antworten
- 0
- Aufrufe
- 2K
- Antworten
- 40
- Aufrufe
- 7K