Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]losowanie...
Forum PHP.pl > Forum > Przedszkole
shiru
Witam!

Mam problem takiej natury. Otóż mam skrypt losujący cytaty. Zrobiłem guziczek losuj i po jego naciśnięciu losowany jest kolejny cytat - i generalnie wszystko gra. Problem w tym, że nie umiem zrobić takiej opcji aby losowanie rozpoczęło się dopiero od kliknięcia w guziczek. Aktualnie po "wklepaniu" storny od razu pojawia sie jakiś losowo wybranu cytat, a chciałbym, żeby pokazywał się tylko przycisk losuj i dopiero po jego kliknięciu wylosowany cytat. Zdaję sobie sprawę, że to pewnikiem tylko jedna linijka kodu. Ale moja przygoda z PHP-em rozpoczęła się zaledwie kilka godzin temu i pomimo grzebania w googlach nie jestem w stanie dostrzec odpowiedzi (pewnie nie raz ją widziałem).

Oto i kod:

Kod
<?php
$cytaty = file('cytaty.txt');
$wyswietl = explode('||', $cytaty[array_rand($cytaty, 1)]);
echo '<form>'.$wyswietl[0].'<br/><input type="submit" value="losuj"></form>';
?>


Prosiłbym o pomoc
markuz
  1. <?php
  2. if($_GET['akcja'] == 'losuj')
  3. {
  4. $cytaty = file('cytaty.txt');
  5. $wyswietl = explode('||', $cytaty[array_rand($cytaty, 1)]);
  6. echo $wyswietl[0];
  7. }
  8. else
  9. {
  10. echo '<a href="?akcja=losuj">Losuj</a>';
  11. }
  12. ?>
BigPig
  1. <form method="post">
  2. <input type="submit" value="Wyślij!" id="submit" name="submit" />
  3. </form>
  4. <?php
  5.  
  6. if(isset($_POST['submit']))
  7. {
  8. //to co ma się wygenerować po wciśnięciu przycisku
  9. }
  10.  
  11. ?>
  12.  
shiru
Dziękuję bardzo, dokładnie taki efekt pragnąłem uzyskać. Szczerze mówiąc to nie spodziewałem się tak szybkiej reakcji.

Pozdrawiam!

jeszcze jedno pytanko. Czy istnieje możliwość "zablokowania" losowania przy odświeżaniu strony. Żeby losować tylko i wyłącznie przez kliknięcie przycisku?
shpaque
jeżeli dasz GET'a to zawsze będzie losował (bo po uprzednim kliknięciu następnie odświeżeniu strony zawsze w adresie będzie widniał wpis: ?akcja=losuj) - musi być w POST... czyli w klamrach drugiego rozwiązania od kolegi BigPig
shiru
Używałem dwóch skryptów i w każdym jest takie samo zjawisko. Po odświeżeniu strony następuje losowanie.
shpaque
Przy rozwiązaniu BigPig'a nie ma takiej możliwości - żeby wywołanie zadziałało TRZEBA nacisnąć submit button. Odswieżanie strony nie jest równoznaczne z naciśnięciem przycisku. TYLKO w przypadku GET'a tak jest.

Sprawdź swój kod albo daj jego wycinek - musisz mieć jakiegoś babola.
shiru
oto i kod:

Kod
<form method="post">
<input type="submit" value="Wyślij!" id="submit" name="submit" />
</form>
<?php

if(isset($_POST['submit']))
{
$cytaty = file('cytaty.txt');
    $wyswietl = explode('||', $cytaty[array_rand($cytaty, 1)]);
    echo $wyswietl[0];
}

?>


wkleiłem jeno swój kod losowania w kod kolegi BigPiga
BigPig
I ten kod działa jak powinien.

Dla shpaque chodziło o to, że lepiej jest ten drobny problem rozwiązać przy pomocy POST niż GET.
Gdy użyjesz button'u i POST to kod się odpali tylko i tylko wtedy, gdy wciśnie się przycisk.

Z GET jest już inaczej. On odpala się w momencie, gdy w link'u znajdzie się wymagane słowo. W tym przypadku jest to: ?akcja=losuj
W związku z tym, gdy używamy GET, możemy spowodować losowanie(odpalenie skryptu) na trzy sposoby.

1) Wciskając przycisk, który doda do linku wymaganą frazę i to spowoduje odpalenie się skryptu
2) Użytkownik ręcznie może wpisać do linku wymaganą frazę i to też spodowoduje odpalenie skryptu
3) Gdy użytkownik ma już w linku wpisaną wymaganą frazę, by móc wylosować kolejny cytat, wystarczy, że odświeży stronę. Skrypt się odpali, ponieważ w linku dalej znajduje się wymagany przez niego zwrot.

W związku z tym chodziło koledzie shpaque, że POST jest lepsze, bo tylko po wciśnięciu przycisku, wylosuje się skrypt. Nawet jak już go wylosujemy i odświeżymy stronę, to znowu będziemy musieli go wcisnąć by go wylosować.

Najlepiej będzie jak napiszesz to samo z wykorzystaniem GET i sprawdzisz czy faktycznie jest tak jak mówię biggrin.gif
shiru
rozumiem te różnice. Rzeczywiście z użyciem GET w pasku adresu jest permanentna komenda "akcja losuj" czy coś takiego. Ale niestety kiedy używam POST i odświeżam, pierwej wyskakuje mi komunikat: "Aby wyświetlić tę stronę, Firefox musi ponownie przesłać dane....itd itd", no i po kliknięciu "prześlij ponownie" następuje odświeżenie i losowanie kolejnego cytatu. Sam baton działa poprawnie i losuje za każdym kliknięciem.
Jest to rzecz kosmetyczna i nie chcę robić rabanu z tak błahego powodu.
BigPig
Ten motyw z ponownym przesłaniem formularzu to standard. Tak powinno być, przeglądarka pyta się czy zachować się tak jakby jeszcze raz przesłać formularz, czy nie. Jesli wciśniesz to tak jakbyś ponownie wcisnął button. Wszystko jest ok.
shiru
dzięki za pomoc...no i za cierpliwośćwink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.