Visualizzazione risultati 1 fino 7 di 7

Discussione: operatore @ prima delle funzioni

  1. #1
    akis non è connesso Utente giovane
    Data registrazione
    03-03-2010
    Residenza
    Acireale
    Messaggi
    79

    Predefinito operatore @ prima delle funzioni

    Ciao ragazzi,
    oggi ho provato l'operatore @ prima delle funzioni.

    in particolare:

    Codice PHP:
    $cid = (int)($_GET["cid"]);
    $pid = (int)($_GET["pid"]);

    in esecuzione mi da il solo messaggio indice indefinito....

    allora l'ho trasformato in

    Codice PHP:
    $cid = (isset($_GET["cid"]));
    $pid = (isset($_GET["pid"]));
    ma il programma non funzionava più.......

    alla fine mi sono arreso

    Codice PHP:
    $cid = (int)(@$_GET["cid"]);
    $pid = (int)(@$_GET["pid"]);
    ...ed i messaggi di errori sono scomparsi.

    lo script in questione è un'album fotografico..... (ancora in fase embrionale)

    Ma secondo voi, è intelligente l'operatore @ per nascondere gli errori?
    Ultima modifica di akis : 06-10-2011 alle ore 19.20.17

  2. #2
    Guest

    Predefinito

    L'uso di @ per nascondere i messaggi di errore di php è utile per non sporcare le pagine ma bisogna saper verificare se, dove e che tipo dierrori si verifichino.

  3. #3
    akis non è connesso Utente giovane
    Data registrazione
    03-03-2010
    Residenza
    Acireale
    Messaggi
    79

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    L'uso di @ per nascondere i messaggi di errore di php è utile per non sporcare le pagine ma bisogna saper verificare se, dove e che tipo dierrori si verifichino.
    Sono assolutamente d'accordo con te. Però, come nel mio caso, il codice sembra essere corretto, infatti, il risultato ottenuto è quello desiderato .... ma il messaggino

    Notice: Undefined index: cid in C:\www\gallery\viewgallery.php on line 9

    Notice: Undefined index: pid in C:\www\gallery\viewgallery.php on line 10

    continua ad esserci.....

    questo è uno stralcio dello scritp incriminato:

    Codice PHP:
    // initialization
    $result_array = array();
    $counter = 0;
    $number_of_photos_in_row = 0;

    $cid = (int)($_GET["cid"]);
    $pid = (int)($_GET["pid"]);

    // Category Listing

    if( empty($cid) && empty($pid) )
    {
    $number_of_categories_in_row = 'immagine.style.height'/160;

    $result = mysql_query( "SELECT c.nCategory_id,c.cCategory_name,COUNT(photo_id)
    FROM "
    .$db_prefix."gallery_category as c
    LEFT JOIN "
    .$db_prefix."gallery_photos as p ON p.photo_category = c.nCategory_id
    GROUP BY c.nCategory_id"
    );
    while(
    $row = mysql_fetch_array( $result ) )
    {
    $result_array[] = "<a href='viewgallery.php?cid=".$row[0]."'>".$row[1]."</a> "."(".$row[2].")";
    }
    mysql_free_result( $result );

    $result_final = "<tr>\n";

    foreach(
    $result_array as $category_link)
    {
    if(
    $counter == $number_of_categories_in_row)
    {
    $counter = 1;
    $result_final .= "\n</tr>\n<tr>\n";
    }
    else
    $counter++;

    $result_final .= "\t<td>".$category_link."</td>\n";
    }

    if(
    $counter)
    {
    if(
    $number_of_categories_in_row-$counter)
    $result_final .= "\t<td colspan='".($number_of_categories_in_row-$counter)."'>&nbsp;</td>\n";

    $result_final .= "</tr>";
    }
    }

  4. #4
    Guest

    Predefinito

    In questo listato non vedo "@" quindi è normale che ci siano gli avvisi.
    Il segno agisce solo per l'istruzione in cui è inserito e non su tutte.

    Il fatto che continui a brancolare nel buio vuol dire anche che non sai affrontare eventuali errori non previsti e quindi in questo caso non ti conviene usare quel sistema.

    (A mio avviso.)

  5. #5
    L'avatar di twisterdark
    twisterdark non è connesso Moderatore
    Data registrazione
    17-11-2002
    Residenza
    Hong Kong
    Messaggi
    3,226

    Predefinito

    L'errore che ti viene segnalato è perchè il server (o comunque la funzione di reportizzazione errori) prevede che questo sia segnalato nel caso in cui si utilizzano $_GET e/o $_POST senza aver utilizzato isset. Dovresti usare un metodo di questo tipo:

    if (isset($_GET['cid']))
    {
    $cid = (int)($_GET["cid"]);
    }

    Praticamente devi effettuare una verifica sull'esistenza di quel valore, prima di utilizzarlo con $_POST o $_GET, altrimenti ti segnala l'errore. . .che però non impedisce allo script di funzionare, perchè effettivamente quel valore esiste. E' praticamente un errore di "forma", ma non di sostanza.

    Edit: quindi se non vuoi effettuare il controllo sull'esistenza di una variabile, puoi ignorare il notice con la @, conscio del fatto che è solo un notice. Ma questo puoi farlo solo quando sei sicuro che non ci sia realmente un vero errore (come in questo caso).
    Ultima modifica di twisterdark : 07-10-2011 alle ore 18.09.37


    -------------------------------------------------------------------------------------------------------------------------------------
    Un moderatore per gestirli, un moderatore per guidarli, un moderatore per sgridarli e nel buio anche bannarli...

    ------------------------------------------------------------------------------------------------------------------------------------------

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Praticamente devi effettuare una verifica sull'esistenza di quel valore, prima di utilizzarlo con $_POST o $_GET, altrimenti ti segnala l'errore
    Non sono proprio d'accordo: se esistono quelle variabili (in quegli indici), PHP non da nessun error/notice.
    In questo caso, visto che le "posizioni" "cid" e "pid" non esistono, con una isset() avrebbe gestito il problema lato codice, evitando le notice... Ma il problema in generale rimane, ovvero quei dati non esistono (almeno, alle posizioni "cid" e "pid" di $_POST[].

    Quindi, consiglierei di controllare la fonte dei dati (form o altro che sia ).

    Ciao!

  7. #7
    akis non è connesso Utente giovane
    Data registrazione
    03-03-2010
    Residenza
    Acireale
    Messaggi
    79

    Predefinito

    Citazione Originalmente inviato da twisterdark Visualizza messaggio
    L'errore che ti viene segnalato è perchè il server (o comunque la funzione di reportizzazione errori) prevede che questo sia segnalato nel caso in cui si utilizzano $_GET e/o $_POST senza aver utilizzato isset. Dovresti usare un metodo di questo tipo:

    if (isset($_GET['cid']))
    {
    $cid = (int)($_GET["cid"]);
    }

    Praticamente devi effettuare una verifica sull'esistenza di quel valore, prima di utilizzarlo con $_POST o $_GET, altrimenti ti segnala l'errore. . .che però non impedisce allo script di funzionare, perchè effettivamente quel valore esiste. E' praticamente un errore di "forma", ma non di sostanza.

    Edit: quindi se non vuoi effettuare il controllo sull'esistenza di una variabile, puoi ignorare il notice con la @, conscio del fatto che è solo un notice. Ma questo puoi farlo solo quando sei sicuro che non ci sia realmente un vero errore (come in questo caso).
    ciao twisterdark
    la tua spiegazione è stata veramente illuminante!!!!!! Finalmente, grazie al tuo aiuto, sono riuscito ad eliminare quei fastidiosissimi messaggi di errore non solo nel codice ho postato sopra, ma anche il altri script.
    Piano piano sto iniziando a capire qualcosa di php :-)

    >Grazie

    EDIT:

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Non sono proprio d'accordo: se esistono quelle variabili (in quegli indici), PHP non da nessun error/notice.
    In questo caso, visto che le "posizioni" "cid" e "pid" non esistono, con una isset() avrebbe gestito il problema lato codice, evitando le notice... Ma il problema in generale rimane, ovvero quei dati non esistono (almeno, alle posizioni "cid" e "pid" di $_POST[].

    Quindi, consiglierei di controllare la fonte dei dati (form o altro che sia ).

    Ciao!
    ciao alemoppo
    io ho fatto come mi ha consigliato twisterdark , e tutto funziona!!! cid e pid, sono indici ed indicano rispettivamente la catagoria e la foto della categoria. la categoria non è mai vuota, mentre l'indice foto inizialmente si.
    cmq, grazie anche a te per aver dedicato la tua attenzione al mio problema.
    Ultima modifica di alemoppo : 08-10-2011 alle ore 13.35.47 Motivo: Non fare messaggi consecutivi: usa il tasto "Edita".

Regole di scrittura

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