Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowe wybieranie tekstu
Forum PHP.pl > Forum > Przedszkole
xSlash
Mam plik txt:

Kod
Cos1|Cos2|Cos3|Cos4...



Jak zrobic, zeby raz na dzien (czyli co 24h) zmieniał sie tekst na losowy.
Czyli 12czerwca Cos3, a 13czerwca Cos1...
Prosiłbym bardziej o gotowy skrypt, ale jesli nie to chociaz o podpowiedz jak to zrobic...
P.S. Funkcja "array" sie nie przyda bo tych "coś'ow" bedzie spoooro i dluuugich...
DREEMus
Ponumeruj sobie te "cosie" i potem ustaw "max" jako drugi parametr ...
rand" title="Zobacz w manualu PHP" target="_manual

Albo najpierw policz ile ich masz, a potem ustaw to na MAX ...
a co do zmiany co 24h, myśle że sam dojdziesz winksmiley.jpg

PS. A nie lepiej Ci tu użyć MySQL? Nie będzie funkcjonalniej i bardziej przejrzyście?
xSlash
Nie za bardzo załapałem... Ale skad to bedzie wiedziec jaki element z pliku txt wyciąc... A co do 24h to tez sobie nie poradze... Jestes swierzak... Moglbys mi to napisac ?
DREEMus
hmm, np.
  1. <?PHP
  2. function slogan () {
  3.  
  4.    $min = 0;
  5.    $max = 100 // tutaj wstawiasz sumowanie lini w TXT
  6.  
  7.    $nr = rand ( $min, $max ); // losujesz któryś "coś"
  8.  
  9.    $slogan = '...'; //tutaj wstawiasz linie z TXT, nr linia już masz
  10.    
  11.    echo $slogan;
  12.  
  13.    }
  14. ?>
xSlash
Niestety nie dziala... nic nie pokazuje... ani echo $slogan ani echo $nr... nie działa...
Fifi209
Cytat(xSlash @ 13.06.2009, 00:17:23 ) *
Niestety nie dziala... nic nie pokazuje... ani echo $slogan ani echo $nr... nie działa...


Polecam najpierw wczytać plik.
Poza tym określiłbyś co to ma być to "coś", bo np. gdy będzie znak nowej linii to będzie traktowane jako coś2 etc. ;d
teherty
  1. <?php
  2. $plik = file_get_contents('./baza.txt'); //ten plik z danymi
  3. $wpisy = explode('|',$plik);
  4. $ile = count($wpisy) - 1; //sumuje wpisy
  5. $i = rand(0,$ile);
  6. echo $wpisy[$i];
  7. ?>


To jest samo wyświetlanie, część o wyświetlaniu ciągle tego samego codziennie musisz sam dopisać. Dość gotowców. Mogę jedynie podpowiedzieć że najlepszym wyjściem byłoby zapisywanie tego wylosowania do pliku i sprawdzanie ostatniego zapisu, a w razie potrzeby ponowne losowanie odrzucając ostatni wynik.

@low: rzeczywiście, dziękuję bardzo.
Fifi209
Cytat(teherty @ 13.06.2009, 00:25:08 ) *
  1. <?php
  2. $wpisy = explode('|','./baza.txt'); //ten plik z danymi
  3. $ile = count($wpisy) - 1; //sumuje wpisy
  4. $i = rand(0,$ile);
  5. echo $wpisy[$i];
  6. ?>


To jest samo wyświetlanie, część o wyświetlaniu ciągle tego samego codziennie musisz sam dopisać. Dość gotowców.


Zamiast:
Kod
'./baza.txt'


chciał kolega napisać:
Kod
file_get_contents('./baza.txt')


@down
@edit

Na prawdę, mógłbyś czytać...
Cytat(xSlash @ 13.06.2009, 00:30:36 ) *
Takie cos wyswietla mi "./baza.txt"... zamiast czesci to sciezke to pliku blinksmiley.gif Kolejny zly pomysl... Ale dam Pomogl...
Czekam na inne propozycje


Przecież napisałem, co masz zrobić zamiast bezsensownego kopiowania.
Kolega zapomniał też dodać, że "coś" od innego "cosia" musi być oddzielone znakiem |
xSlash
Cytat(teherty @ 13.06.2009, 00:25:08 ) *
  1. <?php
  2. $wpisy = explode('|','./baza.txt'); //ten plik z danymi
  3. $ile = count($wpisy) - 1; //sumuje wpisy
  4. $i = rand(0,$ile);
  5. echo $wpisy[$i];
  6. ?>


Takie cos wyswietla mi "./baza.txt"... zamiast czesci to sciezke to pliku  blinksmiley.gif Kolejny zly pomysl... Ale dam Pomogl...


Czekam na inne propozycje

EDIT: Z zaleceniami fifiego to mi wyskakuja bledy skladni... Jak to ma byc?
Kod
$wpisy = explode('|','file_get_contents('slowo.txt')'); //ten plik z danymi
$wpisy = explode('|','file_get_contents('.slowo.txt')'); //ten plik z danymi
$wpisy = explode('|','file_get_contents('./slowo.txt')'); //ten plik z danymi

Ktores z tych? Bo zadne z tych nie działa biggrin.gif

No dobra... po tych stu editach zadziałało... A moglbym jeszcze prosic o dodanie takiego limitu ze zanim da drugi raz cos1 musiało podac wszystkie inne... Czyli zeby powtorzyc jakis rekord musiało najpierw dac wszystkie inne biggrin.gif (dwa razy to samo napisałem) czyli zeby sie nie powtarzaly ;]
DREEMus
  1. <?php
  2. $wpisy = explode( '|', file_get_contents('slowo.txt') ); //ten plik z danymi
  3. ?>

zero chęci ... o przemyśleniu nie wspomnę ... a podstawy poszły w las ... sad.gif
teherty
Kod cały wyżej, poprawiony.
Co do drugiej części to myślę, że filemtime" title="Zobacz w manualu PHP" target="_manual i time" title="Zobacz w manualu PHP" target="_manual mówią same za siebie.
Fifi209
zapisz do innego pliku wystąpienia w postaci zserializowanej tablicy, potem wczytuj ją do skryptu i sprawdzaj kiedy wystąpiło.

P.S. Potrzebne funkcje (te mniej znane) file_get_contents()" title="Zobacz w manualu PHP" target="_manual, file_put_contents()" title="Zobacz w manualu PHP" target="_manual, serialize()" title="Zobacz w manualu PHP" target="_manual, unserialize()" title="Zobacz w manualu PHP" target="_manual i poczytaj http://pl.php.net/manual/en/book.array.php
xSlash
ludzie chyba sobie to odpuszcze... 


Jestem total zielony a wy dajecie linki tylko do tutow...

Nie mozecie pomoc piszac skryptu? *(P.S.Nie czekam na odpowiedzi typu "nie" ;/)*
Fifi209
Cytat(xSlash @ 13.06.2009, 00:51:58 ) *
ludzie chyba sobie to odpuszcze... 
Jestem total zielony a wy dajecie linki tylko do tutow...

Nie mozecie pomoc piszac skryptu? *(P.S.Nie czekam na odpowiedzi typu "nie" ;/)*


Jeżeli chcesz gotowy skrypt to można ten temat przenieść do giełdy i oznaczyć tagiem "wolontariat" chyba, że jesteś w stanie zapłacić.

W przedszkolu masz się uczyć czegoś, aby nie zadawać 100x tego samego pytania.
MicNeo
  1. <?php
  2.  
  3.  
  4.    $wpisy = explode('|', file_get_contents('baza.txt')); // plik z danymi
  5.    $ile = count($wpisy) - 1; //sumuje wpisy
  6.    
  7.    if ($wpisy[0] != date('d')){    // sprawdzamy czy mamy zmienic wylosowany tekst
  8.    
  9.        $i = rand(2, $ile);         // losujemy sobie tekst
  10.        
  11.        $wpisy[0] = date('d');      // zmieniamy dzien
  12.        $wpisy[1] = $i;                // zmieniamy nr tekstu
  13.            
  14.        $fp = fopen('baza.txt', 'w');        // zapis do pliku
  15.        fwrite($fp, implode('|', $wpisy));  // Zapisujemy do pliku wsyzstko, dzien, nr cytatu, i cytaty
  16.        fclose($fp);                        // wiadomo ;)
  17.    }
  18.    
  19.    else {                              // mamy nadal ten sam dzien wiec podstawiamy za $i stary numer
  20.        $i = $wpisy[1];
  21.    }
  22.    
  23.  
  24.    echo $wpisy[$i];                 // wyswietlamy
  25.  
  26.    
  27.  
  28. ?>


Bardzo prosto rozwiązane, byś mógł się coś z tego nauczyć. Do tego okomentowałem to.

Pozdrawiam!

PS: Schemat pliku: baza.txt -> 13|5|cos1|cos2|cos3
13 - dzien
5 - zapamietany ostatni tekst
cos1, cos2 ... - wiadomo, teksty winksmiley.jpg
Fifi209
Cytat(MicNeo @ 13.06.2009, 01:09:43 ) *
Bardzo prosto rozwiązane, byś mógł się coś z tego nauczyć. Do tego okomentowałem to.

Pozdrawiam!

PS: Schemat pliku: baza.txt -> 13|5|cos1|cos2|cos3
13 - dzien
5 - zapamietany ostatni tekst
cos1, cos2 ... - wiadomo, teksty winksmiley.jpg


Użyj do zapisuj file_put_contents()" title="Zobacz w manualu PHP" target="_manual bo tak tylko zasypujesz go nowymi funkcjami (ich ilością)

P.S. Teraz się nic nie nauczy. winksmiley.jpg
MicNeo
Ja tylko pokazałem użycie kilku podstawowych narzędzi. Jeżeli będzie się chciał nauczyć to sie nauczy smile.gif A bez explode, implode, działania na plikach, ani rusz w dalszy świat winksmiley.jpg Chociaż sam nie używam jakoś często plików w swoich skryptach, ale wypada to znać. Do teraz nie wiedziałem, że PHP5 wprowadziło takie fajne funkcje jak file_put_contents czy file_get_contents biggrin.gif

Pozdrawiam!
xSlash
Cytat(MicNeo @ 13.06.2009, 01:25:30 ) *
Ja tylko pokazałem użycie kilku podstawowych narzędzi. Jeżeli będzie się chciał nauczyć to sie nauczy smile.gif


Twoj skrypt nic nie wyswietla, ale widze, ze mamy podobne poglady na swiat... Niestety... sad.gif
MicNeo
Jakiś błąd? Może źle plik masz ustawiony? Poza tym pamiętaj, że w pliku w którym masz te swoje dane, są też dane konfiguracyjne.

Pozdrawiam.
xSlash
errora nie wywala, ale poprostu nic nie pokazuje... sciezka jest dobra... a na probe  w pliku napisalem

"13|5|cos1|cos2|cos3"
Wicepsik
  1. <?php
  2.   $wpisy = explode('|', file_get_contents('baza.txt')); // wczytuemy plik z danymi oraz go oddzielamy
  3.   $ile = count($wpisy) - 1; //sumuje wpisy
  4.    $i = rand(0, $ile); // losujemy od 0 do ilości wpisów
  5.    echo $wpisy[$i]; // wyświetlamy tekst
  6. ?>
xSlash
@Wicepsik Takie cos juz bylo... Dziala, ale dodaj do tego, zeby zmienialo kazdego dnia (co 24h) i zeby byla blokada na powtarzanie (aby powtorzylo dopiero kiedy wszystkie zostaly pokazane)
Wicepsik
Cytat(xSlash @ 13.06.2009, 13:03:58 ) *
@Wicepsik Takie cos juz bylo... Dziala, ale dodaj do tego, zeby zmienialo kazdego dnia (co 24h) i zeby byla blokada na powtarzanie (aby powtorzylo dopiero kiedy wszystkie zostaly pokazane)

A ile będzie tych 'cos' ?
Fifi209
Cytat(Wicepsik @ 13.06.2009, 13:07:05 ) *
A ile będzie tych 'cos' ?


Zmienna ilość. winksmiley.jpg Zapisz do xml'a/mysql'a kiedy, jaki został wyświetlony. haha.gif
MicNeo
W pliku na chwile obecna wpisz: 12|0|cos1|cos2|cos3

Teraz ci wylosuje odpowiedni cytat i zmieni to 0 na wylosowana liczbe.

PS: Taa xml, mysql winksmiley.jpg Dajcie spokój, przerazicie chłopaka biggrin.gif
xSlash
Cytat(Wicepsik @ 13.06.2009, 13:07:05 ) *
A ile będzie tych 'cos' ?

Cos kolo 400




Cytat(MicNeo @ 13.06.2009, 13:15:15 ) *
W pliku na chwile obecna wpisz: 12|0|cos1|cos2|cos3

Teraz ci wylosuje odpowiedni cytat i zmieni to 0 na wylosowana liczbe.

PS: Taa xml, mysql winksmiley.jpg Dajcie spokój, przerazicie chłopaka biggrin.gif

Nie, nieprzezi mnie to... MySQL jest latwiejsze od txt, ale to chce zrobic w txt... 
Kiedy wpisalem 12|0|cos1|cos2|cos3 to otrzymalem
Kod
Warning: fopen(baza.txt): failed to open stream: Permission denied in /old/ad3s1f/virtual/szu.pl/x/xslash/www/web/l_3.php on line 14 Warning: fwrite(): supplied argument is not a valid stream resource in /old/ad3s1f/virtual/szu.pl/x/xslash/www/web/l_3.php on line 15 Warning: fclose(): supplied argument is not a valid stream resource in /old/ad3s1f/virtual/szu.pl/x/xslash/www/web/l_3.php on line 16 cos2



Niby wyswietla ale z errorem i zmienia cośka za kazdym refem...
Wicepsik
  1. <?php
  2. $wczytaj = explode('|', file_get_contents('dzien.txt')); // wczytujemy plik i rozbijamy go na cytat i numer dnia
  3.  
  4.     if($wczytaj[1]==date('z')) // $wczytaj[1] - dzien
  5.      {
  6.        
  7.         echo $wczytaj[0];
  8.  
  9.      }else{
  10.    
  11.         $wpisy = explode('|', file_get_contents('baza.txt')); // wczytuemy plik z danymi oraz go oddzielamy
  12.         $ile = count($wpisy); //sumuje wpisy
  13.         $i = rand(0, $ile); // losujemy od 0 do ilości wpisów
  14.         file_put_contents('dzien.txt', $wpisy[$i].'|'.date('z')); // zapisujemy do pliku wylosowany cytat oraz date w postaciu dnia roku
  15.         echo $wpisy[$i];
  16.      }
  17. ?>

baza.txt
Kod
13|5|cos1|cos2|cos3

dzien.txt
Kod
cos3|163
MicNeo
Plik baza.txt gdzie wgraleś? ^^
xSlash
Cytat(MicNeo @ 13.06.2009, 13:34:24 ) *
Plik baza.txt gdzie wgraleś? ^^


w glowny folder strony
Fifi209
Kod
Permission denied in /old/ad3s1f/virtual/szu.pl/x/xslash/www/web/l_3.php


Co oznacza tyle, że nie nadałeś odpowiednich chmodów i skrypt nie może odczytać tego pliku.
xSlash
Cytat(Wicepsik @ 13.06.2009, 13:29:13 ) *
  1. <?php
  2. $wczytaj = explode('|', file_get_contents('dzien.txt')); // wczytujemy plik i rozbijamy go na cytat i numer dnia
  3.  
  4.     if($wczytaj[1]==date('z')) // $wczytaj[1] - dzien
  5.      {
  6.        
  7.         echo $wczytaj[0];
  8.  
  9.      }else{
  10.    
  11.         $wpisy = explode('|', file_get_contents('baza.txt')); // wczytuemy plik z danymi oraz go oddzielamy
  12.         $ile = count($wpisy); //sumuje wpisy
  13.         $i = rand(0, $ile); // losujemy od 0 do ilości wpisów
  14.         file_put_contents('dzien.txt', $wpisy[$i].'|'.date('z')); // zapisujemy do pliku wylosowany cytat oraz date w postaciu dnia roku
  15.         echo $wpisy[$i];
  16.      }
  17. ?>

baza.txt
Kod
13|5|cos1|cos2|cos3

dzien.txt
Kod
cos3|163


Niestety to tez mi nic nie wyswietla... sad.gif




Wszystkie pliki na moim hoscie sa CHMOD = 644
Skrypt MicNea teraz nic nie pokazuje... :/
Wicepsik
Cytat(xSlash @ 13.06.2009, 13:56:33 ) *
Niestety to tez mi nic nie wyswietla... sad.gif
Wszystkie pliki na moim hoscie sa CHMOD = 644
Skrypt MicNea teraz nic nie pokazuje... :/

A zrobiłeś pliki baza i dzien? Sprawdzałem u siebie i wszystko działało...
MicNeo
Co to za serwer masz?
xSlash
szu.pl
MicNeo
Nie wiem, spróbuj ustawić chmod plików na 777 (plik baza.txt i ten od .php). I sprawdź czy działa, bo jak dla mnie to jakieś problemy z uprawnieniami są.
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.