Καταχώρηση με ... ημερομηνία λήξης

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 31 Ιαν 2005 12:38

Θέλω να φτιάξω ένα script όπου μέσω μιας φόρμας να καταχωρώ σε MySQL εκτός των άλλων πεδίων, την ημερομηνία πέρα από την οποία η καταχώρηση αυτή δεν θα εμφανίζεται ή θα διαγράφεται από τη βάση.
Π.χ. η Φόρμα θα έχει τα πεδία: ΟΝΟΜΑ, ΚΕΙΜΕΝΟ, ΗΜΕΡΟΜΗΝΙΑ ΛΗΞΗΣ
Φαντάζομαι ότι με κάποιο τρόπο στη Mysql θα καταχωρείται αυτόματα η ημερομηνία εγγραφής και η PHP θα συγκρίνει την ημερομηνία αυτή με την ημερομηνία λήξης και θα εμφανίζει ή όχι το κείμενο.
Όμως με ποια μορφή θα εισάγει ο χρήστης την ημερ. λήξης? Πώς θα αποθηκεύεται στην MySQL και πώς θα συγκρίνεται με την ημερομηνία καταχώρησης????

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Cha0s » 31 Ιαν 2005 12:59

Μπορείς απλά στην φόρμα να βάλεις ο χρήστης να δείνει σε 3 πεδία την ημερομηνία με τον τρόπο του
Μέρα:
Μήνας:
Χρόνος:

Μετά με μία user defined function μπορείς να πάρεις αυτά τα 3 στοιχεία και να τα μετατρέψεις σε ένα timestamp.


Αργότερα στον έλεγχο να βάζεις να συγκρίνεις το σημερινό timestamp με το timestamp στην βάση.
Αν είναι μεγαλύτερο ή ίσο τότε να μην δείχνει το record καθώς θα είναι expired.

Ο λόγος που προτείνω να μπουν 3 πεδία και όχι ένα με μία συγκεκριμένη μορφοποίηση της ημερομηνίας (πχ 31-03-2005) είναι για την προστασία του συστήματος καθώς ο user μπορεί έυκολα να κάνει λάθος κατά την εισαγωγή.
Φυσικά λύνεται με πολλαπλούς ελέγχους αυτό αλλά πιστέυω είναι πιο βολικό να έχεις 3 πεδία με 2-3 ελέγχους παρά 1 με πολλούς ελέγχους.

Προσωπικά ότι έχει να κάνει με ημερομηνίες δουλέυω μόνο με timestamps καθώς είναι αριθμοί απλοί και μπορείς να κάνεις ότι σύγκριση θες πολύ έυκολα χωρίς να μπλέκεις.

Λίγα λόγια για τα timestamps:

Το timestamp πρόκειται για δευτερόλεπτα που μετριούνται από το λεγόμενο Unix Epoch Time το οποίο ξεκινάει από την πρώτη Ιανουαρίου 1970 ώρα 00:00:00.

Επομένως έχοντας σαν σημείο αναφοράς την ημερομηνία αυτή και μετατρέποντας τα πάντα σε δευτερόλεπτα ξεκινώντας να μετράνε από τότε μπορείς να κάνεις ότι σε βολέυει πολύ πιο έυκολα από το να κάνεις πράξεις με μήνες, χρόνια, μέρες που μπερδέυει πολύ.

Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 31 Ιαν 2005 13:38

Έψαξα λίγο στο google και είδα ότι γίνεται με το mktime μάλλον αυτό που λες. Βρήκα ένα τρόπο για να μετατρέψω την τρέχουσα ημερομηνία σε timestamp:

Κώδικας: Επιλογή όλων

$hour=date('H'); 
$min=date('i'); 
$sec=date('s'); 
$month=date('n'); 
$day=date('d'); 
$year=date('Y'); 
$current_stamp=mktime ($hour,$min,$sec,$month,$day,$year); 
Για να εισάγει ο χρήστης την expiration date λες να φτιάξω μια φόρμα με dropdown menus όπου να επιλέγει μέρα,μήνα και χρόνο και να τα αποθηκεύω σε νέες μεταβλητές πχ $expire_day, $expire_month, $expire_year?
Aν ναι, πώς θα συντάξω την εντολή mktime εφόσον δεν θα έχω και τα αντίστοιχα $expire_sec,$expire_min, $expire_hour?

(Eλπίζω να μη σε μπέρδεψα...)

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Cha0s » 31 Ιαν 2005 13:47

elavd έγραψε: Για να εισάγει ο χρήστης την expiration date λες να φτιάξω μια φόρμα με dropdown menus όπου να επιλέγει μέρα,μήνα και χρόνο και να τα αποθηκεύω σε νέες μεταβλητές πχ $expire_day, $expire_month, $expire_year?
Σωστά.

Μπορείς είτε με dropdown menu (πιο ασφαλές οπότε δεν γράφει ότι του κατέβει του χρήστη) ή απλά με πεδία που θα γράφει αυτός την ημερομηνία.
Το ίδιο πράγμα είναι πρακτικά.
elavd έγραψε:Aν ναι, πώς θα συντάξω την εντολή mktime εφόσον δεν θα έχω και τα αντίστοιχα $expire_sec,$expire_min, $expire_hour?

Κώδικας: Επιλογή όλων

$timestamp = mktime(0, 0, 0, $expire_month, $expire_day, $expire_year));
Με αυτόν τον τρόπο σου δημιουργεί ένα timestamp που αντιστοιχεί στην ημερομηνία που έδωσες στις μεταβλητές και ώρα 00:00 (δηλαδή 12 το βράδυ με το που αλλάξει η μέρα.)

Μπορείς να δώσεις άλλα νούμερα αντί για μηδέν και να ισχύει το expiration από άλλη ώρα της ημέρας.

Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 31 Ιαν 2005 13:49

Thanx Cha0s ;)
Θα το δοκιμάσω και αν έχω πρόβλημα ... τα ξαναλέμε!

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Cha0s » 31 Ιαν 2005 13:50

:)

Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 01 Φεβ 2005 13:41

Cha0s ξέρεις πώς μπορώ ένα UNIX timestamp να το μετατρέψω σε date μέσω PHP;
Εικόνα

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Rapid-eraser » 01 Φεβ 2005 14:59

date("formarisma",epochtime);
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Cha0s » 01 Φεβ 2005 18:35

Σωστά!

Στην date() αν δώσεις δέυτερο arguement το timestamp σου επιστρέφει την ημερομηνία βάση του timestamp και όχι του σήμερα.

Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 03 Φεβ 2005 13:14

Αφού ξεπέρασα και το πρόβλημα με το timestamp, έχω ένα καινούριο :D:
Θέλω όταν ο χρήστης επιλέξει να διαγράψει μια καταχώρηση (ουσιαστικά ένα row όπου η συγκεκριμένη καταχώρηση έχει ένα news_id), η καταχώρηση (row) αυτή πριν σβηστεί από τον πίνακα να αντιγράφεται σε έναν άλλο πίνακα (πανομοιότυπο με τον πρώτο) ο οποίος λέγεται πχ deleted, για λόγους προστασίας και backup.
Επιπλέον, θα ήθελα, μόλις διαγράφει κάποιος μια καταχώρηση, να δέχομαι ένα mail που να λέει το news_id της και το ΙP αυτού που τη διέγραψε.
Δύσκολο? :lol:

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Cha0s » 03 Φεβ 2005 13:18

Αντιθέτως πολύ έυκολο :)

Απλά πριν το Query που κάνεις το DELETE από την βάση βάζεις ένα SELECT και τραβάς τα DATA από το συγκεκριμένο Row.

Μετά κάνεις ένα insert στον πίνακα deleted και εισάγεις τα στοιχεία που έχεις πάρει από το Select.

Μετά με την mail() στέλνεις ένα mail σε σένα με ότι στοιχεία θες μέσα.

Για να πάρεις την IP αυτού που έκανε την ενέργεια απλά χρησιμοποιείς το $_SERVER["REMOTE_ADDR"] για να σου γυρίσει την IP και το $_SERVER["REMOTE_HOST"] για να σου γυρίσει το hostname.


Μετά από όλα αυτά απλά κάνεις το Delete και είσαι έτοιμος :D

Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 03 Φεβ 2005 13:25

Ρε συ Cha0s ούτε σε chat να μιλούσαμε.... Τι ταχύτητα είναι αυτή! :D

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Rapid-eraser » 03 Φεβ 2005 13:30

to allo onoma tou freestuff eivai fast-stuf FS kai afto blepeis :P
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από Cha0s » 03 Φεβ 2005 13:47

elavd έγραψε:Ρε συ Cha0s ούτε σε chat να μιλούσαμε.... Τι ταχύτητα είναι αυτή! :D
Εδώ κάνουμε δουλειά δεν παίζουμε :kaloe: :kaloe: :kaloe: :kaloe:

χεχεχεχεχεχεχε

Άβαταρ μέλους
elavd
Δημοσιεύσεις: 323
Εγγραφή: 16 Σεπ 2004 00:04
Τοποθεσία: Ιωάννινα

Καταχώρηση με ... ημερομηνία λήξης

Δημοσίευση από elavd » 03 Φεβ 2005 13:52

Cha0s έγραψε:Για να πάρεις την IP αυτού που έκανε την ενέργεια απλά χρησιμοποιείς το $_SERVER["REMOTE_ADDR"] για να σου γυρίσει την IP και το $_SERVER["REMOTE_HOST"] για να σου γυρίσει το hostname.
Γράφω

Κώδικας: Επιλογή όλων

$host = getenv ( 'REMOTE_HOST' ); 
echo $host;
και δεν μου επιστρέφει τίποτα. Την ΙΡ αντιθέτως μπορώ να τη δω. Μήπως πρέπει να ρυθμίσω κάτι στην PHP προηγουμένως;

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες