Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Zmienna wartość odnośnika
Forum PHP.pl > Forum > Przedszkole
playdewu
Cześć.
Mam odnośnik do którego chciałbym ustawić zmienną wartość tak, aby linki zmieniały się co dzień.
Da się w jakiś sposób zlistować kilka linków i zrobić tak aby kolejno z listy z upływem dnia były nadawane odnośnikowi?

Dla przykładu, mamy takie zdjątko z odnośnikiem:

Dziś wartość wynosi http://forum.php.pl/, a jutro dajmy na to będzie http://google.pl, pojutrze http://wp.pl i tak dalej..
Michael2318
Jasne, że się da. Musisz tylko gdzieś przechowywać obecny dzień (w bazie lub w pliku .txt).

  1. $tablica = array(
  2. 0 => 'http://forum.php.pl',
  3. 1 = > 'http://google.pl',
  4. 2 => 'http://wp.pl'
  5. );
  6.  
  7. $day = $row['last_day']; // w tej zmiennej zakładam, że masz ostatni numer dnia tygodnia, zgodny z funkcją date(), czyli 0 (dla Niedzieli) aż do 6 (dla Soboty).
  8. if ( $day !== date("w", time()) )
  9. {
  10. echo 'Dzisiejszy link: <a href="'.$tablica[(date("w", time()))].'">CLICK</a>';
  11. $sql = "update ..."; // tutaj aktualizujesz tą zmienną $day, na obecny dzień, pobierasz ją z tej funkcji: date("w", time())
  12. }


Jeśli wolisz to przechowywać w pliku .txt to zmienna $day powinna wyglądać tak:

  1. $day = file_get_contents('plik.txt'); // w nim ma się znajdować tylko i wyłącznie liczbowa forma dnia tygodnia


z kolei aktualizacja tej zmiennej powinna wyglądać tak:

  1. if ( file_put_contents('plik.txt', date("w", time())) !== FALSE )
  2. {
  3. echo 'Sukces, zaktualizowano!';
  4. }


Zwróć też uwagę na $tablica - indeksy odpowiadają poszczególnym dniom tygodnia, indeks 0 - Niedziela, 1 - Poniedziałek itd.
golabow
Najlepiej użyć crona, który będzie co dobę uruchamiał skrypt ze zmianą linku.
Natomiast jeżeli nie ma takiej możliwości to można przechowywać w bazie danych lub pliku startowy czas i ostatni użyty link. Przy uruchomieniu skryptu sprawdzać czy nie minęła doba, jeżeli tak to zmieniamy atrybut linku i aktualizujemy dane zewnętrzne.

Napisałem na szybko taki przykład:

  1. <?php
  2.  
  3. $tablicaLinkow = array( 'http://forum.php.pl/', 'http://google.pl', 'http://wp.pl' ); // tablica linkow
  4.  
  5. $db = connectDB(); // tutaj twoja funkcja do polączenia z baza
  6. $q = $db->query( 'SELECT * FROM tabelaCzas LIMIT 1' ); // pobieram pierwszy rekord
  7.  
  8. if ( !$q->num_rows ) // jezeli pusta tablica
  9. {
  10. $time = getdate();
  11. $time = $time[0];
  12. $db->query( "INSERT INTO tabelaCzas VALUES( $time, 0 )" ); // aktualny czas i numer pierwszego elementu tablicy;
  13. }
  14. else // mamy rekord
  15. {
  16. $row = $q->fetch_assoc();
  17. $lastTime = $row['lastTime']; // lastTime to nazwa pola w tabeli
  18. $lastIndex = $row['lastIndex'];
  19.  
  20. $aTime = getdate(); // aktualny czas
  21. $aTime = $aTime[0];
  22. if ( $aTime - $lastTime >= ( 24 * 60 * 60 ) )
  23. {
  24. $aIndex = ( $lastIndex + 1 ) % count( $tablicaLinkow );
  25. $db->query( "UPDATE tabelaCzas SET lastTime=$aTime, lastIndex=$aIndex WHERE lastTime=$lastTime" ); // aktualizacja danych w bazie
  26. }
  27. }
  28.  
  29. ?>


Następnie wystarczy generować link na podstawie aktualnego indeksu w bazie czy pliku.
playdewu
Kod Michael2318 działa, ale jest to rozwiązanie dobre na 7 linków (7 dni tygodnia) jeśli dobrze zrozumiałem, ja potrzebuję nieograniczonej ilości linków.
Kod golabow:
Kod
Fatal error: Call to undefined function connectDB() in /home/dewu/domains/zt-mta.pl/public_html/count.php on line 6
by_ikar
  1. <?php
  2.  
  3. $links = array(
  4. 'http://planeta.php.pl/',
  5. 'http://forum.php.pl/',
  6. 'http://phpedia.pl/',
  7. 'http://wortal.php.pl/',
  8. 'http://test.php.pl/',
  9. 'http://php.net/',
  10. 'http://www.mysql.com/',
  11. 'https://github.com/',
  12. 'https://gist.github.com/',
  13. 'http://jsfiddle.net/',
  14. 'http://www.regexr.com/',
  15. 'http://stackoverflow.com',
  16. 'http://httpd.apache.org/',
  17. 'http://nginx.org/',
  18. 'http://www.mongodb.org/',
  19. 'http://redis.io/',
  20. 'http://nodejs.org/',
  21. 'https://packagist.org/',
  22. 'https://www.npmjs.org/',
  23. 'http://getbootstrap.com/',
  24. 'http://jquery.com/',
  25. 'https://code.google.com/',
  26. 'http://symfony.com/',
  27. 'http://laravel.com/',
  28. 'http://framework.zend.com/',
  29. 'http://xcache.lighttpd.net/',
  30. 'http://www.php-fig.org/psr/',
  31. 'https://www.google.pl/',
  32. 'https://www.facebook.com/',
  33. 'http://feedly.com/',
  34. 'https://www.dropbox.com/',
  35. );
  36.  
  37. echo '<a href="'.$links[date('j')-1].'">link</a>';


Edit: a jak chcesz trochę więcej niż 31, no to możesz użyć zamiast date('j') (dzień miesiąca), dzień roku date('z'). Wtedy będziesz mógł w takiej tablicy mieć 365 linków (366 w roku przystępnym).
Michael2318
Dokładnie tak jak poprzednik napisał,a co do pytania odnośnie kodu glowabow, to chodziło mu o skrypt, dzięki któremu łączysz się z bazą danych po prostu.
golabow
Akurat chodziło mi o twoją własną funkcje do łączenia się z bazą danych, ale również można to zapisać przy użyciu funkcji mysqli_connect().
Dodałem też jak wygląda stworzenie linka.

  1. <?php
  2.  
  3. $tablicaLinkow = array( 'http://forum.php.pl/', 'http://google.pl', 'http://wp.pl' ); // tablica linkow
  4.  
  5. $db = mysqli_connect( 'localhost', 'twojLogin', 'twojeHaslo', 'twojaBazaDanych' ); // tutaj twoja funkcja do polączenia z baza
  6. $q = $db->query( 'SELECT * FROM tabelaCzas LIMIT 1' ); // pobieram pierwszy rekord
  7. $klucz = 0; // domyslnie jest to pierwszy link
  8.  
  9. if ( !$q->num_rows ) // jezeli pusta tablica
  10. {
  11. $time = getdate();
  12. $time = $time[0];
  13. $db->query( "INSERT INTO tabelaCzas VALUES( $time, 0 )" ); // aktualny czas i numer pierwszego elementu tablicy;
  14. }
  15. else // mamy rekord
  16. {
  17. $row = $q->fetch_assoc();
  18. $lastTime = $row['lastTime']; // lastTime to nazwa pola w tabeli
  19. $lastIndex = $row['lastIndex'];
  20.  
  21. $aTime = getdate(); // aktualny czas
  22. $aTime = $aTime[0];
  23. if ( $aTime - $lastTime >= ( 24 * 60 * 60 ) )
  24. {
  25. $aIndex = ( $lastIndex + 1 ) % count( $tablicaLinkow );
  26. $db->query( "UPDATE tabelaCzas SET lastTime=$aTime, lastIndex=$aIndex WHERE lastTime=$lastTime" ); // aktualizacja danych w bazie
  27. $klucz = $aIndex; // ustawiam nowy element tablicy
  28. }
  29. }
  30.  
  31. echo "<a href=' {$tablicaLinkow[ $klucz ]} '> Link </a>"; // generuje link
  32.  
  33. ?>


Tablice wykorzystywaną w przykładzie możesz utworzyć poleceniem:
  1. CREATE TABLE tabelaCzas( lastTime int NOT NULL, lastIndex int NOT NULL);
playdewu
Dziękuję wszystkim za pomoc wink.gif Jeszcze jedno pytanko, w prawdzie nie związane z tematem ale nowego zakładać nie ma sensu, bo pytanie jest banalne.
Mam sobie taki link:
  1. <a href="" id="loading-link" TARGET="_blank">
który po kliknięciu otwiera nową kartę i przenosi nas do niej. Chciałbym żeby po kliknięciu w link otwierała się ta strona w nowej karcie, ale byśmy nadal zostawali w tej pierwotnej (tak jak jest po kliknięciu kółkiem myszy w odnośnik), czego użyć? smile.gif
Michael2318
Kod
<a href="http://onet.pl" target="_blank">Odnośnik</a>


o to chodziło?
by_ikar
Chodzi mu o otwarcie nowej strony w tle (jak się kliknie rolką myszki taki sam efekt jest). Niestety za pomocą html tego nie zrobisz i musiałbyś użyć do tego java script: http://jsfiddle.net/3ZmvS/5/ coś takiego na szybko znalazłem co symuluje użycie właśnie rolki do otwarcia linku w tle.
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.