Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24

Discussione: problema con intval()

  1. #11
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    1) bisogna conoscere il tipo nella colonna id_prodotto
    2)Le variabili da fonte esterne sono stringhe.
    Se non è di tipo varchar (cioè int) purtroppo sei limitato dal tuo database e quindi dovresti cambiare in varchar, ovviamente prima effettua un backup altrimenti non fare nulla.
    Se di tipo varchar puoi usare la variabile poiché è già stringa (comunque giustamente dovresti creare una regex per validare/sanificare l'input esterno).
    Fai come consigliato da Alzhared, dopo rifletti e poni i tuoi dubbi o errori.

  2. #12
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    allora id_prodotto nel DB è di tipo varchar(200) con codifica caratteri utf8_unicode_ci.... se eseguo la select in phpmyadmin funziona:

    SELECT * FROM `inventario` WHERE id_prodotto='C160CIP20B'

    e mi restituisce il record giusto.

    stampando la query ho questo: SELECT * FROM inventario WHERE id_prodotto=C160CIP20B

    effettivamente provandola in phpmyadimin mi restituisce l errore con where clause... vuole gli apici mi sa...

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

    provando a mettere quell'id tra gli apici come ha consigliato darbula ...WHERE id='{$id}'

    la query è questa: SELECT * FROM inventario WHERE Cod_prodotto='C160CIP20B'

    solo che nel carrello mi viene aggiunto qualcosa di "vuoto"

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

    esempio: parto con il carrello vuoto




    aggiungo al carrello il prodotto con id 4018653834138

    echo $id ---------> 4018653834138
    echo $query ---------> SELECT * FROM inventario WHERE id_prodotto='4018653834138'

    ll prodotto viene aggiunto al carrello correttamente




    adesso provo ad aggiungere al carrello il prodotto con id C160CIP20B
    echo $id ---------> C160CIP20B
    echo $query ---------> SELECT * FROM inventario WHERE id_prodotto='C160CIP20B'

    al carrello viene aggiunta un qualcosa di vuoto sembra, infatti facendo il checkout il carrello poi risulta vuoto

  3. #13
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Devi imparare a fare debugging.
    Stampa a video ciò che ti restituisce la query col codice alfanumerico e vedi cosa contiene, così sai cosa arriva al codice che deve inserire le informazioni nel carrello e ti rendi conto se qualcosa non va.

    Stampa sempre i contenuti delle variabili che ti danno problemi, non dare mai per scontato che contengano ciò che pensi tu.

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Devi imparare a fare debugging.
    Stampa a video ciò che ti restituisce la query col codice alfanumerico e vedi cosa contiene, così sai cosa arriva al codice che deve inserire le informazioni nel carrello e ti rendi conto se qualcosa non va.

    Stampa sempre i contenuti delle variabili che ti danno problemi, non dare mai per scontato che contengano ciò che pensi tu.
    sorry ...allora

    echo $id ---------> C160CIP20B
    echo $sql_s ---------> SELECT * FROM inventario WHERE id_prodotto='C160CIP20B'
    echo $row_s -------------> Array
    echo '<pre>';
    print_r($_SESSION['cart'][$row_s['id_prodotto']]);
    echo '</pre>';

    risultato:
    Array
    (
    [quantity] => 1
    [quantityF] => 0
    [quantityNF] => 0
    [quantityS] => 0
    [quantityNS] => 0
    [quantitypos] => 0
    [Prezzo_unitario] => 1.00
    )
    bhooo sembra giusto...perchè quando gli id sono composti oltre da numeri anche da lettere o altri caratteri nel carrello mi viene inserito qualcosa di vuoto? non riesco a capire

    Codice PHP:
      }else{ 
                  
                
    $sql_s="SELECT * FROM inventario
                    WHERE Cod_prodotto='
    {$id}'"
                        echo 
    "$sql_s";
                
    $query_s=mysqli_query($link,$sql_s); 
                if(
    mysqli_num_rows($query_s)!=0){ 
                    
    $row_s=mysqli_fetch_array($query_s); 
                    echo 
    "$row_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'
                        ); 
    Ultima modifica di Punix; 03-03-2021 a 16:29

  5. #15
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Ok base.
    Dovresti anche considerare di impostare error_reporting = -1 nel tuo php.ini e display_errors = On con display_startup_errors = On se sei in modalità di sviluppo per vedere tutti gli errori fatali / di analisi o impostare error_log sul file desiderato per registrare gli errori invece di display_errors in produzione (questo richiede log_errors da accendere).
    Mentre sul server di produzione via lato server potrai impostare la funzione error_reporting(0); e opzionalmente la funzione ini_set.
    Spero ti aiuti.
    Da php 7.1 la sessione non è più inizializzata se non attiva.
    Da php 5.4 esiste session_status,
    Codice PHP:
    if(session_status() != PHP_SESSION_ACTIVE {
    session_start();

    Ovviamente non dovrai avere output altrimenti che abiliti a fare la sessione.
    Il semplice echo funziona con stringa, mysqli_query ritorna un un'oggetto mysql in caso di esito positivo di una SELECT
    Codice PHP:
    if(is_object($query_s)) {
    // true
    } else {
    // false

    usa var_dump per le stringhe e l'array mentre per l'oggetto esegui la modifica come proposto e valorizzi a video solo se false.
    Ultima modifica di darbula; 03-03-2021 a 16:39

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    uuuh grazie darbula allora aggiungendo

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);


    il carrello mi da questo:



    sono andato a vedere nella riga 75, e ho questo:



    è questo l errore

  7. #17
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Ok rileggi, ti ho indicato sia php.ini (configurazione globale) che ini_set (configurazione locale).
    Se usi php >= 7.1 devi per forza avviare la sessione e generalmente lo si fa con session_start() e da php 5.4 puoi anche farlo con il codice proposto in precedenza;
    Stai facendo echo markup html quindi devi inserire il session_status all'inizio come indicato nel precedente messaggio.
    MYSQLY: L'errore ti indica che la SELECT è fallita in caso di fallimento restituisce false mentre in caso di esito positivo di una SELECT restituisce un'oggetto mysql (codice proposto in precedenza).
    EDIT: prova temporaneamente con un diverso id utente della tua sessione.
    Ultima modifica di darbula; 03-03-2021 a 17:17

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Ok rileggi, ti ho indicato sia php.ini (configurazione globale) che ini_set (configurazione locale).
    Se usi php >= 7.1 devi per forza avviare la sessione e generalmente lo si fa con session_start() e da php 5.4 puoi anche farlo con il codice proposto in precedenza;
    Stai facendo echo markup html quindi devi inserire il session_status all'inizio come indicato nel precedente messaggio.
    MYSQLY: L'errore ti indica che la SELECT è fallita in caso di fallimento restituisce false mentre in caso di esito positivo di una SELECT restituisce un'oggetto mysql (codice proposto in precedenza).

    ok session_start() fatto, già l avevo inserito... la versione php che utilizzo è 7.3... pultroppo al php.ini non ho accesso, il servizio di hosting che utilizzo non mi permette di accedervi... ini_set utilizzata..

    l unica cosa che non ho capito...dove metto quel controllo

    if(is_object($query_s)) {
    // true
    } else {
    // false
    }


    che mi hai gentilmente mostrato?

  9. #19
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Solo per debug è il risultato di mysqli_query, la variabile dunque avrà tale valore va inserita in seguito
    Codice PHP:
    $sql false// metti caso mysqli_query per la SELECT restituisce false
    if(is_object($sql)) {
    // oggetto mysqli, significa true
    //tutto il resto del codice
    echo 'buona programmazione';
    } else {
    // false
    echo 'spiacente si è verificato un\'errore';

    Ho editato il precedente messaggio cambia utente per non riscontrare falsi positivi tra i dati già salvati in una sessione. (Se nuovo è impossibile che esista qualcosa per esso).
    Ultima modifica di darbula; 03-03-2021 a 17:35

  10. #20
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    codice:
       $sql_s="SELECT * FROM inventario
                    WHERE id_prodotto='{$id}'"; 
                        echo "$sql_s";
                $query_s=mysqli_query($link,$sql_s); 
                
                if(mysqli_num_rows($query_s)!=0){ 
                    $row_s=mysqli_fetch_array($query_s); 
                    
                      
                     if(is_object($sql_s)) {
                         echo "$query_s";
                     } else {
                       echo"false";
                     }
    risultato false

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