Losowość danych z tabeli, lecz tylko co daną ilość dni

0

Witam. W jaki sposób mogę zrobić, aby wylosowane produkty z tabeli, były przez 3 dni stałe, a na czwarty dzień zmieniały się na inne, także stałe na następne 3 dni ?

Oto kod:

include("config.php");
//promocja 2 w cenie jednego
function promo()
{
	$promocja = mysql_query("SELECT * FROM kategoria WHERE id IN(55) LIMIT 1")
	or die("Błąd");

		while ($r = mysql_fetch_assoc($promocja))
		{
			echo "<td>".$r['produkt']. "+" .$r['produkt']."</br>";
			exit();
		}
	
}return promo(); 

Pytanie drugie. W jaki sposób mogę tę funkcję wywołać bezpośrednio na innej stronie.php (nie jako odnośnik) funkcja jest na stronie funkcja1.php a chcę jej wynik wywołać na stronie cos.php.

0

Tak na prawdę nie mogą być "losowe" muszą być bardzo konkretne, bo takie same przez całe 3 dni. Ty chcesz wyświetlać te same wartości przez jakiś czas, a potem je zmienić.

Co do tego "przekazywania" informacji z jednego skryptu do drugiego to najlepiej jak jeden skrypt zapisałby jakieś informacje w jakimś miejscu (plik, baza danych) a drugi to odczytał.

0
TomRiddle napisał(a):

Tak na prawdę nie mogą być "losowe" muszą być bardzo konkretne, bo takie same przez całe 3 dni. Ty chcesz wyświetlać te same wartości przez jakiś czas, a potem je zmienić.

Co do tego "przekazywania" informacji z jednego skryptu do drugiego to najlepiej jak jeden skrypt zapisałby jakieś informacje w jakimś miejscu (plik, baza danych) a drugi to odczytał.

Chciałbym aby były to losowe przedmioty, zapisywane na 3 dni i po 3 dniach zmieniane na inny losowy przedmiot z tej samej tabeli. Chcę stworzyć automatyczną funkcję, która będzie robiła promocje "dwa w cenie jednej".

Można prosić jakiś przykład jak to wykonać ?

0

Przecież już Ci powiedziałem. Ten efekt który chcesz uzyskać, to nie losowanie. Losowanie dawałoby inny element przy każdym wejściu na stronie, a Ty chcesz ten sam element przez jakiś czas. Więc, musisz sobie zapisać ten jeden element w jakimś pliku albo w bazie danych, odczytywać go przy każdym odwiedzeniu strony, i co jakiś czas, z innego miejsca (innej strony, np panelu admina, albo z palca) zmienić ten element. Jeżeli chcesz spytać o wykonanie to zadaj dokładniejsze pytanie.

PS: Korzystanie z funkcji mysql_ ogólnie jest słabym pomysłem ale na początek może być. Tylko błagam, zameń
or die("Błąd"); na or die(mysql_error()); Przynajmniej program Ci powie co jest błędem zamiast słowa Błąd.

0

Powinno się użyć do tego biblioteki do logowania osobnej, ale jak nie chcesz sobie mieszać to wystarczy ten kod:

set_exception_handler(function ($exception) {
    $error = date("Y-m-d H:i:s") . ' ' . $exception->getMessage();
    file_put_contents('errors.txt', $error, FILE_APPEND | LOCK_EX);
});

I wtedy zamiast

$promocja = mysql_query("SELECT * FROM kategoria WHERE id IN(55) LIMIT 1")
    or die("Błąd");

zrób

$promocja = mysql_query("SELECT * FROM kategoria WHERE id IN(55) LIMIT 1")
    or throw new Exception(mysql_error());

Chodzi o to że die() wypisuje jakąś wiadomość i przerywa skrypt. Aa my nie chcemy wypisać użytkownikowi błędu tylko go zalogować. Więc rzucamy wyjątek throw new Exception (tym samym przerywając wykonywanie skryptu, podobnie jak die) ale nic mu nie wypiszemy. Zamiast tego dodajemy własną obsługę błędów (set_exception_handler), i robimy tak żeby wiadomość oraz data każdego exceptiona się dodała do pliku 'errors.txt`.

0

Jest jednak jeden problem. Po wpisaniu i analizie kodu, strona nie chce się odpalić. Dokładnie po wpisaniu

or throw new Exception(mysql_error()); 
//promocja 2 w cenie jednego
set_exception_handler(function ($exception) {
    $error = date("Y-m-d H:i:s") . ' ' . $exception->getMessage();
    file_put_contents('errors.txt', $error, FILE_APPEND | LOCK_EX);
});



function promo()
{
    $promocja = mysql_query("SELECT * FROM kategoria WHERE id IN(55) LIMIT 1")
    or throw new Exception(mysql_error());
 
        while ($r = mysql_fetch_assoc($promocja))
        {
            echo "<td>".$r['produkt']. "+" .$r['produkt']."</br>";
            exit();
        }
 
}return promo(); 
?> 
0

Przepraszam! To moja wina, źle Ci powiedziałem. Mój brak wiedzy :/ Nie wiedziałem że po or nie można zrobić throw :C Teraz już wiem, jeżeli koniecznie chcesz skorzystać z mojego przykładu kod niżej będzie działał.

Zamiast

$promocja = mysql_query("SELECT * FROM kategoria WHERE id IN(55) LIMIT 1")
    or throw new Exception(mysql_error());

Zrób

function wyjatek($arg) {
    throw new Exception($arg);
}

$promocja = mysql_query("SELECT * FROM kategoria WHERE id IN(55) LIMIT 1") or wyjatek(mysql_error());

1 użytkowników online, w tym zalogowanych: 0, gości: 1