Skocz do zawartości

Dziwne zachowanie skryptu


frogii1990

Rekomendowane odpowiedzi

Witam ! jestem posiadaczem serwisu www.failphoto.pl ( nie nie chodzi mi o reklame)

Mam problem mianowicie. Wszystko pięknie grało zdjęcia sie dodawały jak potrzeba (to dalej działa bez problemu)

ale zauwazyłem ze zaczynaja mi znikać wpisy z bazy danych seriami (robią się luki w numeracji) codziennie o tej samej porze.

Wcześniej tego problemu nie było i za nic nie mogę dojść co może być tego przyczyną.

jedynym kawałkiem kody jaki może mieć z tym coś wspólnego (tak mi sie wydaje) jest

$demoty_cron2 = mysql_query("SELECT * FROM demoty_2_demoty WHERE miejsce = 'p'");
$ile_demoty_cron2 = mysql_num_rows($demoty_cron2);
for ($i = 0; $i < $ile_demoty_cron2; $i++)
{
	$demot_cron2 = mysql_fetch_array($demoty_cron2);

	$id_cron2 = $demot_cron2['id'];

	$data1c = $demot_cron2['data'];
	$data2c = @date("Y-m-d",@time());

	$d1 = explode("-", $data1c);
	$y1 = $d1[0];
	$m1 = $d1[1];
	$d1 = $d1[2];

	$d2 = explode("-", $data2c);
	$y2 = $d2[0];
	$m2 = $d2[1];
	$d2 = $d2[2];

	$date1_set = @mktime(0,0,0, $m1, $d1, $y1);
	$date2_set = @mktime(0,0,0, $m2, $d2, $y2);

	$dni = round(($date2_set-$date1_set)/(60*60*24));

	if ($dni > $ustawienia['akcja_demoty_dni'])
	{
		if ($ustawienia['akcja_demoty'] == "tak")
		{
			mysql_query("UPDATE demoty_2_demoty SET miejsce = 'a' WHERE id = '$id_cron2'");
		}
		else
		{
			mysql_query("DELETE * FROM demoty_2_demoty WHERE id = '$id_cron2'");
		}
	}
}
ob_end_flush();
?>

w opcjach samego panelu jest możliwość usuwania zdjęc po określonym czasie lub przenoszenie ich do archiwum i ta opcja działa poprawnie i nie ma ona żadnego powiązania.

Prosze o pomoc. Jakieś "luźne" pomysły mogą okazać się bardzo pomocne.

Pozdrawiam !

Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdź w logach żądani GET czy nie ma takich które odwołują się do Twoich opcji edycji/kasowaia, bo już miale taki przypadek, ze userowi niknęły całe wpisy z powodu błędu oprogramowania - booty miały dostęp do części administracyjnej i przez zwykłe "chodzenie" po serwisie kasowały dane :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Przyjrzałem się dokładniej. Zobacz jeszcze w jakim formacie ci mysql zwraca datę. Jeśli nie będzie to np. rok - miesiąc - dzień to kicha i może wywalać, tak jak opisałeś.

PS. Nie wiem kto pisał ten skrypt ale strasznie nieekonomicznie jest to zrobione. Toż to można (i powinno) być zrobione jednym zapytaniem ... no może dwoma w zależności od tego, czy usuwać, czy archiwizować: jedno DELETE i jedno UPDATE

Odnośnik do komentarza
Udostępnij na innych stronach

może i głupio zabrzmi ale jak mam sprawdzić jak zwraca datę...

edit: zdjęcia wstawione są opisane jako np.

2011-01-26 00:39:01

więc teoretycznie jest poprawnie...

edit2:

$date1_set = @mktime(0,0,0, $m1, $d1, $y1);

$date2_set = @mktime(0,0,0, $m2, $d2, $y2);

to może mieć jakiś związek ?

jest mieśiąc dzien rok a jest zapisane w bazie jako rok miesiac dzien ?

edit kolejny:

jeżeli ktoś poświęcił by chwile podam na pw dane do bazy i ftp... zerknał by bo ja już rozkładam ręce

Odnośnik do komentarza
Udostępnij na innych stronach

$d1 = $d1[2]; - coś takiego 'zniszczy' tablicę d1 - to raczej nie powinno mieć wpływu w tym fragmencie ale niezręczne jest napisane

... i, nie wiem czy to może mieć znaczenie ale po eksplodzie $d1 nie będzie dniem lecz dniem i godziną "26 00:39:01" więc mktime może wariować

za $d1 = $d1[2]; daj jeszcze $d1=substr($d1,0,2)

a w ogóle: Czy ten kod jest w skrypcie dokładnie taki jak to podałeś? czy coś z niego wyciąłeś (z pętli for)?

Odnośnik do komentarza
Udostępnij na innych stronach

pełen skrypt:

<?php
ob_start();
if ($ustawienia['migracja_auto'] == "tak")
{
	$demoty_cron = mysql_query("SELECT * FROM demoty_2_demoty WHERE miejsce = 'p'");
	$ile_demoty_cron = mysql_num_rows($demoty_cron);

	for ($i = 0; $i < $ile_demoty_cron; $i++)
	{
		$demot_cron = mysql_fetch_array($demoty_cron);

		if ($demot_cron['ilosc_ocen'] >= $ustawienia['migracja_glosy_ile'])
		{
			$glosy_pozytywne = ($demot_cron['ocena']/$demot_cron['ilosc_ocen'])*100;
			if ($glosy_pozytywne >= $ustawienia['migracja_glosy_procent'])
			{
				$id_cron = $demot_cron['id'];

				mysql_query("UPDATE demoty_2_demoty SET miejsce = 'g' WHERE id = '$id'");
			}
		}
	}
}

$demoty_cron2 = mysql_query("SELECT * FROM demoty_2_demoty WHERE miejsce = 'p'");
$ile_demoty_cron2 = mysql_num_rows($demoty_cron2);
for ($i = 0; $i < $ile_demoty_cron2; $i++)
{
	$demot_cron2 = mysql_fetch_array($demoty_cron2);

	$id_cron2 = $demot_cron2['id'];

	$data1c = $demot_cron2['data'];
	$data2c = @date("Y-m-d",@time());

	$d1 = explode("-", $data1c);
	$y1 = $d1[0];
	$m1 = $d1[1];
	$d1 = $d1[2];

	$d2 = explode("-", $data2c);
	$y2 = $d2[0];
	$m2 = $d2[1];
	$d2 = $d2[2];

	$date1_set = @mktime(0,0,0, $m1, $d1, $y1);
	$date2_set = @mktime(0,0,0, $m2, $d2, $y2);

	$dni = round(($date2_set-$date1_set)/(60*60*24));

	if ($dni > $ustawienia['akcja_demoty_dni'])
	{
		if ($ustawienia['akcja_demoty'] == "tak")
		{
			mysql_query("UPDATE demoty_2_demoty SET miejsce = 'a' WHERE id = '$id_cron2'");
		}
		else
		{
			mysql_query("DELETE * FROM demoty_2_demoty WHERE id = '$id_cron2'");
		}
	}
}
ob_end_flush();
?>

co do daty itp całkiem możliwe naniose zmiany i będe obserwował

Odnośnik do komentarza
Udostępnij na innych stronach

Najlepiej to weź i wywal wszystko od demoty_cron2= ... do '}' przed ob_end_flush i zastąp to tym:

$whe="WHERE miejsce='p' AND TO_DAYS(NOW())-TO_DAYS(data) > ".$ustawienia['akcja_demoty_dni'];
if ($ustawienia['akcja_demoty'] == "tak")
$zda="UPDATE demoty_2_demoty SET miejsce = 'a' ".$whe;
else
  $zda="DELETE FROM demoty_2_demoty ".$whe;
mysql_query($zda);

Tylko przetestuj to sobie bo pisałem na szybko z głowy ... raczej powinno działać cacy ale odpowiedzialności nie biorę.

I, jeśli nie ma, dodaj index w tablicy na pole 'data'

Pierwszą część skryptu też można pewnie tak przerobić ale to już se zrób sam.

PS. Kur ... ludzie piszą skrypty tak jak ten tu, a potem płaczą, że im serwer pada

Odnośnik do komentarza
Udostępnij na innych stronach

Do obsługi daty należy stosować funkcje do tego celu przewidziane np:

data(); z PHP https://www.php.net/manual/en/ref.datetime.php

i

NOW(); w MySQL

W tabelach na datę pole typu DATETIME - https://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html

a nie takie "chore" rozwiązania związane z datą jak w tym kodzie.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

@Mion, bo ludzie sobie lubią życie utrudniać :). Dłuższe, bardziej skomplikowane, bardziej awaryjne za to mniej wydajne :P.

Później można sobie poszczękać zębami jaki ten hosting nieprofesjonalny bo się serwery zagotowywują, a przecież skrypt taki cacy.

Ten skrypt powinien być pokazywany ludziom pod hasłem "Jak nie wolno pisać programów"

Odnośnik do komentarza
Udostępnij na innych stronach

to znowu ja, moj skrypt i moje problemy.

Sprawa wygląda tak.

Zdjęcie po przenosinach z poczekalni na główna nie jest pierwsze, chyba że do poczekalni zostało dodane jako ostatnie.

Przykład

Główna

fot1

fot2

fot3

Poczekalnia

poc1

poc2

poc3

dodaje najpierw poc2

i główna wyglada tak:

poc2

fot1

fot2

fot3

potem dodaje poc3

i glowna zamiast

poc3

poc2

fot1

fot2

fot3

wyglada

poc2

poc3

fot1

fot2

fot3

jakieś luźne pomysły ?

Odnośnik do komentarza
Udostępnij na innych stronach

to znowu ja, moj skrypt i moje problemy.

jakieś luźne pomysły ?

Ale na co ?!

Należy stosować standardowe rozwiązania między innymi :

- numeracja rekordów z polem ID autoincrement;

- nadawanie dat dodania pole DATATIME;

- w zapytaniach SQL używanie klauzuli ORDER BY kolumna DESC / ASC , GROUP BY, DISTINCT itd...

TO SĄ podsatwy!!! Jeśli autor skryptu nie zna podstaw, nie potrafi ich wykorzystywać należy z niego jak najszybciej zrezygnować :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności