Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Modificare campo ad in un dato periodo

    Ciao ragazzi, ho questo problema, gestisco un sito ed ho inserito un spazio per gli sponsor,all'interno del database degli sponsor ho inserito due campi uno con la data di scadenza ed un'altro relativo all'attivazione, adesso per estrare i dati faccio così

    Codice PHP:
    <?php
    $ads_men_dx 
    mysql_query("SELECT * FROM box_ads_mendx WHERE attivo = 1 "); 
    while(
    $ads_riga mysql_fetch_array($ads_men_dx )) {
        
    $ads_codice=$ads_riga['codice'];


    echo 
    $ads_codice;
        
        
    }

    ?>
    solo che volevo che in automatico per dire al 30/12/2009 che è la data del campo scadenza il campo attivo da 1 passerebbe ha 0, ho pensato ad un if ma non so dove metterlo

    Ciao e grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    potesti far precedere alle tue SELECT un blocco che effettua un UPDATE ... attivo = 0 WHERE (datascadenza>=dataattuale)... tieni conto che questo verrebbe eseguito solo quando si esegue lo script (se per es. un banner ha scadenza 3 gennaio e nessuno visita il sito fino al 5 gennaio, l'aggiornamento verrebbe effettuato solo il 5)

  3. #3
    grazie mille provo e ti faccio sapere

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Io farei una bella funzione di controllo cosi' che la richiami ogni volta che deve caricare i banner

    Codice PHP:



    function bannerChecker($opts)
    {
        
    $q "select * from banners order by data_scadenza desc" ;
        
    // Carichiamo tutti i banner a partire da quelli con data di scadenza piu' alta
        
    $link connect(); // funzione di connessione al database 
        
    $ris mysql_query($q,$link) ;

        if( !
    $ris )
            return 
    false ;
        
    $now date(  "Y-m-d H:i:s" time() ) ;
        while( 
    $curr mysql_fetch_array($ris) )
        {
            
    // LE DATE in mysql se sono salvate di tipo datetime saranno in fomrato std unix YYYY-mm-dd HH:ii:ss e potrai fare controlli lessicografici 
            
            // Banner scaduto
            
    if(  $curr["data_scadenza"]> $now )
            {
                
    // update PER FAR SCADERE IL BANNER
                
    $qs "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;
                
    $ris mysql_query($qs);
                
    //qui gestisci il risultato della query per tracciare cosa hai aggiornato magari in un log file
            
    }


        }
        return 
    true ;

    Con una funzione del genere potri laciare il controllo ogni volta che vorrai quindi prima di caricare il banner in una pagina invochi la funzione poi carichi i banner che restano attivi.

    E' un'ida ci sono anche soluzioni migliori che presuppongono altre cose , per esmpio che il banner sia attivo fino al giorno x e ogni notte tramite cron table avvi lo script di controllo con una funzione simile per cui sai a priori che ogni notte a mezzanote i banner vengono controllati. Oppure carichi tra quelli attivi e controlli se il banner e' scaduto se lo e' aggiorni il suo stato e ne carichi un altro.

    Tutto questo per otimizzare, cosi' riduci il numero di query che vengono fatte al db etc...

    Pensaci.

  5. #5
    Ciao, non avevo mai pensato di usare le funzioni

    ho provato ha fare così

    Codice PHP:
    <?
    function bannerChecker($opts)
    {
        
    $q "select * from  banners order by scadenza  desc" ;
        
    // Carichiamo tutti i banner a partire da quelli con data di scadenza piu' alta
        
    $link connect(); // funzione di connessione al database
        
    $ris mysql_query($q,$link) ;

        if( !
    $ris )
            return 
    false ;
        
    $now date(  "Y-m-d H:i:s" time() ) ;
        while( 
    $curr mysql_fetch_array($ris) )
        {
            
    // LE DATE in mysql se sono salvate di tipo datetime saranno in fomrato std unix YYYY-mm-dd HH:ii:ss e potrai fare controlli lessicografici
            
            // Banner scaduto
            
    if(  $curr["scadenza"]> $now )
            {
                
    // update PER FAR SCADERE IL BANNER
                
    $qs "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;
                
    $ris mysql_query($qs);
                
    //qui gestisci il risultato della query per tracciare cosa hai aggiornato magari in un log file
            
    }

    echo 
    $curr["codice"];


        }
        return 
    true ;
    }

    bannerChecker($opts);
    echo 
    $curr["codice"];


    ?>
    solo un paio di cose4, per prima cosa non mi stampa nulla seconda cosa il codice

    Codice PHP:
    $link connect(); // funzione di connessione al database 
    Io ho già all'intero nel config.php tutti i paramentri serve creare questa funzione??

    Ciao

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Beh al quel punto modifica pure come preferisci, semplicemente basta che effettui la connessione prima di eseguire le query.

    Inoltre potrebbe esserci un errore sulla query e se noti non c'e' il controllo che verifica se la prima query viene eseguita correttamente.

    Tutta la parte di controlli e' compito tuo io ti inserito un po' di codice cosi' che tu possa fari un'idea di come potrebbe essere una funzione di controllo.

    Quindi ora inserisci i controlli sull'esecuzione della query etc...

  7. #7
    Ciao, funziona tutto bene solo una cosa che mi stampa tutti i risultati è non solo quelli con attivo=1 quindi ho provato ha fare così

    Codice PHP:
    function bannerChecker($opts)
    {
        
    $q "select * from  banners [B]where attivo=1[/B]  order by scadenza desc" ;
        
    // Carichiamo tutti i banner a partire da quelli con data di scadenza piu' alta
        
    $ris mysql_query($q) ;

        if( !
    $ris )
            return 
    false ;
        
    $now date(  "Y-m-d H:i:s" time() ) ;
        while( 
    $curr mysql_fetch_array($ris) )
        {
            
    // LE DATE in mysql se sono salvate di tipo datetime saranno in fomrato std unix YYYY-mm-dd HH:ii:ss e potrai fare controlli lessicografici
            
            // Banner scaduto
            
    if(  $curr["scadenza"]> $now )
            {
                
    // update PER FAR SCADERE IL BANNER
                
    $qs "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;
                
    $ris mysql_query($qs);
                
            }

    echo 
    $curr["codice"];

        }
        return 
    true ;

    solo che se faccio così non capisco come mai mi setta l'attivo = 0

    ciao e grazie

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Setta attivo a 0 perche' :

    $qs = "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;

    Questa query viene eseguita quando entri nell'if

    if( $curr["scadenza"]> $now )

    quindi mettendo un po' di debug andiamo a controllare effettivamente che valori vengono controllati

    Codice PHP:

    function bannerChecker($opts)
    {
        
    $q "select * from  banners where attivo=1  order by scadenza desc" ;
        
    // Carichiamo tutti i banner a partire da quelli con data di scadenza piu' alta
        
    $ris mysql_query($q) ;

        if( !
    $ris )
            return 
    false ;
        
    $now date(  "Y-m-d H:i:s" time() ) ;
        while( 
    $curr mysql_fetch_array($ris) )
        {
            
    // LE DATE in mysql se sono salvate di tipo datetime saranno in fomrato std unix YYYY-mm-dd HH:ii:ss e potrai fare controlli lessicografici
           
    echo "Controllo : "$curr["codice"]." data scadenza : ".$curr["scadenza"]." data di controllo ".$now
            
    // Banner scaduto
            
    if(  $curr["scadenza"]> $now )
            {
                echo 
    "   =&gt; [SCADUTO]
    ;
                
    // update PER FAR SCADERE IL BANNER
                
    $qs "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;
                
    $ris mysql_query($qs);
                
            }
            else
                echo 
    "   =&gt; [OK]
    ;
        }
        return 
    true ;

    e controlla cosa stampa.

  9. #9
    Crontab alle 24:00 :-o

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Opterei pure io per le cron tab, quindi la funzione suggerita sopra potrebbe essere usata tranquillamente da uno script in cron tab.

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.