• User

    @Samyorn said:

    Dovresti rendere uguale a zero tutti i campi vote della tabella site (UPDATE site SET vote=0) e cancellare i contenuti della tabella che memorizza le votazioni/IP (TRUNCATE TABLE vote).
    Per farlo fare in automatico puoi utilizzare un CRON (ovvero uno script che si riesegue ogni tot di tempo) oppure tener traccia della data dell'ultima cancellazione dati e immettere nel codice (anche dove cancelli le votazioni più vecchie di un giorno così lo hai in tutte le pagine) uno script che prende la data dell'ultima cancellazione se è passata una settimana o più esegue i comandi che ti ho postato sopra. Ti consiglio la seconda.
    Vuoi provare a farlo tu? 🙂
    per ora ho messo da parte il fatto di volerli cancellare una volta a settimana, se riprenderò questa idea lo script lo farei così (considera che vorrei anke cancellare la tabella che tiene conto degli ip che hanno votato, il motivo lo spiego sotto)

    
     <?
    require_once ("config.php");
    $sql="UPDATE site SET vote=0 WHERE date<".time()-604800."";
    $query=@mysql_query($sql) or die (mysql_error());
    ?>  
    
    

    (604800 secondi in una settimana) è giusto lo script?

    la tabella vote la toglierei semplicemente perchè voglio adottare il sistema dei cookies, ovviamente devo anche modificare lo script di invio voto in modo che invii i dati solo alla tabella site.

    per settare i cookie in modo che si possa votare solo una volta per ogni sito io farei così:

    
    <?
    $id=$_POST['id'];
    
    setcookie("votazione_$id","giavotato",time()+86400); 
    
    if($_COOKIE [ "votazione_".$id.""])
    {
    $sql="UPDATE site SET vote=vote+1 WHERE id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
    
    echo "Grazie per aver votato.";
    }
    else
    {
    echo "Hai già votato per questo sito";
    }
    
    ?>
    
    

    però non funziona, cosa c'è di sbagliato?

    e poi:
    @ManuelHT said:

    ps: mi è venuta in mente un altra cosa da chiederti: se voglio disporre l'elenco dei siti in due o più colonne come faccio? cioè in pratica così:

    1. Sito 1 4) Sito 4 7) Sito 7
    2. Sito 2 5) Sito 5 😎 Sito 8
    3. Sito 3 6) Sito 6 9) Sito 9

    perchè per visualizzarli in colonna ho capito, ma in più colonne non saprei come fare.

    per questo discorso come potrei fare???

    grazie:D


  • Consiglio Direttivo

    Rieccomi. 😄

    Un chiarimento, vuoi cancellarli una volta a settimana o vuoi cancellare quelli più vecchi di una settimana? 🙂
    Sul campo site non hai date. 🙂

    Per il cookie, dovresti prima verificare che il cookie esista o meno e se non esiste crei il cookie e fai l'inserimento nel Db.
    Questo scrivilo così intanto:

    setcookie("votazione_".$id, .....
    ```Poi sposta il setcookie subito dopo la query. ;)
    
    Per l'incolonnamento basta ragionare in questi termini: se io ricevo un numero di termini, che non conosco, e devo incolonnarli a 3, che devo fare? :)
    
    Se io divido il numero di siti contenuti in tabella (che ottieni facendo SELECT COUNT(link) FROM site) per 3, che son le mie colonne, otterro' un numero.
    Se questo numero ha resto ( $resto = $count%3; ) significa che all'intero della divisione dovro' aggiungere un'altra riga per inserire i siti restanti, che saran 1 o 2 in questo caso.
    Poi come procedere dipende da come li vuoi visualizzare:
    
    
    * dentro una tabella
    * un div per riga
    * altro.
    
    :)

  • User

    Ho messo il codice dei cookie così
    [php]
    <?
    $id=$_POST['id'];

    if($COOKIE [ "votazione".$id.""])
    {

    echo "Hai già votato per questo sito";

    }
    else
    {

    $sql="UPDATE site SET vote=vote+1 WHERE id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());

    echo "Grazie per aver votato.";

    setcookie("votazione_".$id,"giavotato",time()+86400);
    }

    ?>
    [/php]Solo che non funziona lo stesso, mi dice:

    
                  Grazie per aver votato.
    **Warning**: Cannot modify header information - headers already sent by (output started at /home/xxx/xxxx/votazione-sito.php:6) in **/home/xxx/xxxx/votazione-sito.php** on line **87**
    
    ```( ovviamente le xxx sono indicative del percorso)
    
    Anche mettendo il setcookie(... dopo la chiusura di else mi da lo stesso errore, la linea 87 sarebbe quella dove c'è setcookie (."votazione.....
    
    Da cosa dipende?:x
    
    Un'altra cosa, se divido il numero di link per 3, come faccio a fare in modo da dirgli di mettere la prima parte di link nella 1 colonna, (che sarà un div con float left), la seconda parte nel secondo div e la terza nel terzo div???:bho::bho:
    Grazie ancora...!!!!

  • Consiglio Direttivo

    Considera il cookie come un header, pertanto la funzione va richiamata prima di ogni altro output (anche i <!DOCTYPE ... è da considerarsi un output ;)).

    Difatti conviene metterlo ad inizio script. 😉

    Per il discorso dei div, dato che estrarrai i dati tramite ciclo (ti consiglio di utilizzare il for) farai in modo che ogni 3 ricorrenze venga chiuso il div ed aperto il successivo andando a capo. 😉

    Dai che stai muovendo i primi passi con il PHP in maniera egregia. 🙂


  • User

    Beh tanto egregiamente non direi, visto che non ci capisco niente... 😄

    Non capisco il setcookie anche se lo metto prima di ogni cosa mi da lo stesso errore.

    E poi non capisco come fare il COUNT.

    Provando a fare questo scritp

    
    <?
    require_once ("config.php");
    
    $query = "SELECT count(link) from site";
    $query = mysql_query ($query, $db);
    $contatore = mysql_result($query, 0); 
    ?>
    
    ```Mi da errore nella riga della seconda $query e nella riga del $contatore....
    Non so...
    E poi non capisco come inserire i risultati in modo che mi vengano tra colonne, cioè tre div floatati a sinistra ognuno con dei risultati, inoltre vorrei che i risultati avessero un ordine, o di voto o di nome, in pratica nella colonna 1 per esempio il 1° deve avere 50 voti e l ultimo 30, nella colonna due il 1° ne deve avere 29 e l ultimo 10 e nella colonna 3 il prima 1° ne deve avere 9 e l ultimo 0 capito?
    
    Non so come fare...

  • Consiglio Direttivo

    @ManuelHT said:

    Non capisco il setcookie anche se lo metto prima di ogni cosa mi da lo stesso errore.
    Ricontrolla il file ed eventualmente postalo, ci sarà di certo qualche output o header prima della chiamata al setcookie.

    E poi non capisco come fare il COUNT

    provando a fare questo scritp

    <?
    require_once ("config.php");
    
    $query = "SELECT count(link) from site";
    $query = mysql_query ($query, $db);
    $contatore = mysql_result($query, 0); 
    ?>
    
    ```mi da errore nella riga della seconda $query e nella riga del $contatore....Prova intanto così:
    

    <?
    require_once ("config.php");

    $sql = "SELECT COUNT(link) AS COUNT FROM site";
    $query = mysql_query ($sql, $db) or die (mysql_error());
    $contatore = mysql_result($query, 0);
    ?>

    
    > .. inoltre vorrei ke i risultati avessero un ordine, o di voto o di nome, in pratica nella colonna 1 per esempio il 1° deve avere 50 voti e l ultimo 30, nella colonna due il 1° ne deve avere 29 e l ultimo 10 e nella colonna 3 il prima 1° ne deve avere 9 e l ultimo 0 capito?Beh, se lo vuoi impostare così dovrai affiancare prima tre div contenitori (da 50 a 30, da 29 a 10 e da 9 a 0) e quindi procedere al riempimento di questi div, magari facendo tre query dove imposti i parametri (WHERE vote>29 ORDER BY vote ). Qualcosa del genere immagino. :)
    
    P.S. ManuelHT ti ho già editato diversi posti per mancanza di maiuscole, punti ed abbreviazioni da SMS (*ke*) come ben presente nel regolamento del Forum GT vi invitiamo a rispettare le regole della buona scrittura anche per rispetto di chi ci legge. ;)

  • User

    Allora, innanzitutto mi volevo scusare per il linguaggio incorretto e le lettere minuscole all'inizio delle frasi. Avevo notato le lettere che mi avevi corretto in rosso ma nonavevo capito cosa stavano a significare. 😞 (mi scuso per tutto il lavoro che ti ho dato!!!)

    Poi tornando in topic, ecco il codice dove c'è il setcookie

    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: //www .w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http: //www .w3.org/1999/xhtml">
    <head>
    <meta http -equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XXX</title>
    </head>
    <body>
    <div id="header">
    
    </div><!--header close-->
    <div id="dettaglisito">
                <?
    $id=$_GET['id'];
    require_once ("config.php");
    
    $sql="SELECT * FROM site WHERE id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
    //a questo punto associ ad un array il risultato della query e quindi cicli il contenuto
    while ($array=mysql_fetch_array($query))
    {
       echo "<div class=\"titolo\"><a href=\"".$array['link']."\">".html_entity_decode($array['name'])."</a></div>
    <div class=\"desctop\"></div>
    <div class=\"descmiddle\"><div class=\"desc\">DESCRIZIONE</div>
    ".html_entity_decode($array['description'])."
    </div>
    <div class=\"descbottom\"></div>";
    }
    
    ?>
    <div class="form">
    <?
    $id=$_POST['id'];
    
    if($_COOKIE [ "votazione_".$id.""])
    {
     echo "Hai già votato per questo sito"; 
    }
    else
    {
    $sql="UPDATE site SET vote=vote+1 WHERE id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
      echo "Grazie per aver votato.";
      setcookie("votazione_".$id,"giavotato",time()+86400);
    }
    
    ?>
    
    </div>
            </div><!--dettaglisito close-->
    
    <div id="footer">
    </div><!-- footer close -->
    </body>
    </html>
    
    
    ```(Ho eliminato tutto le cose inutili)
    
    Comunque anche mettendo il setcookie all'inizio non funziona lo stesso.
    
    
    
    Poi per quanto riguarda il SELECT COUNT non funziona lo stesso anche mettendo come mi hai detto tu, mi da questo errore:
    

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/xxxx/public_html/contatore record.php on line 13

    
    Ps: mi scuso anticipatamente se qualche volta mi scappa qualche errore da SMS   :)

  • Consiglio Direttivo

    C'è un mare di output prima della chiamata al setcookie

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: //www .w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http: //www .w3.org/1999/xhtml">
    <head>
    <meta http -equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XXX</title>
    </head>
    <body>
    <div id="header">
    
    </div><!--header close-->
    <div id="dettaglisito">
     ............
    

    Tutto questo è output. 🙂
    Prova così:
    [php]<?
    $id=$_POST['id'];

    if($COOKIE [ "votazione".$id.""])
    {
    $msg= "Hai già votato per questo sito";
    }
    else
    {
    $sql="UPDATE site SET vote=vote+1 WHERE id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
    $msg= "Grazie per aver votato.";
    setcookie("votazione_".$id,"giavotato",time()+86400);
    }

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: //www .w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http: //www .w3.org/1999/xhtml">
    <head>
    <meta http -equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XXX</title>
    </head>
    <body>
    <div id="header">

    </div><!--header close-->
    <div id="dettaglisito">
    <?
    $id=$_GET['id'];
    require_once ("config.php");

    $sql="SELECT * FROM site WHERE id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
    //a questo punto associ ad un array il risultato della query e quindi cicli il contenuto
    while ($array=mysql_fetch_array($query))
    {
    echo "<div class="titolo"><a href="".$array['link']."">".html_entity_decode($array['name'])."</a></div>
    <div class="desctop"></div>
    <div class="descmiddle"><div class="desc">DESCRIZIONE</div>
    ".html_entity_decode($array['description'])."
    </div>
    <div class="descbottom"></div>";
    }

    ?>
    <div class="form"><? echo $msg; ?></div>
    </div><!--dettaglisito close-->

    <div id="footer">
    </div><!-- footer close -->
    </body>
    </html>[/php]

    Poi per quanto riguarda il SELECT COUNT non funziona lo stesso anche mettendo come mi hai detto tu, mi da questo errore:

    Il campo link si chiama link o Link? 🙂


  • User

    Ok il set cookie è andato.

    Per quanto riguarda il COUNT il campo si chiama link e non Link.


  • Consiglio Direttivo

    :mmm:

    Prova così:

    SELECT COUNT(*) AS count FROM site