konto usunięte

Temat: opoźnianie wpisu do bazy danych

mam bardoz prosty skrypt, ktory pobiera dane z formularza i wrzuca mi wartosci do tabeli bazy danych:

<?php
tytul = mysql_escape_string($_POST['tytul']);
$data = mysql_escape_string($_POST['data']);
$nazwisko = mysql_escape_string($_POST['nazwisko']);

if ((isset($_POST["ukryta"])) && ($_POST["ukryta"] == "form1")) {
$insertSQL = sprintf("INSERT INTO tabela (tytul, data, nazwisko) VALUES ('{$tytul}', '{$data}','{$nazwisko}')");


$Result1 = mysql_query($insertSQL) or die(mysql_error());
}
?>

Chciałbym celowo opoźnic umieszczenie danych tabeli o np 60 min. Czyli po wpisaniu danych do formularza i wcisnieciu SUBMIT, dane nie beda widoczne w tabeli np przez jeszcze jakis okres
W jaki sposób mozna cos takiego zrobic?
Katarzyna B.

Katarzyna B. Oracle DBA

Temat: opoźnianie wpisu do bazy danych

Dawid Karel:
Chciałbym celowo opoźnic umieszczenie danych tabeli o np 60 min. Czyli po wpisaniu danych do formularza i wcisnieciu SUBMIT, dane nie beda widoczne w tabeli np przez jeszcze jakis okres
W jaki sposób mozna cos takiego zrobic?

Mozesz je wrzucac do tymczasowej tabeli, z data wstawienia i co jakis czas uruchamiac skrypt przenoszacy dane starsze niz godzina do tabeli docelowej, albo dorzucic w tabeli docelowej kolumne, np 'data_wstawienia' i przy wyswietlaniu brac zawsze rekordy w ktorych data_wstawienia nastapila pozniej niz godzine temu.
Maciej Kuś

Maciej Kuś właściciel, ibex.pl

Temat: opoźnianie wpisu do bazy danych

Albo dodać pole "data publikacji".

ps.
nazwa pola: "data ważności" będzie chyba bardziej odpowiednia - wszystko zależy jakie jest zastosowanie tych danych...Maciej Kuś edytował(a) ten post dnia 11.04.08 o godzinie 16:05

konto usunięte

Temat: opoźnianie wpisu do bazy danych

Katarzyna Bielecka:
Dawid Karel:
Chciałbym celowo opoźnic umieszczenie danych tabeli o np 60 min. Czyli po wpisaniu danych do formularza i wcisnieciu SUBMIT, dane nie beda widoczne w tabeli np przez jeszcze jakis okres
W jaki sposób mozna cos takiego zrobic?

Mozesz je wrzucac do tymczasowej tabeli, z data wstawienia i co jakis czas uruchamiac skrypt przenoszacy dane starsze niz godzina do tabeli docelowej, albo dorzucic w tabeli docelowej kolumne, np 'data_wstawienia' i przy wyswietlaniu brac zawsze rekordy w ktorych data_wstawienia nastapila pozniej niz godzine temu.

Dziekuje bardzo za sugestie. Mysle ze ta rozwiazanie z dodatkowa kolumna jest latwiejsze. Tak myslalem zeby jeszcze ewentualnie opoznić skrypt np sleep (3600) (ustawiajac odpowiednio set_time_limit). Ale pokazuje mi sie klepsydra przez caly czas trwania skryptu. Moze jest jakis jaki sposob, zeby wygladalo ze skrypt sie wykonal a nie wisi. (tak by bylo najlatwiej, chociaz jak sie nie uda, to doloze kolumne).
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: opoźnianie wpisu do bazy danych

Można..

<?php
header('Location: inny_adres.html');
sleep(3600);
// tutaj Twój kod
?>

W teorii będzie działać jak chcesz, a przeglądarka zostanie przekierowana.

Można też próbować odpalać exec() albo czymś podobnym inny skrypt.
Oczywiście trzeba pamiętać o ustawieniu maksymalnego czasu wykonywania dla skryptu - musi być większy niż czas oczekiwania!

Oba rozwiązania przedstawione tutaj przeze mnie mają jednak tą wadę że system będzie obciążony istniejącymi procesami które nic nie robią.. Przy dużej ilości requestów to ma znaczenie, a nawet przy małej też lepiej zrobić tą dodatkową kolumnę - zawsze będziesz mógł dane usunąć zanim będą widoczne dla użytkownika :-)

Dodatkowo (jeśli nie chcesz za bardzo modyfikować skryptów wyświetlających dane) możesz:
1. Stworzyć sobie widok, który wybierze tylko aktualne wpisy (te co mają odpowiednią datę w kolumnie "data_wstawienia").
2. Stworzyć obok identyczną tabelę z danymi, z tym że skryptem uruchamianym z crontaba przekopiowujesz odpowiednie dane do Twojej produkcyjnej tabeli.

konto usunięte

Temat: opoźnianie wpisu do bazy danych

Katarzyna Bielecka:
Dawid Karel:
Chciałbym celowo opoźnic umieszczenie danych tabeli o np 60 min. Czyli po wpisaniu danych do formularza i wcisnieciu SUBMIT, dane nie beda widoczne w tabeli np przez jeszcze jakis okres
W jaki sposób mozna cos takiego zrobic?

Mozesz je wrzucac do tymczasowej tabeli, z data wstawienia i co jakis czas uruchamiac skrypt przenoszacy dane starsze niz godzina do tabeli docelowej, albo dorzucic w tabeli docelowej kolumne, np 'data_wstawienia' i przy wyswietlaniu brac zawsze rekordy w ktorych data_wstawienia nastapila pozniej niz godzine temu.

Hmm... proponowałbym dodać kolumnę z typem wyliczeniowym oraz zapoznanie się z końcową częscią artykułu http://dev.mysql.com/tech-resources/articles/event-fea...

Swoją drogą nie wiem czy uda ci się założyć taki Event za pomocą API `mysql` w phpie, proponowałbym przerzucenie się na `mysqli`, zainstalowanie mySQL Tools i dodanie transakcji ;) bo z tego co widzę, to ich nie przewidujesz.

Pozdrawiam
Rafał.Rafał Wardas edytował(a) ten post dnia 11.04.08 o godzinie 19:06

konto usunięte

Temat: opoźnianie wpisu do bazy danych

zrób może cacheowanie i raz na 60 minut rób recache strony głównej. Ewentualnie tak jak powiedział poprzednik, dodaj date publikacji.

Albo inaczej, data w formacie UNIXTIME i coś takiego:

if (time() >= $data_dodania + 3600)
{
// kod php
}
----------------------------
$nazwisko = mysql_escape_string($_POST['nazwisko']);
czy nie lepiej tak:
$nazwisko = mysql_real_escape_string($_POST['nazwisko']);
----------------------------
*Niekiedy* warto używać funkcji extract(); np do "rozpakowywania" zmiennej $_POST.Mateusz Sokoła edytował(a) ten post dnia 11.04.08 o godzinie 20:26
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: opoźnianie wpisu do bazy danych

Mateusz Sokoła:
zrób może cacheowanie i raz na 60 minut rób recache strony głównej. Ewentualnie tak jak powiedział poprzednik, dodaj date publikacji.

Albo inaczej, data w formacie UNIXTIME i coś takiego:
....

Przecież bazy danych mają swoje funkcje do zarządzania takimi danymi, nie trzeba babrać się w timestampy unixowe ;-))

Następna dyskusja:

Forum Bazy Danych




Wyślij zaproszenie do