Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: problema con intval()

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154

    problema con intval()

    Codice PHP:
    <td class='noselect'><a href="index.php?page=products&action=add&id=<php echo $row['id_prodotto'] >" class="link_button">+</a></td
    Codice PHP:

     
    if(isset($_GET['action']) && $_GET['action']=="add"){ 
              
            
    $id=intval($_GET['id']); 
              
            if(isset(
    $_SESSION['cart'][$id])){ 
                  
                
    $_SESSION['cart'][$id]['quantity']++; 
                
    $_SESSION['cart'][$id]['quantityF']++;
                
    $_SESSION['cart'][$id]['quantityNF']++;
                
    $_SESSION['cart'][$id]['quantityS']++;
                
    $_SESSION['cart'][$id]['quantityNS']++;
                
    $_SESSION['cart'][$id]['quantitypos']++;
                  
            }else{ 
                  
                
    $sql_s="SELECT * FROM inventario
                    WHERE id_prodotto=
    {$id}"
                
    $query_s=mysqli_query($link,$sql_s); 
                if(
    mysqli_num_rows($query_s)!=0){ 
                    
    $row_s=mysqli_fetch_array($query_s); 
                      
                    
    $_SESSION['cart'][$row_s['id_prodotto']]=array( 
                            
    "quantity" => 1,
                            
    "quantityF" => 0,
                            
    "quantityNF" => 0,
                            
    "quantityS" => 0,
                            
    "quantityNS" => 0,
                            
    "quantitypos" => 0,
                            
    "Prezzo_unitario" => $row_s['Prezzo_unitario'
                        ); 
                      
                      
                }else{ 
                      
                    
    $message="<div><center><font color='red'><b><JavaBlink>ERRORE:</JavaBlink> <u>Non esiste un prodotto con quel codice.</u></b></font></center></div><br>"
                      
                } 
                  
            } 
              
        } 
    Salve gente, ho un problemino... ho un tabella, con molti prodotti...cliccando su un link vado ad aggiungere questi prodotti ad un carrello...il problema è che alcuni di questi prodotti hanno degli ID che sono composti da lettere,punti, trattini etc:

    esempio: A350B56 , A89.501 ETC...

    quando vado a inserire prodotti che hanno id composti da soli numeri esempio: 005392129 , li aggiunge tranquillamente , quando invece aggiungo gli altri con punti e lettere, il carrello non li prende...ho capito che il problema sta sulla funzione intval()... ho provato a toglierla , facendo direttamente $id=$_GET['id'] ma in quel caso mi viene restituito l'$message che mi dice che quei id non esistono... come faccio a passare anche id composti da punti e lettere? non vorrei andare a modificare tutti gli id dei prodotti, ne ho tantissimi e sarebbe una tortura
    Ultima modifica di Punix; 02-03-2021 a 18:03

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,130
    Trattandosi di id che non sono numeri interi, intval() è sbagliato a prescindere, perché un id come 005392129 ti diventa 5392129, e sono 2 cose diverse.
    Devi quindi trattare gli id come stringhe.

    Stampa a video $_GET['id'], verifica cosa arriva allo script, sia con gli id solo numerici che con quelli alfanumerici.
    Se il codice è esattamente come l'hai riportato c'è un errore nel tag <php inserito nel link, manca il ? dopo < e prima di >
    Earth2: 3QCNSPFQUH

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    I tag li ho omessi di proposito perché il forum mi blocca se li metto.. ora provo e ti dico cosa ricevo a video

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    si infatti: con intval()

    450003302 -------> 450003302 (giusto)
    3567.90 --------> 3567
    A5678B --------> 0
    002455 ----------> 2455

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    alhazared ho usato strval() e adesso i valori mi arrivano tutti giusti...soltanto che stavolta quelli con punti e/o lettere quando faccio la select nel database non me li trova.. infatti mi restituiscono il messaggio che io mando a video quando non trovo id nel database ovvero:

    "non esiste un prodotto con quel codice" ... secondo te da cosa puo dipendere?
    Ultima modifica di Punix; 02-03-2021 a 19:27

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,130
    Ma perché devi passare i dati in arrivo per forza in qualche funzione?
    Usali così come li ricevi, che problema ti da se fai così?

    Se lo fai per la validazione non è il metodo corretto, perché usi funzioni che modificano i tuoi dati. La validazione non deve modificare i valori, deve solo dirti se sono validi o no.
    In questo caso puoi usare un'espressione regolare che accetti solo numeri, lettere ed i simboli che ti aspetti, come il . e il -
    Earth2: 3QCNSPFQUH

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    anche usandoli cosi come li ricevo senza passarli ad una funzione, quindi direttamente:

    $id= $_GET['id'];

    stampo come vedi $id a video e mi arriva giusto, ma poi quando vado a fare la query per verificare se esiste un prodotto con quel'id prima di creare l'array e aggiungerlo al carrello, mi viene restituito il messaggio che "non esiste un prodotto con quell' ID , quindi significa che mysqli_num_rows($query_s) non è diversa da zero... non capisco forse arriva alla query un id con degli "spazi" che magari io non vedo? perchè a video gli id mi sembrano giusti

    if(mysqli_num_rows($query_s)!=0){
    ....
    }else{ echo " non esiste un prodotto con quell' ID ";}

    Codice PHP:
       $id$_GET['id']; 
              
              echo 
    "$id"
              
            if(isset(
    $_SESSION['cart'][$id])){ 
                  
                
    $_SESSION['cart'][$id]['quantity']++; 
                
    $_SESSION['cart'][$id]['quantityF']++;
                
    $_SESSION['cart'][$id]['quantityNF']++;
                
    $_SESSION['cart'][$id]['quantityS']++;
                
    $_SESSION['cart'][$id]['quantityNS']++;
                
    $_SESSION['cart'][$id]['quantitypos']++;
                  
            }else{ 
                  
                
    $sql_s="SELECT * FROM inventario
                    WHERE Cod_prodotto=
    {$id}"
                
    $query_s=mysqli_query($link,$sql_s); 
                if(
    mysqli_num_rows($query_s)!=0){ 
                    
    $row_s=mysqli_fetch_array($query_s); 
                      
                    
    $_SESSION['cart'][$row_s['Cod_prodotto']]=array( 
                            
    "quantity" => 1,
                            
    "quantityF" => 0,
                            
    "quantityNF" => 0,
                            
    "quantityS" => 0,
                            
    "quantityNS" => 0,
                            
    "quantitypos" => 0,
                            
    "Prezzo_unitario" => $row_s['Prezzo_unitario'
                        ); 
                      
                      
                }else{ 
                      
                    
    $message="<div><center><font color='red'><b><JavaBlink>ERRORE:</JavaBlink> <u>Non esiste un prodotto con quel codice.</u></b></font></center></div><br>"
                      
                } 

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    il problema si verifica sempre quando aggiungo al carrello prodotti con id composti da lettere e numeri, o altri caratteri come punti etc...in quel caso mi dice che non esistono prodotti con quell'ID ( ma in realtà a me risultano che ci sono nel DB), mentre se l'id è composto da solo numeri, la query select funziona



    edit: ho aggiunto nell'echo dell errore,
    codice:
      . mysqli_error($link);
    e se provo ad aggiungere un prodotto composto da lettere e numeri mi dice questo:

    aggiungo esempio il prodotto con codice: C160CIP20B

    il risultato p:
    ERRORE: Non esiste un prodotto con quel codice.





    Unknown column 'C160CIP20B' in 'where clause'





    forse è colpa delle parentesi graffe nella query? ={$id}
    Ultima modifica di Punix; 03-03-2021 a 13:34

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,130
    Andiamo con ordine, la colonna Cod_prodotto nel DB di che tipo è? varchar?
    Se fai una ricerca a mano direttamente sul DB da phpMyAdmin lo trovi l'ID che hai indicato sopra e che non ti risulta?

    Se le cose appena dette sono a posto, stampa a video con un echo la query prima di eseguirla, vedi se viene generata correttamente, magari copiala ed eseguila direttamente su phpMyAdmin per vedere cosa restituisce.
    Earth2: 3QCNSPFQUH

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,591
    Nella query devi mettere {$id} tra singoli apici:

    SELECT * FROM inventario
    WHERE Cod_prodotto='{$id}'

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 © 2021 vBulletin Solutions, Inc. All rights reserved.