Visualizzazione dei risultati da 1 a 2 su 2

Discussione: warning su array_shift

  1. #1

    warning su array_shift

    ciao a tutti,

    nel db ho un campo serializzato un campo value in questo modo
    codice:
    a:5:{s:4:"uenc";s:76:"aHR0cDovL3d3dy5pdGFsaWFpbmZpb3JlLmNvbS90cmUtcm9zZS1yb3NzZS5odG1sP19fX1NJRD1V";s:7:"product";s:2:"61";s:15:"related_product";s:0:"";s:7:"options";a:3:{i:147;s:3:"246";i:146;s:26:"martedì, 02/febbraio/2010";i:145;a:1:{i:0;s:3:"245";}}s:3:"qty";s:0:"";}
    cerco di elaborarlo così
    Codice PHP:
    $result_prod mysql_query("SELECT item_id, product_id, name, qty, price FROM product WHERE quote_id='".$row['quote_id']."'");
    $rows mysql_num_rows($result_prod);
    $dettaglio '';
    while(
    $res_dett_prod mysql_fetch_array($result_prod))
    {
        
    $idconsegna $res_dett_prod['item_id'];
        
    $idprodotto $res_dett_prod['product_id'];
        
    $dett $res_dett_prod['name'] ." € "number_format($res_dett_prod['price'],2) ." x "number_format($res_dett_prod['qty'],0);
        if(
    $rows == 1) { $dettaglio $dett; }else{$dettaglio $dett ." + "$dettaglio; }
    }


    $arriva $row_delivering['value'];
    $arr unserialize($arriva);
    array_shift($arr[options]); <---RIGA 54
    echo $dataconsegna $arr[options][0]; 
    ma, se il giorno è diverso da domenica, mi si restituisce questo risultato
    codice:
    Warning: array_shift() [function.array-shift]: The argument should be an array in /......./file.php on line 54
    IN PRATICA SUCCEDE CHE tutti i dati mi vengono registrati nella tabella ordini di destinazione ma la data di consegna (in questo caso: martedì, 02/febbraio/2010) no. Come dicevo prima, l'errore non appare e la data si registra solo se è tipo "domenica 14/02/2010". Per esempio, su 6 record il 4 contiene una data domenica....., bene 1-2-3-5-6 saranno con dataconsegna VUOTA il 4 sarà popolato correttamente con "domenica, 14/02/2010".
    ---------------------------
    danielix05

  2. #2
    $arr[options] dovrebbe essere $arr['options'].

    Purtroppo nel codice che hai postato ce n'è di ogni tranne $row_delivering['value']. È chiaro che l'array non viene ritornato (l'errore è palese) e i motivi più comuni possono essere due:
    [list=1][*]ciò che viene deserializzato è errato[*]unserialize() fallisce[/list=1]
    Ignoro il primo caso e tiro ad indovinare: è un problema di encoding. Lunedì, martedì, mercoledì, giovedì e venerdì hanno quella ì finale che non è ASCII (sabato e domenica invece dovrebbero funzionare). Non so come è impostato MySQL ma proverei:

    Codice PHP:
    $arriva utf8_encode($row_delivering['value']); 
    La soluzione più corretta sarebbe impostare l'encoding dei risultati MySQL su UTF8 e usarlo in modo consistente da tutte le parti.

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.