ugrás a tartalomhoz

alkalmazás struktúra - a klasszikus adatok újraküldése probléma

Nutec · 2010. Feb. 19. (P), 10.52
Sziasztok!

Problémám a kövezkező lenne:

Írtam egy webes alkalmazást, amely a tartalmakat dinamikusan generálja az index.php-ben.
Refresh-nél ugyebár előugrik a kis ablak, hogy a firefoxnak újra kell küldenie az adatokat.
Olvastam, hogy ezt a header(location..)-el lehet megoldani, de az Istenért sem sikerül megfelelően.
Ha ugyebár magára az index.php-re irányítom át az oldalam hibaüzenetet kapok, hogy nem hajtható végre (ezt meg is értem).
Gyanítom, hogy az alkalmazásomat kellene átstruktúrálni, csak szeretnék valami támpontot, hogy merre induljak, mi a bevett gyakorlat?

Az alkalmazás eddig így működik:

Bejelentkezésnél ugyebár post-tal elküldöm az adatokat, ha ezek átmennek az autentikáción akkor az újra betöltődött index.php body-jában már a beléptető ablak helyett már a felhasználói felületet tölti be.

Ennek a megoldása még talán ok is lenne, ha áttenném az utóbbit egy külön fájlba(mondjuk egy main.php-ba) és oda irányítanám át sikeres auth esetén.
Ami nagyobb fejtörést okoz az az alkalmazás belsejében lévő formok elküldése, ezeket hova irányítsam ahol feldolgozza a postot?(ha magára az oldalra akarom irányítani akkor újfent hibaüzenetet kapok).
Hogy kellene kinézzen egy ilyen adminfelület szerű alkalmazás struktúrája?

Bár nincs szükség refreshelgetésre, mégsem szeretném, hogyha a gyanútlan user kétszer küldene fel egy hírt az oldalra (mégha az könnyen törölhető is), azért mert frissítette az oldalt.

Előre is köszi a segítséget!

Üdv.: Nu7ec
 
1

ha csinálsz egy oldalt ami

h31st · 2010. Feb. 19. (P), 21.08
ha csinálsz egy oldalt ami feldolgozza a formot, majd visszaküldi az eredeti oldalra, az is megoldás lehet... de célszerű kiírni valami üzenetet, amit el kell rakni mondjuk $_SESSION -be, hogy az eredeti oldalon ki tudd iratni...
és ez még mindig nem oldja meg azt, ha véletlen (véletlen?) kétszer (többször?) postolja a formot. inkább egy ellenőrzést kéne írni, hogy ne tudja kétszer beküldeni, és akkor már újratöltögethet bármit :)
vagy neadjisten a formot beküldésnél ajax-al küldöd be és a form helyére ajax-al kirakod az eredményt... azt is reloadolhatja nem fogja újra elküldözgetni (de ellenőrzést így is kéne)
2

Isset

csman007 · 2010. Feb. 19. (P), 22.15
amikor ellenőrzöd a beléptetési adatokat sessionnel a legegyszerűbb szerintem, ez csak egy példa.
ez az ellenörző fájlban:

if (mysql_num_rows($result) == 1) {
			session_regenerate_id();
			$member = mysql_fetch_assoc($result);
			$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
			$_SESSION['SESS_LOGIN'] = $member['login'];
			session_write_close();
			if ($member['login'] == "admin") {
				header("location: ../admin/admin.php");
				exit();
				}
				else {
					header("location: ../index.php");
					
				}
			}
az indexre meg teszel egy ilyet pl:

 if (!isset($_SESSION['SESS_MEMBER_ID'])) {
 	echo "<form id=\"loginForm\" name=\"loginForm\" method=\"post\" action=\"files/log_ok.php\">
     
    <div class=\"form-row\">Felhasználónév<br />
      <input name=\"login\" type=\"text\" size=15 class=\"required\" id=\"login\" /></div>
    
      <div class=\"form-row\">Jelszó<br />
      <input name=\"password\" type=\"password\" size=15 class=\"required\" id=\"password\" /></div>
    
   <input type=\"submit\" name=\"Submit\" value=\"Belépés\" /> 
</form>";



} 
elseif ($_SESSION['SESS_LOGIN'] == "admin") {
	print ("<br /><center>".$_SESSION['SESS_LOGIN']."</center><br />");
	echo "<center><a href=\"admin/index.php\">Admin site</a> | <a href=\"files/kilepes.php\">Logout</a></center>";
}
else {
	print ("<br /><center>".$_SESSION['SESS_V_NEV']." ".$_SESSION['SESS_K_NEV']."</center><br />");
	echo "<center><a href=\"files/kilepes.php\">Profil</a> | <a href=\"files/kilepes.php\">Logout</a></center>";
}
3

köszi szépen...

Nutec · 2010. Feb. 20. (Szo), 01.17
Köszi szépen, de azt hiszem megoldottam.

Szeretném az egészet amennyire lehet "pure" php-ban megoldani, ezért nem akarok ajax-ot belevinni. Az lesz majd bőven a frontenden, de az admin felületnél nem akarom.)
Sessionben szintén nem szeretném tárolni a bejelentkezés adatait, az maradjon csak az objektum private változójába zárva.
Igazából amire kíváncsi voltam az az, hogy hogyan alakítsam az alap struktúrát az újraküldés elkerüléséhez.

A következő megoldás született:

Az index.php csak az oldal belépési pontja lett, innen irányítom át bejelentkezéskor az alkalmazás kezdőoldalára. A menüben kiválaszthatja a user a megfelelő oldalt(természetesen minden oldal elején autentikáció, ha valami nem stimmel akkor vissza->index.php). Itt már minden oldal külön fájl. Az alkalmazás formjainak feldolgozásakor pedig átirányítom egy oldalra amely a kimeneteket kezeli. A formokból bepostolom az üzenet típusát(az alkalmazás melyik oldaláról jött) és az annak megfelelő template-et töltöm be az oldalba, így megoldottam az újraküldési problémát is.
Röviden ennyi.

Azért köszi mégegyszer!

Üdv.: Nu7ec