Witam,
Poszukuję skryptu PHP, który będzie wyświetlał losowy cytat. Ważne żeby można było łatwo dodawać/usuwać cytaty.
Z góry dziękuję za pomoc.
Witam,
Poszukuję skryptu PHP, który będzie wyświetlał losowy cytat. Ważne żeby można było łatwo dodawać/usuwać cytaty.
Z góry dziękuję za pomoc.
Spróbuj utworzyć na serwerze plik cytaty.txt (jeden cytat na jedną linię).
A potem w miejscu gdzie chcesz wyświetlić dajesz:
<?php $l=file("cytaty.txt"); echo $l[array_rand($l)]; ?>[/code]
Oczywiście rozwiązanie optymalne nie jest (lepiej by było z bazą danych, ale musiałbyś obsłużyć dodawanie)
Weź random i przypisuj jako id z bazy danych i pozamiatane.
– Dodane 20.02.2012 (Pn) 17:29 –
<?php $l=file("cytaty.txt"); echo $l[array_rand($l)]; ?>[/code]
php linie w plikach txt widzi jak tablice indexowaną?
Chcę ten skrypt podpiąć pod MyBB, więc pobieranie cytatów z bazy będzie pewnie lepszym wyborem. Nie za bardzo umie PHP i MySQL, więc proszę o jasne instrukcję jak taki skrypt mam napisać.
<?php
$query="SELECT * FROM 'CYTATY' ORDER BY RAND() LIMIT 1";
$result = mysql_query($query);
while ($row = mysql_fetch_row($result)) {
echo "{$row['tresc_cytatu']}";
}
?>
To tak na szybko bez sprawdzenia tworzysz tabele CYTATY i w niej masz tresc_cytatu , która zawiera cytaty. Nie jest to najlepsze rozwiązanie, ale najłatwiejsze. Inne to najpierw zapytać o listę ID cytatów i z nich wylosować i potem zapytać bazę o cytat o danym ID (mam gdzieś podobny skrypt jak wrócę do domu to spróbuję dopasować).
Nie wiem jak z wydajnością, ale przypuszczam, że nie będzie cytatów jakoś strasznie dużo.
Pozostaje dopisać dodawanie i usuwanie wpisów.
Tak nie potrzebnie pobieramy wszystko z bazy, a przy cytatach to będzie dość sporo trwać (przykładowe pliki z cytatami jak sprawdzałem mają ok 300-1500 o.0 zależnie od kategorii czyli nie tak mało ). Lepiej:
<?php
$rand = rand(min, max); //np: rand(1, 150) przy 150 cytatach, normalnie było by od 0 ale oczywiście id 0 mieć nie będziesz ;)
$query="SELECT tresc_cytatu FROM cytaty where id_cytatu = '$rand'";
$result = mysql_query($query) or die ('Błąd zapytania o cytat: ' . mysql_error());
while ($row = mysql_fetch_row($result)) {
echo "$row['tresc_cytatu']
";
?>
Pobiera jeden cytat a nie wszystkie. Pomijając fakt użycia *, oraz rand w zapytaniu będzie działać. Twoje jest bardziej optymalne. Ale skoro piszesz pod mybb to wypadałoby skorzystać z klasy mysql’a mybb Nie wiem czy przejdzie takie coś
Włśnie, że wszystkie. Normalnie LIMIT wygląda tak LIMIT 1, 10 (liczby oczywiście przypadkowe), ale pierwsza nie oznacza ilości, a od którego pobieramy. W ten sposób pobierzemy 10 rekordów od 1.
Pierwsza oznacza początek przedziału, ale tylko jeśli oznaczysz jego koniec
Dodałbym jeszcze do kodu R@zora linijki które by losowały z tablicy zawierającej ID cytatów w bazie wtedy by działało niezależnie od ilości wpisów w bazie (aktualnie jest powiedzmy odgórnie ustalone, że 150 wpisów jest) i nie było by problemu gdy wylosowaną liczbą była np 15, której w bazie nie ma bo powiedzmy kolega sobie 15 cytat z bazy usunął no chyba, że ID_CYTATU nie byłoby auto_increment i nie byłoby “pustych miejsc”.
Mam nadzieje, że jasno to opisałem.
Pozdrawiam.
No to wtedy z id twórz sobie tablice. I w rand wpisz zmienną zawierającą długość tablicy lub mysql_num_rows($result);
Dziękuję wszystkim za pomoc, mam nadzieję, że sobie poradzę z zakodowaniem tego żeby zadziałało z MyBB.