delete από πίνακα sql όταν κλείνει ο browser

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

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

Απάντηση
abeautifulmind
Δημοσιεύσεις: 319
Εγγραφή: 02 Μάιος 2010 18:04

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από abeautifulmind » 16 Ιαν 2011 16:16

Καλησπέρα σε όλους.

Όταν ένας χρήστης κάνει login στην σελίδα μου ξεκινάει ένα session με το username του το οποίο το χρησιμοποιώ και το αποθηκεύω σε έναν πίνακα users_online για να βλέπω ποιος είναι on line.

Όταν οχρήστης πατήσει logout όλα καλά τρέχει ένα php αρχείο διαγράφει το session από τον πίνακα users_online και έτσι δεν φαίνεται ο χρήστης πλέον on line.
Το πρόβλημμα είναι αν δεν πατήσει logout αλλά απλά κλείσει τον browser.

Ξέρει κάποιος με πιό τρόπο μπορώ να σβήσω μία καταχώρηση από έναν πίνακα sql όταν κλείνει ο browser?

Η να γίνεται ένας έλεγχος άν έχει κλέισει ο browser και να τρέχει αυτόματα το logout.php?

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από Apostolis_38 » 16 Ιαν 2011 20:31

Επειδή έτυχε και ασχολήθηκα με το συγκεκριμένο θέμα τις προηγούμενες μέρες,
υπάρχουν κάποια javascript που μπορούν να "πιάσουν" το κλείσιμο ενός tab αλλά με όχι 100% επιτυχία.
Δυστυχώς για το κλείσιμο του browser με το X ή και από κλείσιμο/restart του υπολογιστή δεν μπορεί να γίνει κάτι.
Εγώ δεν μπόρεσα να βρω κάτι.

Οποτε πιθανώς να πρέπει να ψάξεις με άλλο τρόπο το αν πρέπει να γίνει και πότε αυτό που θέλεις.
π.χ. ισως να μπορεί να μπεί ένας "μετρητής" που βλέπει αν κάποιο session είναι inactive για χ χρονικό διάστημα και αν ναι να κάνει το delete που θέλεις.
Αυτό βέβαια είναι μια ιδέα. Δεν ξέρω αν σου κάνει.

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από Pavel » 16 Ιαν 2011 20:43

Αυτό λύνεται ορίζοντας ένα timestamp στον πίνακα users_onlines και κάθε φορά πριν υπολογίσεις πόσοι χρήστες είναι online, θα σβήνεις εκείνους που δεν έχουν κάποιο activity τα τελευταία πχ 5 λεπτά.

Μην προσπαθείς άδικα να εντοπίσεις το κλείσιμο του browser. Είναι υπερβολικά πολλοί οι browsers (ακόμη και αν βρεις κάτι αποτελεσματικό) και άδικα θα χάσεις τον χρόνο σου.
Εσύ είσαι τρελός.

abeautifulmind
Δημοσιεύσεις: 319
Εγγραφή: 02 Μάιος 2010 18:04

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από abeautifulmind » 18 Ιαν 2011 18:23

Pavel θα μπορούσες να αναλύσεις το timestamp σορρυ αλλά δεν το έχω δει καθόλου θα με βοηθούσες πολύ.

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από Pavel » 18 Ιαν 2011 22:33

Θα έχεις ένα πεδίο στον πίνακα users_online με όνομα last_activity. Κάθε φορά που ο χρήστης θα πηγαίνει από τη μια σελίδα στην άλλη, θα κάνεις update αυτό το πεδίο με την τρέχουσα ώρα.

Όταν θα φτάνει η ώρα να υπολογίσεις τους χρήστες που είναι online, θα εκτελείς ένα ερώτημα στην βάση και θα επιστρέφεις μόνο τις εγγραφές οι οποίες το πεδίο last_activity έχει ενημερωθεί τα τελευταία 5 λεπτά. Έτσι, θα βλέπεις τους online χρήστες σου.

Αυτό σημαίνει, πως αν κάποιος δεν κάνει τίποτα για 5 λεπτά, πχ διαβάζει ένα άρθρο στην σελίδα σου, δεν θα τον μετρήσει. Θα πρέπει να κάνει κάπου κλικ για να τον δεις.

Αυτό χρησιμοποιούν οι περισσότερες εφαρμογές. Αν μεταβείς στην σελίδα http://www.freestuff.gr/forums/viewonline.php θα δεις κάτω κάτω αναφέρει το εξής:

δεδομένα μελών από τα τελευταία πέντε λεπτά

Είναι ακριβώς αυτό που σου περιέγραψα.
Εσύ είσαι τρελός.

abeautifulmind
Δημοσιεύσεις: 319
Εγγραφή: 02 Μάιος 2010 18:04

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από abeautifulmind » 22 Ιαν 2011 11:37

Pavel ευχαριστώ πολύ.
Έχω φτιάξει το πεδίο που είπες κ.τ.λ. και έφτασα στο σημείο για το επερώτημα του last activity.
Έχω αυτόν τον κώδικα
$show_user_online="SELECT user_online from users_online where user_online!='$_SESSION[username]' order by user_online";

$show_user_online2=mysql_query($show_user_online) or die("Could not get users_online");

while($show_user_online3=mysql_fetch_array($show_user_online2))
{
$z1=1;
$a1['z1']=substr("$show_user_online3[user_online]",0,23);
$z1='z1'+1;
print "$a1[z1]";
θα κάνω αλλαγή το order by user_online και θα βάλω εκεί τον έλεγχο για το last_activity δηλαδή order by last_activity? και π.χ. if last_activity<=(κατά 5 λεπτά που δεν ξέρω πως συντάσεται στην php) $time όπου $time ο τρέχων χρόνος?
To update του time πως θα γίνεται όμως στο αντίστοιχο username?
Και ένα τελευταίο στην σελίδα έχω και jquery π.χ. private chat όπου όταν κάνει ο χρήστης δεν κάνει refresh όλη η σελίδα μου εκεί πως το ελέγχω θα τον δείχνει offline?

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από Pavel » 22 Ιαν 2011 12:39

Υποθέτω πως το πεδίο last_activity είναι τύπου DATETIME και υπάρχει ένα πεδίο username που αποθηκεύεται το username του logged in χρήστη.

Θα το ανανεώνεις έτσι

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

$sql = "UPDATE user_online SET last_activity = NOW&#40;&#41; WHERE username = '$username'";
Τώρα, για να πάρεις τους online υπάρχουν στην ουσία 2 τρόποι.

1. Με την εικασία (δεν ξέρω ακριβώς πως το έχεις φτιάξει) πως ο πίνακας user_online κρατάει μόνο τους ενεργούς χρήστες και δεν αποθηκεύεις καμία άλλη πληροφορία, μπορείς να σβήνεις τους ανενεργούς.

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

$time = strtotime&#40;'-5 minutes', time&#40;&#41;&#41;;
$date = date&#40;'Y-m-d H&#58;i&#58;s', $time&#41;;
$sql = "DELETE FROM user_online WHERE last_activity < '$date'";
Έτσι, όταν εκτελέσεις το

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

$sql = "SELECT * FROM user_online";
θα πάρεις μόνο τους ενεργούς χρήστες.

2. Από την άλλη όμως, αν δεν θέλεις να σβήνεις εγγραφές από τον πίνακα θα κάνεις το εξής.

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

$time = strtotime&#40;'-5 minutes', time&#40;&#41;&#41;;
$date = date&#40;'Y-m-d H&#58;i&#58;s', $time&#41;;
$sql = "SELECT * FROM user_online WHERE last_activity >= '$date'";
Με αυτό τον τρόπο, θα πάρεις ξανά μόνο τους ενεργούς χρήστες.

Και στις δύο περιπτώσεις, ο αριθμός των χρηστών δίνεται από την συνάρτηση mysql_num_rows().

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

abeautifulmind
Δημοσιεύσεις: 319
Εγγραφή: 02 Μάιος 2010 18:04

delete από πίνακα sql όταν κλείνει ο browser

Δημοσίευση από abeautifulmind » 23 Ιαν 2011 15:26

Pavel σε ευχαριστώ πολύ.
Στο τελευταίο ενοώ ότι αν δεν γίνει με κάποιο τρόπο refresh η σελίδα δεν θα ανανεώσει το last-activity σωστά?
Να σε ρωτήσω κάτι άλλο μήπως γνωρίζεις?

Έχω έναν πίνακα shoutbox όπου τον χρησιμοπιοώ για puplic chat.
μήπως ξέρεις πως μπορώ από αυτόν τον πίνακα πως να παίρνω μόνο τα μηνύματα που στέλνει ο συνδεμένος χρήστης και τα μηνύματα από αυτόν που επιλέγει (online χρήστης) για private chat και να εμφανίζει μόνο αυτά σε αυτούς τους 2 σε ένα νέο παράθυρο που ανοίγω?

Απάντηση

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

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

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