Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    77

    redirect giornaliero in base a IP

    Vorrei creare un breve script che faccia un redirect in una pagina solamente alla prima visita del giorno del visitatore.
    Teoricamente dovrebbe funzionare così, ma non riesco a tradurlo in php correttamente..

    mi connetto al db
    dove il tempo è maggiore di 24h -> cancello
    prendo l'ip del visitatore
    se il tempo è nullo -> redirect

    Grazie per l'aiuto

  2. #2
    Beh, puoi fare una tabella che salva l'ip dell'utente e il timestamp in cui si connette.
    Dopodiché controlli se l'ip esiste, se no lo crei, assegnandogli il timestamp di quel momento.
    Se esiste, calcoli il timestamp di quel momento meno il timestamp salvato con quell'ip e se il valore è inferiore a 86400 allora non gli fai fare il redirect, altrimenti glielo fai fare e aggiorni il campo timestamp di quell'ip con il timestamp di quel momento.
    Ce l'ho fatta! - ItalianPixel -

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    77
    E come mai tutto questo non mi funziona all'interno di un forum phpbb3?

    Già solo un banale

    <?php
    echo time();
    ?>

    non mi visualizza nulla...

  4. #4
    phpbb3 non lo conosco e attualmente non ci tengo.
    Voglio scrivere tutto io!! Tutto a mano!! Blocco note!! E andiamo...

    Vado a letto.
    Se hai altre domande falle! Ma ti rispondo domani.
    Ce l'ho fatta! - ItalianPixel -

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    77
    Non riesco ad uscirne con i codici...
    Qualcuno mi può aiutare?

    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    77
    Codice PHP:
    $connessione mysql_connect('HOST','UTENTE','PASS')
    or die(
    "Errore connesione");
    $selezione mysql_select_db('NOMEDAT',$connesione)
    or die(
    "Database non selezionato");

    $ip $_SERVER["REMOTE_ADDR"];
    $sel $db->sql_fetchrow($db->sql_query("SELECT ip FROM cronologia WHERE ip='$ip'  "));
    if (
    $tempo-time()>=84600) {

    $sel $db->sql_query("DELETE FROM cronologia WHERE time<$tempo ");
    }
    else {
    if (!
    $sel) {
    $tempo Time();
    $res=$db->sql_query("INSERT INTO cronologia VALUES ('$ip', '$tempo')");
    header ('location: URL');
    }

    Può andare? Come deve essere la tabella su mysql? I campi time e ip che caratteristiche devono avere?

    Grazie

  7. #7
    Codice PHP:
    $connessione mysql_connect('HOST','UTENTE','PASS') or die("Errore connesione");
    //attento a ciò che scrivi! La variabile connessione non ha una sola s! Non te l'ho modificata così la vedi
    $selezione mysql_select_db('NOMEDAT',$connesione) or die("Database non selezionato");

    $tempo=time();
    $ip $_SERVER["REMOTE_ADDR"];
    //qui avevi messo seleziona IP, ma così non estrai la data. Metti un * e sei tranquillo, tanto hai 3 campi!
    $sel mysql_query("SELECT * FROM cronologia WHERE ip='$ip'  ") or die ("Errore nella query di selezione ip");
    $array=mysql_fetch_array($sel);
    if(
    $sel){
    if ((
    $tempo-$array['tempo'])>=84600) {
    //qui invece di cancellarlo, aggiornalo. Ti risparmi un passaggio.
    $sel =mysql_query("UPDATE cronologia SET tempo='$tempo' WHERE ip='$ip' ");
    header ('location: URL');
    }else{
    echo 
    "Hai raggiunto il limite massimo di redirect in un giorno.";
    }
    }else{
    $res=mysql_query("INSERT INTO cronologia VALUES ('$ip', '$tempo')");
    header ('location: latuapagina.php');

    Attento a quello che scrivi. Poi è meglio aggiornare il campo data dell'ip dell'utente che cancellarlo, no?
    Poi scritto così non ti "annulla" il blocco all'inizio della giornata ma dopo 24 ore.
    Cioè se ti colleghi alle 5, il giorno dopo potrai riutilizzare il redirect solo dalle 5 in poi, capito?
    Se vuoi utilizzare i giorni dimmelo.
    Ce l'ho fatta! - ItalianPixel -

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    77
    Originariamente inviato da portapipe
    Codice PHP:
    //attento a ciò che scrivi! La variabile connessione non ha una sola s! Non te l'ho modificata così la vedi
    $selezione mysql_select_db('NOMEDAT',$connesione) or die("Database non selezionato"); 
    ? non ho capito

    Non ci avevo pensato alla cosa delle 24 ore, effettivamente usare i giorni sarebbe meglio.

    come struttura questa andrebbe bene?
    codice:
    CREATE TABLE `cronologia` (
      `id` int(8) NOT NULL auto_increment,
      `ip` varchar(15) NOT NULL default '',
      `tempo` date NOT NULL default '0000000000',
       PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Grazie

  9. #9
    Intendo che se guardi hai scritto $connesione invece di $connessione.

    il campo tempo non è un campo data.
    Il timestamp lo puoi trattare come una stringa e convertirlo come data.
    E' molto elastico.
    Per i giorni te li estrai dal timestamp
    Codice PHP:
    $connessione mysql_connect('HOST','UTENTE','PASS') or die("Errore connesione"); 
    //attento a ciò che scrivi! La variabile connessione non ha una sola s! Non te l'ho modificata così la vedi 
    $selezione mysql_select_db('NOMEDAT',$connesione) or die("Database non selezionato"); 

    $tempo=date("d",time()); 
    $ip $_SERVER["REMOTE_ADDR"]; 
    //qui avevi messo seleziona IP, ma così non estrai la data. Metti un * e sei tranquillo, tanto hai 3 campi! 
    $sel mysql_query("SELECT * FROM cronologia WHERE ip='$ip'  ") or die ("Errore nella query di selezione ip"); 
    $array=mysql_fetch_array($sel); 
    if(
    $sel){ 
    if (
    $tempo!=date("d",$array['tempo'])) { 
    //qui invece di cancellarlo, aggiornalo. Ti risparmi un passaggio. 
    $sel =mysql_query("UPDATE cronologia SET tempo='$tempo' WHERE ip='$ip' "); 
    header ('location: URL'); 
    }else{ 
    echo 
    "Hai raggiunto il limite massimo di redirect in un giorno."

    }else{ 
    $res=mysql_query("INSERT INTO cronologia VALUES ('$ip', '$tempo')"); 
    header ('location: latuapagina.php'); 

    basta usare date("d",time()) e ti esce il giorno.
    Se fai la stessa cosa con il timestamp che ti recuperi dal database hai il giorno anche di quello.
    Poi controlli che NON sia uguale a ( != ) quella attuale.
    Se lo è allora scrive un messaggio a video.

    Così com'è però se un utente si collega il 2 gennaio e poi il 2 febbraio non avrà accesso, in quanto per la condizione è lo stesso giorno.
    Per ovviare basta che cambi i due date() aggiungendo la m dopo la d:
    date("md",time()) e date("md",$array['tempo']).
    Ce l'ho fatta! - ItalianPixel -

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    77
    L'ho testato in questo modo ma non funziona.. il redirect lo fa sempre e sul database non viene inserito nulla..
    Ho aggiunto anche l'anno alla data.

    Codice PHP:
    $connessione mysql_connect('host','nome','pass') or die("Errore connesione");
    $selezione mysql_select_db('datab',$connessione) or die("Database non selezionato");

    $tempo=date("amd",time());
    $ip $_SERVER["REMOTE_ADDR"];

    $sel mysql_query("SELECT * FROM cronologia WHERE ip='$ip'  ") or die ("Errore nella query di selezione ip");
    $array=mysql_fetch_array($sel);
    if(
    $sel){
    if (
    $tempo!=date("amd",$array['tempo'])) {

    $sel =mysql_query("UPDATE cronologia SET tempo='$tempo' WHERE ip='$ip' ");
    header ('location: pagina.php');
    }else{
    echo 
    "Hai raggiunto il limite massimo di redirect in un giorno.";
    }
    }else{
    $res=mysql_query("INSERT INTO cronologia VALUES ('$ip', '$tempo')");
    header ('location: pagina.php');

    codice:
    CREATE TABLE `cronologia` (
      `id` int(8) NOT NULL auto_increment,
      `ip` varchar(15) NOT NULL default '',
      `tempo` TIMESTAMP,
       PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.