Apache - MySql - PHP - phpMyAdmin
- max_power
- Zombiepirat
- Beiträge: 10065
- Registriert: 16.04.2002, 20:30
- Wohnort: Uppsala
- Kontaktdaten:
Ich habe ganz stumpf den Text in der DB verglichen, da musst du höchstens mit Anführungs- und Sonderzeichen aufpassen. Also wie du nur mit dem Text statt ID. Ist zwar vermutlich total ineffizient, aber bei kleinen Projekten sicherlich in Ordnung.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
- Persisteus
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 20.06.2002, 16:43
- Wohnort: Vluyn
- Kontaktdaten:
Warum speicherst du die checkID eigentlich in der Tabelle mit ab? Wäre es nicht einfacher, einen versteckten Input "saved" = 0 nach dem Abspeichern auf 1 zu setzen, und dessen Inhalt dann oben im Script abzufragen?
Dieser SQL-Ausdruck wird nie ein Ergebnis zurückliefern, weil die Tabelle nachrichten heisst, und nicht formSend.$sqlCheck = @mysql_query("SELECT id FROM formSend WHERE checkID = '".$_POST['checkID']."'");
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
Ups. Stimmt ja. Hab ich total übersehen.
Änder aber leider am Problem auch ncihts. Funzt nach wie vor nicht. Ich werd wahrscheinlich wirklich den kompletten Text vergleichen müssen.
Ist aber aus zwei Gründen unschön:
- was, wenn ich rein zufällig mal genau das gleiche abspeichern will
- für die Performance ist das wohl auch nicht gerade das beste (owbohl die Datenmengen jetzt auch nicht unheimlich viel sein werden.)
Änder aber leider am Problem auch ncihts. Funzt nach wie vor nicht. Ich werd wahrscheinlich wirklich den kompletten Text vergleichen müssen.
Ist aber aus zwei Gründen unschön:
- was, wenn ich rein zufällig mal genau das gleiche abspeichern will
- für die Performance ist das wohl auch nicht gerade das beste (owbohl die Datenmengen jetzt auch nicht unheimlich viel sein werden.)
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
Fänd ich ja an sich auch besser, aber das Problem ist ja, daß beim Aktualisieren der Seite der Button immer als gedrückt interpretiert wird.Persisteus hat geschrieben:Warum speicherst du die checkID eigentlich in der Tabelle mit ab? Wäre es nicht einfacher, einen versteckten Input "saved" = 0 nach dem Abspeichern auf 1 zu setzen, und dessen Inhalt dann oben im Script abzufragen?
Ich hätte also keine Bedinung, an hand derer ich die Variable dann wieder auf null setzen kann.
EDIT: Sorry für den Doppelpost.
-
- Tastatursteuerer
- Beiträge: 736
- Registriert: 26.12.2005, 12:33
- Wohnort: Villa des Tentakels
- Kontaktdaten:
Der Button wird keineswegs "als gedrückt interpretiert":
Du feuerst die Seite ab, die Daten werden eingetragen.
Wenn du das ganze jetzt nochmal machst, überträgt er die Daten halt erneut. Das ist so gewollt, mit einer eigenwilligen Interpretation hat das nix zu tun
Das umgehst du, indem du nach dem Eintrag einfach ein neues (leeres) Formular ausgibst, meinetwegen zur Kontrolle nochmal den eingegebe nen Text als "echten" Text außerhalb des Input-Feldes.
Schau dir halt ein minimales PHP-Gästebuchskript deiner Wahl an, die können das eigentlich alle. Der von dir beschriebene Effekt tritt eigentlich nur auf wenn man sehr schnell (d.h. bevor die Antwort kommt) das Formular zweimal abschickt. Das sollte dann dein ID-Check unterbinden können.
Du feuerst die Seite ab, die Daten werden eingetragen.
Wenn du das ganze jetzt nochmal machst, überträgt er die Daten halt erneut. Das ist so gewollt, mit einer eigenwilligen Interpretation hat das nix zu tun

Das umgehst du, indem du nach dem Eintrag einfach ein neues (leeres) Formular ausgibst, meinetwegen zur Kontrolle nochmal den eingegebe nen Text als "echten" Text außerhalb des Input-Feldes.
Schau dir halt ein minimales PHP-Gästebuchskript deiner Wahl an, die können das eigentlich alle. Der von dir beschriebene Effekt tritt eigentlich nur auf wenn man sehr schnell (d.h. bevor die Antwort kommt) das Formular zweimal abschickt. Das sollte dann dein ID-Check unterbinden können.
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
Ich mach es jetzt ganz anders und öffne einfach ein anderes php-Dokument.
Dann hab ich dieses ganze Theater nicht.
EDIT:
Hab es jetzt so weit verschlankt.
Es wird also die ok.php aufgerufen, wenn das Formular abgeschickt wird. Leider trägt er jetzt gar nichts mehr in die Datenbank ein. Oder muß jetzt das eigentlich Updaten der DB in dem aufgerufenen php-dokument passiern, also in ok.php?
EDIT: Hab mir die Frage gerade selber beantwortet. Der DB-Code muß also in die ok.php.
Damit hab ich dann allerdings wieder den selben Käse wie vorher. Ich drück fröhlich F5 und erfügt jedes mal nen neuen Datensatz ein.
Ich glaub, ich geb es auf.
EDIT...mal wieder
Hab es jetzt folgendermaßen gemacht:
Funzt astrein.
in der ok.php steht folgendes drin.
Da soll also nichts weiter passieren, außer daß dem User angezeigt wird: "Datenbank aktualisiert". Anshcließend soll er einfach wieder auf die andere Seite zurückgelinkt werden.
Allerdings krieg ich diesmal den Fehler, daß der Header bereits gesendet wurde...(was immer das auch heißen mag.)
Hat jemand ne Idee?
Dann hab ich dieses ganze Theater nicht.
EDIT:
Code: Alles auswählen
<?php
if ( isset($_POST['Btn_save']) )
{
$db_host = "localhost"; // MySQL Hostname
$db_name = "news"; // MySQL Datenbankname
$db_user = "datenbankuser"; // MySQL Benutzername
$db_pass = ""; // MySQL Passwort
$link = mysql_connect ($db_host,$db_user,$db_pass ) // Verbindung zum Datenbankserver aufbauen
or die ("Verbindung fehlgeschlagen!"); // wenn fehlgeschlagen
$db = mysql_select_db($db_name,$link) // Datenbank wählen
or die ("Verbindung fehlgeschlagen"); // wenn fehlgeschlagen
$neuenachricht=$_POST['Text'];
$datum = date("Y.m.d",time());
mysql_query("insert into nachrichten (newseintrag, datum) values ('$neuenachricht', '$datum')");
}
?>
<html>
<form name="Nachrichten" action="ok.php" method="post">
<table align="center" border=1>
<tr><td><textarea name="Text" rows="6" style="width:500px;""></textarea></td></tr>
<tr><td><input type="submit" name="Btn_save" value="Neuen Beitrag"></td></tr>
</table>
</form>
</html>
Es wird also die ok.php aufgerufen, wenn das Formular abgeschickt wird. Leider trägt er jetzt gar nichts mehr in die Datenbank ein. Oder muß jetzt das eigentlich Updaten der DB in dem aufgerufenen php-dokument passiern, also in ok.php?
EDIT: Hab mir die Frage gerade selber beantwortet. Der DB-Code muß also in die ok.php.
Damit hab ich dann allerdings wieder den selben Käse wie vorher. Ich drück fröhlich F5 und erfügt jedes mal nen neuen Datensatz ein.
Ich glaub, ich geb es auf.
EDIT...mal wieder
Hab es jetzt folgendermaßen gemacht:
Code: Alles auswählen
<?php
if (($_POST['Btn_save'])!="" )
{
$db_host = "localhost"; // MySQL Hostname
$db_name = "news"; // MySQL Datenbankname
$db_user = "datenbankuser"; // MySQL Benutzername
$db_pass = ""; // MySQL Passwort
$link = mysql_connect ($db_host,$db_user,$db_pass ) // Verbindung zum Datenbankserver aufbauen
or die ("Verbindung fehlgeschlagen!"); // wenn fehlgeschlagen
$db = mysql_select_db($db_name,$link) // Datenbank wählen
or die ("Verbindung fehlgeschlagen"); // wenn fehlgeschlagen
$neuenachricht=$_POST['Text'];
$datum = date("Y.m.d",time());
mysql_query("insert into nachrichten (newseintrag, datum) values ('$neuenachricht', '$datum')");
header ("Location: ok.php");
exit();
}
?>
<html>
<form name="Nachrichten" action="<?php $PHP_SELF ?>" method="post">
<table align="center" border=1>
<tr><td><textarea name="Text" rows="6" style="width:500px;""></textarea></td></tr>
<tr><td><input type="submit" name="Btn_save" value="Neuen Beitrag"></td></tr>
</table>
</form>
</html>
in der ok.php steht folgendes drin.
Code: Alles auswählen
<?PHP
echo "Datenbank aktualisiert";
$startzeit=time()+3;
while ($startzeit<time())
{
//tu nichts
}
header ("Location: news.php");
exit();
?>
Allerdings krieg ich diesmal den Fehler, daß der Header bereits gesendet wurde...(was immer das auch heißen mag.)
Hat jemand ne Idee?
- Persisteus
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 20.06.2002, 16:43
- Wohnort: Vluyn
- Kontaktdaten:
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
Ist ja blöd.
Habs jetzt anders gemacht. In der ok.php wird jetzt direkt wieder zur news.php zurückgesprungen. Damit vermeide ich die doppelten Einträge und optisch fällt es überhaupt nicht auf. Man hat den Eindruck, auf der Ur-Seite zu bleiben.
Gibt es eigentlich eine Funktion, die mir die letzte besuchte Seite ausgibt.
Also quasi news.php, wenn ich zu ok.php gesprungen bin? Dann könnte ich den Linkaufruf in der ok.php dynamischer gestalten und die auch noch für andere Zwecke benutzen.
Habs jetzt anders gemacht. In der ok.php wird jetzt direkt wieder zur news.php zurückgesprungen. Damit vermeide ich die doppelten Einträge und optisch fällt es überhaupt nicht auf. Man hat den Eindruck, auf der Ur-Seite zu bleiben.
Gibt es eigentlich eine Funktion, die mir die letzte besuchte Seite ausgibt.
Also quasi news.php, wenn ich zu ok.php gesprungen bin? Dann könnte ich den Linkaufruf in der ok.php dynamischer gestalten und die auch noch für andere Zwecke benutzen.
-
- Tastatursteuerer
- Beiträge: 736
- Registriert: 26.12.2005, 12:33
- Wohnort: Villa des Tentakels
- Kontaktdaten:
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
-
- Tastatursteuerer
- Beiträge: 736
- Registriert: 26.12.2005, 12:33
- Wohnort: Villa des Tentakels
- Kontaktdaten:
$referrer="ok.php";
if (referrer != "") {$location=$referrer}
header ("Location: $location");
Den Rest kannst du ja selbst
Und nein, könnte man nicht drauf kommen, sind ja nur 1,89 Mio Hits
if (referrer != "") {$location=$referrer}
header ("Location: $location");
Den Rest kannst du ja selbst

Und nein, könnte man nicht drauf kommen, sind ja nur 1,89 Mio Hits
- Persisteus
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 20.06.2002, 16:43
- Wohnort: Vluyn
- Kontaktdaten:
@TentakelTommy:
Dein Script löst das Problem von Fightmeyer nicht (und es ist sowieso sinnlos, einer Variablen einen Wert zuzuweisen und ihn direkt danach wieder abzufragen).
@Fightmeyer:
Na ja, die Variable $_SERVER['HTTP_REFERER'] ist nicht unbedingt verlässlich. Siehe hier: http://de.php.net/manual/de/reserved.va ... les.server
Dein Script löst das Problem von Fightmeyer nicht (und es ist sowieso sinnlos, einer Variablen einen Wert zuzuweisen und ihn direkt danach wieder abzufragen).
@Fightmeyer:
Na ja, die Variable $_SERVER['HTTP_REFERER'] ist nicht unbedingt verlässlich. Siehe hier: http://de.php.net/manual/de/reserved.va ... les.server
Es empfiehlt sich ein Übergabeparameter, z.B. ok.php?refer=newsDann könnte ich den Linkaufruf in der ok.php dynamischer gestalten und die auch noch für andere Zwecke benutzen.
-
- Tastatursteuerer
- Beiträge: 736
- Registriert: 26.12.2005, 12:33
- Wohnort: Villa des Tentakels
- Kontaktdaten:
- Fightmeyer
- Riesiger Roboteraffe
- Beiträge: 7309
- Registriert: 16.12.2004, 22:51
- Wohnort: Potsdam
- Kontaktdaten:
Kann mal bitte jemand über folgende zeile Code drüberschauen?!
Als Ergenis liefert er das hier:
Update nachrichten set ueberschrift='Eine News von heute_editiert', nachricht='Das ist ein Test und so weiter und so fort...editiert' where id=11
Was ja an sich auch richtig ist.
Nur leider wird der Eintrag in der Datenbank nicht geupdated. Woran könnte das liegen?
(Diese ganze Kommata, Hochkommata, Apostrophe und Anführungszeichen machen mich fertig...
Die schwierigsten Zeilen Code sind für mich die SQL Abfragen und die Echo Anweisungen...
)
Code: Alles auswählen
$string="Update nachrichten set ueberschrift='$_POST[ueberschrift]', nachricht='$_POST[nachricht]' where id=$_GET[newsid]";
echo $string;
mysql_query($string);
Update nachrichten set ueberschrift='Eine News von heute_editiert', nachricht='Das ist ein Test und so weiter und so fort...editiert' where id=11
Was ja an sich auch richtig ist.
Nur leider wird der Eintrag in der Datenbank nicht geupdated. Woran könnte das liegen?
(Diese ganze Kommata, Hochkommata, Apostrophe und Anführungszeichen machen mich fertig...

