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

    problema recupero dati dopo mysql_fetch_row

    sono nuovo al php. (programmatore asp che sta facendo il passaggio)
    provo a fare una query su una tabella che contiene un solo record, quando cerco di recuperare i risultati estratti per assegnarli a delle variabili tramite $row[nome_campo] mi da queste segnalazioni anche se il lavoro richiesto viene svolto lo stesso:

    Notice: Use of undefined constant notif_reg - assumed 'notif_reg' in C:\Programmi\Apache Group\Apache2\htdocs\home\reg.inc.php on line 47

    Notice: Undefined index: notif_reg in C:\Programmi\Apache Group\Apache2\htdocs\home\reg.inc.php on line 47

    il messaggio di notifica mostrato sopra mi viene visualizzato per ogni riga in cui richiamo l'arrey tramite il nome del campo.

    se utilizzo i numeri progressivi invece del nome dei campi - come chiave dell'array associativo $row - non ricevo nessuna segnalazione e il lavoro richiesto viene svolto sempre alla perfezione (es. $row[0])

    questo è il codice che ho creato:
    cosa dovrei fare per eliminare quelle fastidiose notifiche che mi vengono segnalate se utilizzo il nome del campo come chiave di chiamata per l'array $row?
    Sbaglio in qualcosa?
    grazie a tutti quelli che mi sapranno essere d'aiuto e scusate per la banalità magari della mia richiesta, ma sono i miei primissimi passi con php.

    codice:
    $conn               = connect($db_host,$db_user,$db_password,$db_name,$str204);
                $query              =  "SELECT conf_email,notif_reg, msg_email_not_reg, msg_email_att_reg
                                        FROM ".$prefix_table."setting
                                        WHERE id = 1";
                $res                = mysql_query($query,$conn) or die ($str201.": ".mysql_error());
                $row                = mysql_fetch_row($res);
                $conf_email         = $row[conf_email];
                $notif_reg          = $row[notif_reg];
                $msg_email_not_reg  = $row[msg_email_not_reg];  //  RECUPERO IL CONTENUTO DELL'EMAIL DA NOTIFICARE ALL'ADMIN
                $msg_email_att_reg  = $row[msg_email_att_reg]; //   RECUPERO IL CONTENUTO DELL'EMAIL DA INVIARE AL NUOVO UTENTE
    
                If ($conf_email == 0) {
                    $str_stato = 1;
                }

  2. #2
    l'indice associativo va messo tra apici, mentre l'indice numerico no.

    esempio:

    $row['conf_email'];


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    piero, intanto grazie per la risposta.

    ho provato con gli apici, adesso invece di avere una doppia notifica per ogni riga in cui utilizzo l'array ho una singola notifica per rigo, in questo modo:

    Notice: Undefined index: notif_reg in C:\Programmi\Apache Group\Apache2\htdocs\home\reg.inc.php on line 47

    ripetuto per tutte le quattro righe in cui utilizzo $row['nome_campo']. quanto meno siamo già riusciti a migliorare qualcosina.

    che altro posso fare?

  4. #4
    in pratica prima ti diceva che mancavano le virgolette con il NOTICE sulla costante, Poi ti diceva che non esiste quell'indice nominato.

    Mi ero fermato a leggere solo la prima, anche perche' non ho idea del nome dei campi che utilizzi.

    comunque con mysql_fetch_row estrai solo indici numerici. Dovresti usare mysql_fetch_assoc() ....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    grazie piero, ho capito chiaramente il concetto.
    quindi per utilizzare il nome degli indici devo utilizzare mysql_fetch_assoc().
    un ultima curiosità, facendo una select solo su 4 campi di una tabella che magari ne contiene 20 di campi e utilizzando mysql_fetch_row, l'ordine numerico degli indici $row[0], $row[[1] $row[[2] e $row[[3] corrisponde all'ordine con cui elenco i campi io nella mia query o all'ordine in cui i campi sono disposti sulla tabella del db?
    faccio un esempio:
    ho una tabella clienti con i seguenti campi ordinati in questo modo: id, cognome, nome, città

    la mia quesry è:
    "SELECT città, cognome FROM clienti WHERE id = 1"

    utilizzando mysql_fetch_row all'indice 0 ($row[0])dell'array trovo il contenuto del campo città (che era il primo nella richiesta della mia select pur essendo al 4° posto come campo nella tabella del db)?

    questa è solo una mia curiosità personale.

  6. #6
    se fai un select * l'ordine numerico e' quello della posizione nella tabella. Se dichiari i campi da estrarre l'ordine e' quello dei campi dichiarati.

    Per inciso mysql_fetch_array() invece ti estrae "entrambi" gli indici. Quindi il risultato e' doppio, presente sia con indice numerico sia con indice associativo. Puoi verificare comodamente il contenuto di questi array stampandone il contenuto. Provali tutti e tre.

    $row = mysql_fetch_row($res);
    echo "<pre>";
    print_r($row);

    cambia le tre varianti di mysql_fetch_* (row, assoc e array) e vedi.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    grazie ancora per l'esaudiente spiegazione, mi sa che utilizzerò quest'ultimo mysql_fetch_array() in modo da poter lavorare indistintamente con entrambi gli indici dell'array.

  8. #8
    Originariamente inviato da Tyler Durden7
    grazie ancora per l'esaudiente spiegazione, mi sa che utilizzerò quest'ultimo mysql_fetch_array() in modo da poter lavorare indistintamente con entrambi gli indici dell'array.
    Come tempi di elaborazione e' praticamente la stessa cosa, pero' raddoppia lo spazio occupato in memoria. Da tenere in conto quando il result set e' particolarmente voluminoso. Si potra' sempre liberare con mysql_free_result() se necessitera'


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.