php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-02-2006, 12:40
galaxy2
 Junior Member
Links : Onlinestatus : galaxy2 ist offline
Registriert seit: Jun 2005
Beiträge: 238
galaxy2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Problem mit Refresh Button

Hallo,
(längere Erklärung des Problems muss sein, da ich es nicht kürzer erklären kann)

ich habe ein ziemlich verzwicktes Problem mit dem Refreshbutton des IExplorers. Vorweg: Ich weiss das man ihn nicht abfragen kann wegen serverseitigem arbeiten von php.

Nun zu meinem Problem:

Ich habe ein Formular mit 3 Eingabefeldern (Bezieht sich auf eine Oracle9iR2 Tabelle). Dort können Aenderungen vom Benutzer vorgenommen und in einer Datenbank abgespeichert werden.

Jetzt will ich folgendes verwirklichen: Wenn der Benuzter eine Aenderung vornimmt und vergisst diese abzuspeichern, dann soll er genau 1 Mal daran "erinnert werden". Das funzt auch alles einwandfrei.

Folgendermassen habe ich das verwirklicht:

Wenn der Benutzer nun über den Record der Maske "blättert", dann wird immer die nächste etc Zeile der DB in die Maske eingelesen. Zudem speichere ich mir die Werte der Query die aktuell angezeigt werden in einem Array namens Query_Werte_zum_Vergleich ab. Der Record und Save funzt alles über "Submit" Buttons. übertragen wird das Formular mit $_POST.

Zu Begin des Skriptes frage ich immer ab ob die einzelnen Felder des POST Arrays = den Feldern des Query_Werte_zum_Vergleich Arrays sind. Gibt es unterschiede dann kommt wie gesagt die Fehlermeldung.

So wie ich das nun umgesetzt habe passiert folgendes beim Aufruf des Skriptes:

1 Aufruf: Zu Begin:$_POST Array leer, Query_Werte_zum_Vergleich Array
leer. Gegen ende des Skriptes wird Query_Werte_zum_Vergleich
Array aber gefüllt mit Query Werten.

2-n ter Aufruf: zu_Begin: $POST Array enhält werte und
Query_Werte_zum_Vergleich enhält auch die
entsprechenden Werte der Query. Gegen ende des Skriptes
werden aber schon die neuen Werte der Query in das array
Query_Werte_zum_Vergleich eingelesen.


Wie gesagt. Das alles funzt einwandfrei. Bis der Refreshbutton des Internetexplorers gedrückt wird. Denn dann enhällt das Query_Werte_zum_Vergleich Array schon die nächten Werte, aber Das Formular wird nicht (wie bei einem Submit-Button) abgeschickt. Somit enthällt $_POST noch die alten Werte. Folglich kommt die Meldung das eine Aenderung stattgefunden hat, aufgrund der unterschiedlichen Werte in den Arrays.

Hoffe man konnte man Problem verstehen, aber es ist wirklich nicht einfach zu beschreiben. Hänge schon eine lange Zeit daran, aber ich weis nicht wie ich das lösen kann.

Danke für Tipps
Mit Zitat antworten
  #2 (permalink)  
Alt 23-02-2006, 12:47
derHund
 PHP Master
Links : Onlinestatus : derHund ist offline
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
derHund ist zur Zeit noch ein unbeschriebenes Blatt
Standard

kannst du das nicht alles in einem array speichern? also um eine dimension erweitern? so daß dir werte nicht verloren gehen? ließe sich damit eine lösung finden? (mit $_SESSION o.ä.)

meinst du internet explorer oder browser?
__________________
Die Zeit hat ihre Kinder längst gefressen
Mit Zitat antworten
  #3 (permalink)  
Alt 23-02-2006, 14:41
galaxy2
 Junior Member
Links : Onlinestatus : galaxy2 ist offline
Registriert seit: Jun 2005
Beiträge: 238
galaxy2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich mein den Refresh vom Internetexplorer.(Hab nur mit diesem getestet)

Das Problem mit dem überschreiben besteht. Weiss nicht ob das einen Unterschied machen würde, wenn ich statt in einem 2ten Array zu speichern ein mehrdimensionales anlegen würde. Die Daten würden beim Refresh doch auch dann am unteren Ende des Skriptes mit den neuen Werten der Query überschrieben werden. Das Problem beim Refresh ist ganz einfach das das $_POST Array nicht neu gefüllt wird. Darauf baut aber mein Skript eigentlich auf. Das die Query die Werte überschreibt ist normal. Das Passiert noch beim letzten aufruf des Skriptes vor der Refreshbetätigung
Mit Zitat antworten
  #4 (permalink)  
Alt 08-03-2006, 15:29
galaxy2
 Junior Member
Links : Onlinestatus : galaxy2 ist offline
Registriert seit: Jun 2005
Beiträge: 238
galaxy2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nomal zu meinem Problem. Habe jetzt schon mehrere Tage versuch mein Skript imun gegen das Betätigen des Refresh buttons zu machen. Jedoch ohne Erfolg.

Dafür hier mal ein ganz simples Beispiel
PHP-Code:

if(!isset($_POST['senden']))
{
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="name">
<input type="submit" name="senden" value="Senden">
</form>
}
else
{
 ech "sie heissen ".$_POST['name']."<br>";
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="name">
<input type="submit" name="senden" value="Senden">
</form>
}
Beim ersten Aufruf wird noch kein Name ausgegeben und ab dem 2ten werden die eingegebenen Namen angezeigt. Wie kann ich denn nun hierbei sicherstellen, dass der Refreshbuton keine Wirkung hat(hat hier sowieso keine, da es ein stark vereinfachtes skript ist, was keine Werte vergleicht etc)

Also ich würde jetzt geren durch gezieltes setzen von Variablen beim betätigen des Refreshbuttons ausgegeben haben: echo "refresh".

Habe hier oder in einem anderen Forum einen Beitrag gelesen, worin stand dass man durch setzten von Variablen ein refresh vermeiden kann.

Kann mir dabei jemand helfen

Geändert von galaxy2 (08-03-2006 um 15:31 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 08-03-2006, 17:13
icecream
 Registrierter Benutzer
Links : Onlinestatus : icecream ist offline
Registriert seit: Jan 2005
Ort: Regensburg
Beiträge: 282
icecream ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich weiß jetzt nicht, ob es dein Problem trifft, aber du könntest überprüfen, ob der Submit-Button gedrückt wurde ($_POST['NAMEDESSUBMITBUTTONS'];)... falls nicht, dann ist es "der erste Aufruf", außer natürlich er hat ihn schonmal gedrückt und refresht dann...

Das Problem dürfte eig. nicht am IE liegen, da PHP ja Serverseitig ist...

Gruß
icecream
Mit Zitat antworten
  #6 (permalink)  
Alt 09-03-2006, 02:57
globqluqqlo
 Junior Member
Links : Onlinestatus : globqluqqlo ist offline
Registriert seit: Feb 2006
Beiträge: 99
globqluqqlo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich könnte mir vorstellen, dass man sich in einer Session Variabeln serverseitig merken musst, was man ihm gesandt hast. Mit Refresh bekommst Du genau die gleiche Anfrage nochmals inklusive allfälliger hidden Felder. Aber auf die Session Variabeln hat Refresh keinen Einfluss. Es könnte auch mit einem Cookie gehen, davon sollte IE den alten Wert auch nicht mehr haben, wenn er refresht. Das Cookie kann die Anzahl Aufrufe zählen (ich habe sowas, bei refresh zählt es tatsächlich weiter).

HTH.
Mit Zitat antworten
  #7 (permalink)  
Alt 09-03-2006, 07:32
galaxy2
 Junior Member
Links : Onlinestatus : galaxy2 ist offline
Registriert seit: Jun 2005
Beiträge: 238
galaxy2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

ich arbeite bei meinen Skripten mit einer Session. Den Tipp das man eine Variable setzten soll und so weiter habe ich auch schon gelesen. Aber wie genau das gehehn soll weiss ich nicht. Habe schon viele Variablen gesetzt, jedoch immer erfolglos. Mich würde mal interessieren wie man sowas hier lösen kann.

Danke für Tipps
Mit Zitat antworten
  #8 (permalink)  
Alt 09-03-2006, 08:34
Alrik
 Member
Links : Onlinestatus : Alrik ist offline
Registriert seit: Jan 2006
Beiträge: 304
Alrik ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Du speicherst alles was vom Formular kommt in einer Session und bevor du das machst, überprüfst du, ob der Inhalt der Session sich mit dem Inhalt von POST deckt. Wenn ja, dann nichts machen, wenn nein, dann dein Script ausführen und Sessioninhalt ersetzen.

Gruß Thomas
Mit Zitat antworten
  #9 (permalink)  
Alt 09-03-2006, 11:26
globqluqqlo
 Junior Member
Links : Onlinestatus : globqluqqlo ist offline
Registriert seit: Feb 2006
Beiträge: 99
globqluqqlo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ob jemand SUBMIT oder REFRESH gedrückt hat, kann man mit einem Cookie (anstatt Session) und einem verborgenen Feld herausfinden. Allerdings ist Session die bessere, weil robustere Version.

Die Idee mit Cookie ist folgende:
PHP-Code:
#alte Werte speichern (sofern vorhanden)
  
$cookiealt=$_COOKIE['cookie'];
  
$postedcookie=$_POST['postedcookie'];
  
$cookieneu$cookiealt+1;
  
#neue Werte ausgeben
  
setcookie('cookie',$cookieneuexpires=30 minuten)
  <
input type=hidden name=postedcookie value=$cookieneu>

  if (
$postedcookie!=$cookiealt) echo 'er hat nicht submitted, sondern refreshed'
Man muss dann noch die Fälle "Cookie nicht gesetzt" und "POST-Variable nicht gesetzt" behandeln, um keine Syntaxfehler zu bekommen. Bei mir funktioniert das. Bei einem POST bekommst Du das neue cookie und das neue hidden. Bei einem Refresh bekommst Du das neue Cookie, aber nochmals das alte hidden. Damit kann man es unterscheiden.

Wenn ichs mir recht überlege, kann man einfach, anstatt cookie, session brauchen und dann könnte es gehen. Zumindest würde ich, nachdem cookie läuft, so weitermachen.
Mit Zitat antworten
  #10 (permalink)  
Alt 09-03-2006, 13:19
globqluqqlo
 Junior Member
Links : Onlinestatus : globqluqqlo ist offline
Registriert seit: Feb 2006
Beiträge: 99
globqluqqlo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sorry, fehlbedienung, gelöscht.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

ContentLion - Open Source CMS ansehen ContentLion - Open Source CMS

ContentLion ist ein in PHP geschriebenes CMS, bei dem man Seiten, Einstellungen usw. in Ordnern lagern kann

22.08.2019 stevieswebsite2 | Kategorie: PHP/ CMS
Adsman Pro - Werbe-Manager V.1.1.0

Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebigem Format, Textanzeigen und Page-Peels mit umfangreichen Text und Flash-Effekte.

30.07.2019 rhs | Kategorie: PHP/ Bannerverwaltung
HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

30.07.2019 Berni | Kategorie: MYSQL/ Management
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:33 Uhr.