Autor | Zpráva | ||
---|---|---|---|
bok Profil * |
#1 · Zasláno: 30. 3. 2014, 19:58:52 · Upravil/a: bok
ahoj, nemohl by mě někdo navést jak vypsat hlášku po přesměrování na nějakou stránku? Dám příklad: při registraci uživatele pokud má všechny údaje OK tak potřebuji stránku refresnout. A poté co se stránka refresne potřebuji vypsat nějakou hlášku. např: "byl jste zaregistrován". Chtěl jsem to dělat nějak takhle, ale jak to pak vypíšu v URL to je ..
echo header("location:registrace.php?®istrace='Uživatel byl úspěšné přidán'"); echo $_GET["registrace"]; Fakt by někdo nenašel chvilku ? |
||
okolojsoucí Profil |
#2 · Zasláno: 30. 3. 2014, 21:27:51
Jmenuje se to flash message, a funguje to na principu že do Session uložíš zprávy a při vypsání likviduješ proměnnou. Používá to dnes skoro každý framework, a je to čistě na úrovni PHP.
Zde najdeš nějaké kódy které tě mohou nakopnout: https://github.com/plasticbrain/PHP-Flash-Messages http://www.phpdevtips.com/2013/05/simple-session-based-flash-messages/ http://www.phpclasses.org/package/6453-PHP-Store-message-to-show-to-user-in-session-variables.html https://coderwall.com/p/9uoamq http://baylorrae.com/blog/2012/03/16/add-flash-messages-to-your-site/ |
||
TomasJ Profil |
Tak první věc je, že bych použil třeba jen nějaké stavové ID a stavy:
//přesměrování header("location:registrace.php?&stavRegistrace=0"); //získání stavu $stavy = Array("ID s nulou - Uživatel nebyl přidán", "ID s jedničkou - Uživatel byl úspěšně přidán"); if(isset($_GET['stavRegistrace'])){ if(isset($stavy[$_GET['stavRegistrace']])){ echo $stavy[$_GET['stavRegistrace']]; } } Druhou možností je hodit hlášku do base64 ( base64_encode() ) a pak ji dekódovat (base64_decode() ), a nebo použít urlencode() / urldecode() .
Uvozovky ani apostrofy do parametrů v url nemusíš dávat. Jsou automaticky chápány jako texty. //přesměrování header("location:registrace.php?®istrace=".urlencode("Uživatel byl úspěšné přidán")); //získání stavu if(!empty($_GET['registrace'])) echo urldecode($_GET['registrace']); //obdobně to je s base64_encode() a base64_decode() - dokumentace (klikni na podtržený příkaz) base64_encode(); base64_decode(); Třetí způsob je použití SESSION (výše zmíněno). Způsobů je ovšem více. Jo a všiml jsem si, že před header() dáváš echo. To nedávej, je to tam zbytečné, nic ti to nevypíše. |
||
juriad Profil |
#4 · Zasláno: 30. 3. 2014, 21:36:37
Kdysi dávno jsem měl definovanou třídu a funkci:
<?php class Message { const SEVERITY_SUCCESS = 0; const SEVERITY_INFO = 1; const SEVERITY_WARN = 2; const SEVERITY_ERROR = 3; private $message, $severity; function __construct($message, $severity = self::SEVERITY_INFO) { $this->message = $message; $this->severity = $severity; if ($severity < 0 || $severity > 3) { throw new InvalidArgumentException("severity out of range"); } } function getMessage() { return $this->message; } function getSeverity() { return $this->severity; } function getClass() { switch ($this->severity) { case self::SEVERITY_SUCCESS: return 'message-success'; case self::SEVERITY_INFO: return 'message-info'; case self::SEVERITY_WARN: return 'message-warn'; case self::SEVERITY_ERROR: return 'message-error'; } } } function saveMessage($message) { if (!isset($_SESSION['messages'])) { $_SESSION['messages'] = array($message); } else { array_push($_SESSION['messages'], $message); } } A na začátku každé stránky jsem měl: <?php if (isset($_SESSION['messages']) && count($_SESSION['messages']) > 0) { echo "<ul id='messagesList'>"; foreach ($_SESSION['messages'] as $message) { echo "<li class='" . $message->getClass() . "'>"; echo htmlspecialchars($message->getMessage()); echo "</li>"; } $_SESSION['messages'] = array(); echo "</ul>"; } Pak jsem kdykoli mohl zavolat: saveMessage(new Message('Uživatel byl přidán')); header('Location: index.php'); |
||
bok Profil * |
#5 · Zasláno: 30. 3. 2014, 23:38:38 · Upravil/a: bok
Děkuji všem za reakce :-) ještě jsem si to chtěl udělat při registraci kapku jinak. Vaše nápady jsem použil jinde :-) Mám tento script na vyskakovací okno a potřebuji po stisknutí OK aby mě to hodilo na index. Nevíte někdo prosím jak se to zapisuje ?
<script> $( "#dialog" ).dialog({ modal: true, draggable: false, resizable: false, buttons: { Ok: function() { $( this ).dialog.location.href = 'index.php'; ulozit(); } } }); </script> |
||
juriad Profil |
#6 · Zasláno: 30. 3. 2014, 23:57:24
Chceš tu adresu na 8. řádku přiřadit do
window.location.href Uložit nejspíš chceš před tím, než se přesměruje. Takto by bylo již pozdě! |
||
bok Profil * |
#7 · Zasláno: 31. 3. 2014, 00:02:39
Takto jste to myslel ? To ale nefunguje. Nepřesměruje mě to nikam.
$( "#dialog" ).dialog({ modal: true, draggable: false, resizable: false, buttons: { Ok: function() { $( this ).dialog.window.location.href=("index.php"); ulozit(); } } }); </script> |
||
juriad Profil |
#8 · Zasláno: 31. 3. 2014, 00:10:42
Ok: function() { ulozit(); window.location.href="index.php"; } |
||
bok Profil * |
#9 · Zasláno: 31. 3. 2014, 12:56:44
Díky moc, už jsem vše rozchodil :-) akorát by mě zajímalo pokud předávám nějakou hlášku pomocí $_GET je to nějaká velká chyba ? Vadí to něčemu ?
|
||
Časová prodleva: 10 dní
|
|||
Honza Tvrdík Profil * |
#10 · Zasláno: 10. 4. 2014, 11:57:42
bok:
Jestli předáváš text hlašky, tak ano to je chyba. Někdo to může zneužít k manipulaci a zmatení uživatelů na tvém webu |
||
Časová prodleva: 10 let
|
0