Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][php] Rotator Banerów =) Oceńcie i sprawdzcie :)
Forum PHP.pl > Inne > Oceny
dawhol
W tabeli mamy trzy pola:
"adres" - adres do strony
"obrazek" - adres do obrazka
"wyswietlen" - ilos wyswietlen smile.gif

Pliku z formularzem nie daje bo chyba kazdy wie jak wygląda winksmiley.jpg
Pliku gdzie jest wykonywana funkcja która dodaje do bazy MySQL tez nie daje poniewaz tego nie chce abyscie oceniali bo niema tam co zwykle zapytani winksmiley.jpg zalezy mi na ocenie skryptu który wyświetla banery smile.gif rotacyjnie co odswierzenie strony smile.gif. Oto jego kod:

  1. <?php
  2. $zapytanie = "SELECT * FROM cms_bannery WHERE id BETWEEN 1 AND 3 AND wyswietlen<1000 ORDER BY rand() LIMIT 1";
  3. $wykonaj = mysql_query($zapytanie);
  4.  
  5. if($dane=mysql_fetch_array($wykonaj)) 
  6. {
  7. echo ('<a href="'.$dane['adres'].'"><img src="'.$dane['obrazek'].'"></a>');
  8. } 
  9. else 
  10.  
  11. $wysw = $dane['wyswietlen'];
  12. $adres = $dane['adres'];
  13. $up = 1;
  14.  
  15. $ilwysw = $wysw+$up;
  16.  
  17. $zapytanie2 = "UPDATE cms_bannery SET wyswietlen='$ilwysw' WHERE adres='$adres'";
  18. $wykonaj2 = mysql_query($zapytanie2);
  19.  
  20. if($wykonaj2) 
  21. {
  22. echo ('');
  23. } 
  24. else 
  25. ?>


Oczywiscie skrypt po kazdym wyswietleniu banera dodaje 1 do jego liczby wyswietlen winksmiley.jpg

Prosze o oceny i ew. rady co i jak poprawic winksmiley.jpg moj drugi skrypcik po 4-5 dniach nauki smile.gif
nospor
  1. <?php
  2. if($dane=mysql_fetch_array($wykonaj)) 
  3. {
  4. echo ('<a href="'.$dane['adres'].'"><img src="'.$dane['obrazek'].'"></a>');
  5. } 
  6. else 
  7. ?>

Te mysql_error() powinno byc po mysql_query a nie po mysql_fetch_array(). W przypadku bledu zapytania dostaniesz jeszcze niepotrzebne bledy przy mysql_fetch_array() gdyz wykonywac sie bedzie na blednych danych.
Gdy zapytanie nic ci nie zwroci, to wygenereuje sie mysql_error(), czyli nic sie nie wygeneruje, gdy errora mysql nie bedzie.
Krotko mowiac: w zlym miejscu dalej mysql_error() smile.gif

  1. ...id BETWEEN 1 AND 3...
czemu tak? mozna tylko 3 banery losowac i to tylko z zadanym id?
dawhol
stwierdzilem terasz ze trzeba by poprawic to tak aby wszystko wzgledem ID bylo albo obrazka a nie adresu bo czasem mozna dac dwa rozne banery pod jeden adres =)

w sumie trzeba by to popraiwc tam jes BETWEN 1 and 3 poniewaz chce aby losowal mi liczbe pomiedzy tymi trzema bo obecnie mam 3 banery w bazie ale trzeba by tam dac ostatni id z bazy smile.gif zamiast tej 3 zapomniałem to zrobic winksmiley.jpg
nospor
Cytat
ale trzeba by tam dac ostatni id z bazy
Ale po co? Po co wogole warunek na te id, skoro mają byc losowane wszystkie rekordy? wystarczy warunek na wyswietlenia.
dawhol
no spoko ale jak nie bylo tego to mi losowal liczbe której niema w bazie a moze mialem inny blad winksmiley.jpg
musze to sprawdzic smile.gif poziej smile.gif bo teraz lece do pracy smile.gif
nospor
Cytat
no spoko ale jak nie bylo tego to mi losowal liczbe której niema w bazie

jak moze losowac ci z bazy cos czego nie ma? Losuje po rekordach, ktore są
Astarot
W swoim rotatorze nie uwzględniłeś danych osadzonych w skryptach JS, a także banerków flashowych. Pozatym dodaj alt="coś" bo walidator będzie krzyczał.

<img src="'.$dane['obrazek'].'" alt="cos" />

pozdr.
dawhol
~nospor moze i masz racje widocznie mialem inny blad smile.gif i jak go poprawilem to zapomnialem tego zmienic winksmiley.jpg no ale w koncu ucze sie od paru dni wiec odrazy nie napisze skryptół bezbłędnyc po to je tu daje zeby je ocenic i ew. podac jakies uwagi smile.gif

~astarot fatk zapomniałem o tym smile.gif zdarza sie smile.gif trzn w pierwszej wersji to było ale w pierwszej wersji nie mialem za to ilosci wyswietlen a teraz dodalem i zapomnialem o tym smile.gif
Nightwalker
w Twoim kodzie nie ma jakże ważnego

mysql_free_result" title="Zobacz w manualu php" target="_manual
dawhol
~Nightwalker zaraz to dodam u siebie smile.gif dzieki za poinformowanie mnie winksmiley.jpg nawet nie znalem takiej funkcji smile.gif ale teraz juz bede o niej pamietał smile.gif w koncu czlowiek uczy sie na blędach smile.gif
nospor
bez przesady... jak juz podajecie linki to czytajcie chociaz:
Cytat
mysql_free_result() używa się tylko w wypadkach obawy zajęcia zbyt dużej ilości pamięci przez zapytania zwracające duże ilości danych. Cała pamięć przydzielona wynikowi skojarzonemu z podanym identyfikatorem wyniku będzie automatycznie zwolniona.

Skrypt tutaj zwraca jeden rekord, ktory ma sie nijak do " duże ilości danych."

edit (po poscie ponizej): z tresci posta wnioskowalem jednak ze to jest wymog dla tego skryptu a nie dobry nawyk tongue.gif
Nightwalker
Cytat(nospor @ 25.07.2006, 13:29 ) *
bez przesady... jak juz podajecie linki to czytajcie chociaz:

Skrypt tutaj zwraca jeden rekord, ktory ma sie nijak do " duże ilości danych."



Takie coś rodzi złe nawyki, dlatego to napisałem smile.gif

Edit do posta powyżej: źle się wyraziłem, ale lepiej opróżniać ZAWSZE i później nie zapominać, niż na odwrót (przynajmniej takie jest moje zdanie w tej sprawie) winksmiley.jpg
Turgon
Według mnie przydałoby się mysql_num_rows, gdyż wykonujemy selecta id z bazy bez warunków, czyli mamy wszystkie rekordy kolumny id. Następnie ta prosta komenda i skrypt wie spośród jakich liczb losowac.
dawhol
Dobra to powiem co poprawilem i moderator moze zamknac temat winksmiley.jpg jak chce ofc winksmiley.jpg

1) usubołem warunek id BETWEEN 1 AND ... smile.gif i działą moj bład był jakis smile.gif
2) dodałem pole opis w bazie oraz alt w obrazku i title w linku smile.gif
3) zrobiłem echo mysql_error w funkcji warunkowej smile.gif przy mysql_query winksmiley.jpg tak jak radzil ~nospor
4) dodałem w tabeli pole max wyswietlen i zamiast 1000 w pierwsyzsm zapytaniu sql dalem 'maxwyswietlen' tzn:
  1. SELECT * FROM cms_bannery WHERE wyswietlen<maxwyswietlen ORDER BY rand() LIMIT 1


działa pięknie winksmiley.jpg jeszcze pozniej sie pobawei aby wyszczególnic banery gif od flasha i innych smile.gif ale to pozniej smile.gif
Nightwalker
I jeszcze jedno, dlaczego wyciągasz wszystko z bazy (SELECT *) zamiast wyciągnąć tylko potrzebne pola, przykładowo

  1. SELECT `pole1`, `pole2`, `pole3` FROM `tabela`


?

Komentarz do wpisu poniżej: nie znam struktury bazy, a przeważnie potrzebne jest tylko kilka pól...
dawhol
no bo wszystko jest mi potrzbne smile.gif to chyba logiczne winksmiley.jpg
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.