Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]losowanie...
shiru
post 19.08.2013, 14:22:04
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.08.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
markuz
post 19.08.2013, 14:25:52
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


  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. ?>


Ten post edytował markuz 19.08.2013, 14:26:34


--------------------
Go to the top of the page
+Quote Post
BigPig
post 19.08.2013, 14:27:09
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

Ostrzeżenie: (0%)
-----


  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.  
Go to the top of the page
+Quote Post
shiru
post 20.08.2013, 10:07:35
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.08.2013

Ostrzeżenie: (0%)
-----


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?

Ten post edytował shiru 20.08.2013, 10:27:42
Go to the top of the page
+Quote Post
shpaque
post 20.08.2013, 10:19:51
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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

Ten post edytował shpaque 20.08.2013, 10:23:50
Go to the top of the page
+Quote Post
shiru
post 20.08.2013, 10:27:06
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.08.2013

Ostrzeżenie: (0%)
-----


Używałem dwóch skryptów i w każdym jest takie samo zjawisko. Po odświeżeniu strony następuje losowanie.
Go to the top of the page
+Quote Post
shpaque
post 20.08.2013, 10:33:11
Post #7





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
shiru
post 20.08.2013, 10:49:15
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.08.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
BigPig
post 20.08.2013, 11:11:35
Post #9





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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

Ten post edytował BigPig 20.08.2013, 11:12:31
Go to the top of the page
+Quote Post
shiru
post 20.08.2013, 11:39:15
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.08.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
BigPig
post 20.08.2013, 11:52:01
Post #11





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
shiru
post 20.08.2013, 11:55:56
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 19.08.2013

Ostrzeżenie: (0%)
-----


dzięki za pomoc...no i za cierpliwośćwink.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 20:08