| 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: 12 let
|
|||
0