Visualizzazione risultati 1 fino 11 di 11

Discussione: Problema con le condizioni in un if

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito Problema con le condizioni in un if

    Buonasera,
    come si capisce dal titolo non riesco a far funzionare correttamente un if...so che probabilmente la cosa è banale ma questa è la prima volta che mi blocco con un errore così...stupido...

    Il codice attualmente in uso è:
    1° Caso
    Codice PHP:
    $clv = "abc";
    $dlv = "abc";

    $cip = "123.456.7.890";
    $ip = $_SERVER['REMOTE_ADDR'];

    $query = mysql_query("SELECT * FROM tabella WHERE ip = '$ip'")or die(mysql_error());
    if((empty(
    $clv) || empty($cip)) || ($clv == $dlv && $cip != $ip) && mysql_num_rows($query) == 0){

    // AGGIUNGI UN CAMPO IN UNA TABELLA

    }elseif((!empty($clv) || !empty($cip)) || ($clv == $dlv && $cip == $ip) && mysql_num_rows($query) > 0){

    // AGGIUNGI + 1 AD UN CAMPO DETERMINATO IN UNA TABELLA

    }else{

    echo
    "ERRORE";

    }
    2° Caso
    Codice PHP:
    $clv = "abc";
    $dlv = "abc";

    $cip = "123.456.7.890";
    $ip = $_SERVER['REMOTE_ADDR'];

    $query = mysql_query("SELECT * FROM tabella WHERE ip = '$ip'")or die(mysql_error());
    if(((empty(
    $clv) || empty($cip)) || ($clv == $dlv && $cip != $ip)) && mysql_num_rows($query) == 0){

    // AGGIUNGI UN CAMPO IN UNA TABELLA

    }elseif(((!empty($clv) || !empty($cip)) || ($clv == $dlv && $cip == $ip)) && mysql_num_rows($query) > 0){

    // AGGIUNGI + 1 AD UN CAMPO DETERMINATO IN UNA TABELLA

    }else{

    echo
    "ERRORE";

    }
    Lasciando perdere le parti di codice inutili e ammettendo che tutte le variabili siano ok:

    1. Nel primo caso, se $clv e/o $cip sono vuoti mi aggiunge una nuova riga nella tabella al posto di aggiungere +1 a quella riga già esistente. (Quindi il mysql_num_rows sembrerebbe non andare...)
    2. Nel secondo caso, se $clv e/o $cip sono vuoti o pieni mi viene restituito comunque errore...

    Come posso risolvere? Dove commetto l'errore?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    quale dovrebbe essere il flusso corretto?

    stai facendo controlli identici in entrambi gli if, che quindi potrebbero essere fatti una volta sola in un if a monte, e sta concatenando operatori diversi (in particolare || e &&) che hanno priorità differenti - && associa prima di ||, quindi l'ordine in cui vengono valutate le operazioni potrebbe non essere quello che tu credi.

    ma, ripeto, ciò dipende da quale sia il comportamento che ti aspetti, che non si intuisce dai due spezzoni diversi di codice.

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Si questo lo so ma ho fatto più tests a esito negativo...

    Praticamente lo script vuole implementare un contatore di visite totali ed uniche basandosi sui cookie (so che un ip dinamico dopo che mi è stato assegnato potrebbe venir assegnato ad un altro in questo caso l'ex contatore conterebbe 1 visita unica al posto di 2)...praticamente il contatore memorizza nei cookie la data ed il giorno attuale e il relativo IP quindi il contatore basandosi su questi dati incrementa la tabella o la cella a seconda del caso:

    Se l'IP della data xxxx è uguale all'IP attuale => Visita non unica, +1 alla cella
    Se l'IP della data xxxx è diverso da quello attuale => Visita unica, incremento tabella

    Cioè in pratica al posto di fare questo (in MySQL):

    192.168.1.1
    192.168.1.1
    192.168.1.1
    192.168.1.1
    192.168.1.1
    127.0.0.1
    127.0.0.1
    127.0.0.1
    192.168.1.3

    Faccio così

    192.168.1.1 | 5
    127.0.0.1 | 3
    192.168.1.3 | 1

    Naturalmente il controllo vuol anche contare come visita unica la non presenza dei due cookie che, normalmente, chi visita il mio sito dovrebbe possedere.
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    Guest

    Predefinito

    Spieghi il significato delle variabili? clv dlv cip non è che siano esplicative.

  5. #5
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Codice PHP:
    $clv = $_COOKIE['primo_cookie_data'];
    $cip = $_COOKIE['secondo_cookie_ip'];
    $dlv = date("d-m");
    Apprezzi l'aiuto? Offrimi un caffè!

  6. #6
    Guest

    Predefinito

    Secondo me sbagli a mettere tutto dentro l'if...dividi l'if magari così funge! ;D

  7. #7
    Guest

    Predefinito

    Vedi se così va bene
    Codice PHP:
    <?php
    $clv
    = $_COOKIE['primo_cookie_data'];
    $cip = $_COOKIE['secondo_cookie_ip'];

    $dlv = date("d-m");

    $ip = $_SERVER['REMOTE_ADDR'];

    $query = mysql_query("SELECT * FROM tabella WHERE ip = '$ip'")or die(mysql_error());

    if(empty(
    $clv) && empty($cip) && mysql_num_rows($query) == 0)
    //se i cookie non esistono e non ha record nella tabella, allora non ha mai visitato il sito, quindi aggiungi una nuova riga alla tabella
    insetRow(/*vari parametri*/);
    elseif(isset(
    $clv) && isset($cip) && mysql_num_rows($query) == 0)
    /* se esistono i cookie ma non esiste la riga la crea */
    insertRow(/*parametri*/);
    elseif(isset(
    $clv) && isset($cip) && $cip == $ip && mysql_num_rows($query) > 0)
    /*se esistono i cookie e esiste la riga nella tabella e ha lo stesso ip incrementa la riga */
    addOneToRow(/*parametri*/);



    function
    insetRow(/*vari parametri */) {
    /*
    da implementare
    */
    }

    function
    addOneToRow(/*parametri*/) {
    /*
    da implementare
    */
    }
    ?>

  8. #8
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Mi dispiace dirtelo ma c'è qualche errore...i cookie si impostano, la pagina la refresho in continuazione il contatore aumenta sempre (non le righe ma il contatore, 127.0.0.1 = 0 => Refresh => 127.0.0.1 = 1)...e poi perchè usi isset()?

    Cioè se io ho una cosa del genere:

    Codice PHP:
    $clv = $_COOKIE['primo_cookie_data'];
    $cip = $_COOKIE['secondo_cookie_ip'];

    isset(
    $clv)
    isset() non restituirà comunque true?

    Codice in uso:
    Codice PHP:
    $query = mysql_query("SELECT * FROM visite WHERE ip = '$ip'")or die(mysql_error());

    if(empty(
    $clv) && empty($cip) && mysql_num_rows($query) == 0)
    //se i cookie non esistono e non ha record nella tabella, allora non ha mai visitato il sito, quindi aggiungi una nuova riga alla tabella
    mysql_query("INSERT INTO visite VALUES(\"".$ip."\",\"1\")");
    elseif(isset(
    $clv) && isset($cip) && mysql_num_rows($query) == 0)
    /* se esistono i cookie ma non esiste la riga la crea */
    mysql_query("INSERT INTO visite VALUES(\"".$ip."\",\"1\")");
    elseif(isset(
    $clv) && isset($cip) && $cip == $ip && mysql_num_rows($query) > 0)
    /*se esistono i cookie e esiste la riga nella tabella e ha lo stesso ip incrementa la riga */
    $totnow = mysql_fetch_array($query);
    $totplus = $totnow['totale']+1;
    mysql_query("UPDATE visite SET totale = '$totplus' WHERE ip = '$ip'");
    mysql_close();
    Apprezzi l'aiuto? Offrimi un caffè!

  9. #9
    Guest

    Predefinito

    ah. usa !empty allora, l'ho scritta qui sul forum non l'ho provata.
    Per la seconda domanda. Non era quello che volevi? Cioè, non volevi che se ci fossero due visite proveniente dallo stesso ip incrementasse la cella ? (continuo a non capire, spiegati meglio )

  10. #10
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Si avevo già modificato comunque ora possiamo lasciar perdere...dopo giorni ed ore di duro lavoro sono riuscito, con poco codice, ad avere l'effetto che desideravo...non sai che soddisfazione e che rabbia da una parte...però ora, se non vado troppo OT, vorrei chiedervi una cosa:

    Perchè se io ho:
    Codice PHP:
    <?php

    $ip
    = $_SERVER['REMOTE_ADDR'];

    function
    a($b){

    return
    $b.$ip;

    }

    echo
    a("IL MIO IP E':");

    ?>

    // Oppure

    <?php

    $ip
    = $_SERVER['REMOTE_ADDR'];

    function
    a(){

    return
    $ip;

    }

    echo
    a();

    ?>

    // O ancora...

    <?php

    global $ip;

    $ip = $_SERVER['REMOTE_ADDR'];

    function
    a($b){

    return
    $b.$ip;

    }

    echo
    a("IL MIO IP E':");

    ?>

    // O infine...

    <?php

    $ip
    = $_SERVER['REMOTE_ADDR'];

    global
    $ip

    function a($b){

    return
    $b.$ip;

    }

    echo
    a("IL MIO IP E':");

    ?>
    Non mi stampa l'indirizzo IP ma solo la frase mentre se faccio:

    Codice PHP:
    <?php

    $ip
    = $_SERVER['REMOTE_ADDR'];

    global
    $ip;

    function
    a($b,$ip){

    return
    $b.$ip;

    }

    echo
    a("IL MIO IP E':",$ip);

    ?>

    // Oppure

    <?php

    $ip
    = $_SERVER['REMOTE_ADDR'];

    global
    $ip;

    function
    a($ip){

    return
    $ip;

    }

    echo
    a($ip);

    ?>
    Funziona? Non c'è un modo affinchè la variabile $ip funzioni anche all'interno della funzione senza dover fare una cosa del genere a($ip);?
    Apprezzi l'aiuto? Offrimi un caffè!

  11. #11
    Guest

    Predefinito

    Puoi fare una cosa del genere.
    Codice PHP:
    <?php

    $ip
    = "127.0.0.1";

    function
    a() {
    global
    $ip;

    return
    $ip;
    }


    echo
    a();

    ?>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •