Autor Zpráva
bok
Profil *
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?&registrace='Uživatel byl úspěšné přidán'");
echo $_GET["registrace"];



Fakt by někdo nenašel chvilku ?
okolojsoucí
Profil
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?&registrace=".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
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');
A tato hláška se zobrazila na následující stránkce (po přesměrování).
bok
Profil *
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
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 *
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
Ok: function() { 
    ulozit(); 
    window.location.href="index.php";
}
bok
Profil *
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 ?
Honza Tvrdík
Profil *
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

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0