Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]zmiana tekstu po odświeżeniu
morarz
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 4.02.2011

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


Witam,

Mam pytanie bo nie wiem jaką funkcję do tego zastosować z PHP,

wyciągam dane z bazy danych i wyświetlam je na stronie, jest to 5 informacji (title), ale chciałbym żeby za każdym razem po odświeżeniu były to inne 5 informacji jak się do tego zabrać (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
kadlub
post
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


czyli chcesz za każdym odświeżeniem strony mieć inne dane wyciągane z bazy
to musisz zmienić zapytanie przy każdym odświeżeniu strony więc
nie wiem jakie masz zapytanie ale jak pobierasz rekord po id a te pięć danych ma być losowe to zrób sobie
np
  1. $id=rand(1,19) ;
  2. $sql=mysql_query("select * from tabela where id='".$id."' ");


pokarz kod będzie łatwiej

Ten post edytował kadlub 5.04.2011, 11:36:48
Go to the top of the page
+Quote Post
peter13135
post
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. $sql=mysql_query("select * from tabela ORDER BY rand() LIMIT 5);

ale...
http://blog.ksiazek.info/2010/05/04/order-by-rand-to-zlo/

Więc możesz wylosować 5 idków za pomocą rand() w php sprawdzając czy się nie powtarzają.
a potem zapytanie zrobić tak:

  1. $sql=mysql_query("select * from tabela WHERE ID in(" . implode(',', $tablica_id) . ")");


Ten post edytował peter13135 5.04.2011, 11:41:16
Go to the top of the page
+Quote Post
morarz
post
Post #4





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 4.02.2011

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


Zrobiem tak i mam zapytanie błąd :
  1. $id=rand(1,19) ;
  2. $sql = "select * from phpbb_topics where id='".$id."' ";
  3. $result = mysql_query($sql) or die("Zapytanie błąd");
  4.  
  5. for($x=1;$x<=5;$x++){
  6. $row = mysql_fetch_array($result);
  7. echo "<ul>";
  8. echo "<li><a href = \"http://www.garwolinskie.info/forum/viewtopic.php?f=$row[forum_id]&t=$row[topic_id]\">$row[topic_title]</a><br></li>";
  9. echo "</ul>";


(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) ?

Hej Peter a ta zmienna tablica_id to do czego (IMG:style_emoticons/default/questionmark.gif) ?

Ten post edytował morarz 5.04.2011, 16:24:13
Go to the top of the page
+Quote Post
kadlub
post
Post #5





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1. $tab=array();
  2. $liczba=19;//liczba id w bazie
  3. for($x=1;$x<=5;$x++){
  4. $id=rand(1,$liczba);
  5. if(!in_array($id,$tab)){
  6. array_push($tab,$id);
  7. $result = mysql_query("select * from phpbb_topics where id='".$id."' ") or die(mysql_error());
  8. $row = mysql_fetch_array($result);
  9. echo "<ul>";
  10. echo '<li><a href = "http://www.garwolinskie.info/forum/viewtopic.php?f='.$row['forum_id'].'&t='.$row['topic_id'].'">'.$row['topic_title'].'</a><br></li>';
  11. echo "</ul>";
  12. }
  13. else{
  14. $x--;
  15. }
  16. }
  17.  


trochę na sztywno więc nie wiem czy cię to zadowoli
Go to the top of the page
+Quote Post
peter13135
post
Post #6





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


@kadlub
Czy nie sądzisz że Twój sposób jest nieco nieoptymalny ?
Jeśli kolejno losowane liczby będą takie same, to tablica będzie miała tylko 1 element, a wszystkie artykuły będą takie same
Twoja tablica nie jest nigdzie używana.
Integer nie string, nie wymaga apostrofów

@morarz
$tablica id, to taka która miała by zawierać wylosowane przez Ciebie id. Widzę że nie potrafisz skorzystać z moich wskazówek, więc napiszę całość. (korzyystając trochę z powyższego przykładu)
  1. $tab=array();
  2. $liczba=19;//liczba id w bazie
  3. while(count($tab)<5)
  4. {
  5. $id=rand(1,$liczba);
  6. if(!in_array($id,$tab))
  7. array_push($tab,$id);
  8. }
  9. $result = mysql_query('select * from phpbb_topics where id in(' . implode(',',$tab) . ')' ) or die(mysql_error());

dalej zrób jak post wyżej, albo całkiem po swojemu.
PS. żeby kod nie ulegał zapętleniu, $liczba musi być >= 5, inaczej kod się zapętli. Dodanie odpowiedniego warunku pozostawiam Tobie.

Ten post edytował peter13135 5.04.2011, 18:43:41
Go to the top of the page
+Quote Post
kadlub
post
Post #7





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Cytat(peter13135 @ 5.04.2011, 19:41:06 ) *
@kadlub
Czy nie sądzisz że Twój sposób jest nieco nieoptymalny ?
Jeśli kolejno losowane liczby będą takie same, to tablica będzie miała tylko 1 element, a wszystkie artykuły będą takie same
Twoja tablica nie jest nigdzie używana.
Integer nie string, nie wymaga apostrofów

  1. if(!in_array($id,$tab))
  2. array_push($tab,$id);

a jak myślisz co robi ten kawałek kodu??

  1. $tab=array();
  2. $liczba=19;//liczba id w bazie
  3. for($x=1;$x<=5;$x++){
  4. $id=rand(1,$liczba);
  5. if(!in_array($id,$tab)){
  6. array_push($tab,$id);
  7. $result = mysql_query("select * from phpbb_topics where id='".$id."' ") or die(mysql_error());
  8. $jest=mysql_num_rows($result);
  9. if($jest==1){
  10. $row = mysql_fetch_array($result);
  11. echo "<ul>";
  12. echo '<li><a href = "http://www.garwolinskie.info/forum/viewtopic.php?f='.$row['forum_id'].'&t='.$row['topic_id'].'">'.$row['topic_title'].'</a><br></li>';
  13. echo "</ul>";
  14. }
  15. else
  16. {
  17. $x--;
  18. }
  19. }
  20. else{
  21. $x--;
  22. }
  23. }


bardziej z optymalizowany
tamten miał wadę że jak np id nie były kolejne tylko np 1,2, 5, 8, 12
to wyświetlał czasami puste miejsca

Ten post edytował kadlub 5.04.2011, 19:28:59
Go to the top of the page
+Quote Post
peter13135
post
Post #8





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Cytat
a jak myślisz co robi ten kawałek kodu??

Myślę że odpala rakietę.
Ok. Masz rację. Sam się zaplątałem, źle odczytałem wyrażenia warunkowe (bo brak wcięć (IMG:style_emoticons/default/tongue.gif) )
Ale nie zmienia to faktu że robisz aż 5 zapytań, co nie jest optymalne. Już lepiej jest zrobić tak.
  1. $sql=mysql_query('select * from tabela ORDER BY rand() LIMIT 5');

Co prawda też nie idealne bo rand() w mysql robi tymczasową tabelę, ale jednak lepsze to niż 5 zapytań i jest znacznie prostsze w implementacji (jedna linijka to nie kilkanaście)

Ten post edytował peter13135 5.04.2011, 20:11:13
Go to the top of the page
+Quote Post
morarz
post
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 4.02.2011

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


Wy tu gadu gadu a u mnie pięknie ładnie działa.

Dla obydwu po "Pomógł".

Dzięki serdecznie.

Pozdr.

Spójrzcie sobie na listę postów :

"Cytata jak myślisz co robi ten kawałek kodu?? "

lol (IMG:style_emoticons/default/biggrin.gif)



Ten post edytował morarz 5.04.2011, 20:29:56
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 08:02