Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154

    errore controllo if else

    salve gente..dove sbaglio? se la condizione if ($qua_fatturate < $quantita_vendita) è vera, allora ricevo l echo di errore e si dovrebbe fermare tutto li...invece tutto continua e mi viene eseguita la query $sql6 e restituito l echo successo ugualmente (cosa che non dovrebbe accadere)

    Codice PHP:
    if($fatturato == "Si"){
    $sql5 "SELECT Quantita_fatturate FROM bombole WHERE chili_bombola='$tipo_b'";
    if(
    $result5 mysqli_query($link$sql5)){
        if(
    mysqli_num_rows($result5) > 0){
            while(
    $row5 mysqli_fetch_array($result5)){
            
    $qua_fatturate $row5['Quantita_fatturate'];
    }
    mysqli_free_result($result5);        
    }
    }
    if (
    $qua_fatturate $quantita_vendita){
    echo 
    "ERRORE, qua_vendita non puo essere piu grande di qua_fatturate";
    }else{

    $sql6 "UPDATE bombole SET Quantita_fatturate=Quantita_fatturate - " $quantita_vendita " WHERE chili_bombola='$tipo_b'";

    if(
    $result6 mysqli_query($link$sql6)){      
      
    mysqli_free_result($result6);

    echo 
    "SUCCESSO";
    }
    }


  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Devi controllare $qua_fatturate solo quando la query è diversa da false, tu lo fai indistintamente credo stai controllando null < 1 che null si traduce a 0.
    Metti anche il var_dump( $qua_fatturate, $quantita_vendita ); alla fine prima di modificare il codice

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    il var dump mi restituisce i valori corretti.... string(2) "14" string(2) "15"
    14 è il valore che io ho sul db -------> quello che io prendo dal database cosi $qua_fatturate = $row5['Quantita_fatturate'];
    15 è il valore che gli passo io tramite un form in un altra pagina e che arriva nella pagina dove eseguo il controllo cosi: $quantita_vendita = $_GET['quantita_vendita'];

    $sql6 dovrebbe essere eseguito solo se io gli passo un valore $_GET['quantita_vendita']; non superiore a 14..perchè se come nel mio caso io supero 14 facendogli arrivare 15 , lui dovrebbe darmi l errore e non proseguire eseguendo sql6 e dandomi anche successo..

    if (14 < 15) echo ERRORE... l'if mi funziona , il problema è che quando mi da errore si dovrebbe fermare al que punto... se la condizione è vera mi dai errore ALTRIMENTI mi esegui $sql6 e mi dai l echo SUCCESSO....

    quello che ottengo io invece è entrambi ovvero mi fa il controllo, vede che la condizione è vera allora mi da ERRORE e prosegue eseguendo la sql6 e restituendomi anche successo.

    risultato

    ERRORE
    SUCCESSO

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Hai fatto un copia/incolla preciso del codice che esegui realmente oppure hai tolto/modificato qualcosa per postare qui sul forum?
    Scritto così sembrerebbe corretto.

    Una domanda che esula dal problema, $sql5 ti restituisce sempre e solo 1 record? In tal caso perché usi un ciclo while per estrarlo? Non ha niente da ciclare se c'è solo un record, è uno spreco di risorse. Usa semplicemente mysqli_fetch_array() senza il while.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Forse chiami due volte la stessa pagina (lo stesso codice).
    Comunque è più corretto in questo modo se i valori sono anche di tipo intero.
    Codice PHP:
    if($fatturato == "Si"){
    $sql5 "SELECT Quantita_fatturate FROM bombole WHERE chili_bombola='$tipo_b' . 'LMIT 0,1'";
        if(
    $result5 mysqli_query($link$sql5)){
            if(
    mysqli_num_rows($result5) > 0){
              
    $row5 mysqli_fetch_array($result5);
              
    $qua_fatturate = (int) $row5['Quantita_fatturate'];
    mysqli_free_result($result5);
                if ( 
    $qua_fatturate $quantita_vendita) {
    echo 
    "ERRORE, qua_vendita non puo essere piu grande di qua_fatturate";
                }else{

                  
    $sql6 "UPDATE bombole SET Quantita_fatturate=Quantita_fatturate - " $quantita_vendita " WHERE chili_bombola='$tipo_b'";

                     if(
    $result6 mysqli_query($link$sql6)){      
      
                        
    mysqli_free_result($result6);

                        echo 
    "SUCCESSO";
                }
             }
          }
       }

    Se invece di valutare la condizione vera valuti la condizione falsa cioè
    Codice PHP:
    if ( !($qua_fatturate $quantita_vendita)){
    //query sql
    //ovviamente dovrà sempre esistere $quantita_vendita altrimenti è un errore di programmazione, lo stesso vale anche per $fatturato.
    } else {
    //errore

    Comunque $_GET significa valori inviati dal form e accodati alla url o semplicemente accodati alla url, non c'è bisogno di inviare da form ma puoi inserirli nella url ricordando che [] le parentesi quadre hanno uno scopo speciale per php che crea un array invece di una variabile... comunque dato1=val1+&dato2=val2+ dovrebbe essere dapprima recuperato effettuando urlencode (%hh o +) sulla chiave e valore esistono anche due funzioni php native parse_str e http_build_query (poiché $_GET usa urldecode internamente) poi giustamente potrai aggiungere alla url. Ma vabbè dettagli.
    Ultima modifica di darbula; 09-12-2020 a 14:58

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    niente signori non riesco a venirne a capo

    codice:
    if ($qua_fatturate < $quantita_vendita){
    echo "errore quantita_vendita non possono essere più grandi di qua_fatturate";
    return false;
    }else{
    
    $sql6 = "UPDATE bombole SET Quantita_fatturate=Quantita_fatturate - " . $quantita_vendita . " WHERE chili_bombola='$tipo_b'";
    codice:
    if ($qua_fatturate < $quantita_vendita){
    goto fine;
    }else{
    
    $sql6 = "UPDATE bombole SET Quantita_fatturate=Quantita_fatturate - " . $quantita_vendita . " WHERE chili_bombola='$tipo_b'";
    come vi ho postato sopra ho provato anche a inserire un return false dentro quell'if per farlo fermare li, oppure ho messo un goto per rispedirlo da un altra parte, ma niente non ne vuole sapere lui va avanti...quel maledetto $sql6 viene sempre eseguito

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sicuro che stai modificando il file giusto? Non è che te ne eri fatta una copia per un qualche motivo e stai modificando il file sbagliato?
    Prova a cambiare il testo degli echo, vedi se questa modifica te la ritrovi sulla pagina.
    Ti propongo questa possibilità perché in passato mi è capitata, stavo uscendo matto ed era questo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    154
    vi metto l'intero codice magari riuscite voi a capire dove mi sono incasinato

    form su bombole.php
    codice HTML:
    <form action='bombole2.php' method='get' id='send'>
    <input type='text' id='tipo_b' name='tipo_b' placeholder='Bombola di chili:' autofocus>
    <input type='text' id='quantita_vendita' name='quantita_vendita' placeholder='Inserisci Quantitá'>
    <br><br><b>SONO DA SCONTRINARE ??</b><br><br>
    <input type='checkbox' class='radioCheck' name='scontrino' id='c01' value='Si' onclick='check(this);' />Si     
    <input type='checkbox' class='radioCheck' name='scontrino' id='c02' value='No'  onclick='check(this);' />No
    <br><br><b>SONO FATTURATE ??</b><br><br>
    <input type='checkbox' class='radioCheck2' name='fatturato' id='c03' value='Si' onclick='check2(this);' />Si     
    <input type='checkbox' class='radioCheck2' name='fatturato' id='c04' value='No'  onclick='check2(this);' />No
    <br><br><b>DOVE SONO STATE VENDUTE ??</b><br><br>
    <input  type='checkbox' class='radioCheck3' name='luogo_vendita' id='c05'  value='domicilio' onclick='check3(this);' />Domicilio     
    <input  type='checkbox' class='radioCheck3' name='luogo_vendita' id='c06'  value='negozio'  onclick='check3(this);' />Negozio
    <br><br><input type='submit' id='submit' name='vendi'  value='Vendi'></form>



    dopo aver cliccato vendi ottengo:



    se l utente prova adesso a vendere 15 unità di bombola e decide che debbano essere di quelle fatturate...controllo innanzitutto che non supera le quantita rimaste totali (in rosso), poi però devo controllare anche che non supera le quantita fatturate... è questo secondo controllo per le quantità fatturate che mi crea problemi...lui si accorge che sto provando a vendere 15 unità fatturate mentre me ne rimangono solo 14, mi dice ERRORE stai sbagliando, però non si ferma li ma mi scala ugualmente le quantità fatturate, quindi il risultato che ottengo è:

    QUANTITA RIMASTE = 19 -15 = 4
    QUANTITA FATTURATE = 14 - 15 = -1 (NON devo andare in negativo ma fermarmi a zero quindi io al massimo avrei potuto vendere 14 unità fatturate)


    vi metto in allegato il codice di bombole2.php quello che fa tutto il lavoro e dove si presenta il problema (l ho commentato per aiutarvi a capire, scusate per l indentazione del codice )
    File allegati File allegati

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho modificato un po' il tuo codice in modo che sulla pagina ti scriva ciò che sta facendo per vedere se fa ciò che ti aspetti.
    Inoltre ho cambiato alcune parti, ad esempio ho tolto 2 while che penso non servissero, se una query trova sicuramente 0 o 1 record, è inutile ciclare per fare il fetch del contenuto. Ho poi rivisto la posizione delle mysqli_free_result(...), ho anche aggiunto una funzione abort($link, $message) per comodità.
    Soprattutto ho inglobato il tutto all'interno di una transazione, in una situazione simile con update su tabelle diverse in momenti diversi, devi essere certo che vengano eseguite tutte oppure nessuna altrimenti rischi di trovarti con dati inconsistenti se qualcosa andasse storto su un'update che non fosse la prima.

    Il file lo trovi qui allegato, metti in conto che potrebbe darti qualche errore di sintassi, non ho potuto eseguirlo non avendo un db coerente sul quale farlo girare.
    File allegati File allegati

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Ciao pure io ho modificato la parte iniziale di bombole2.php hanno significato solamente la checkbox inviata (il valore si viene convertito al boleano vero) mentre $error_string diversa da stringa vuota crea una variabile per mia comodità senza markup hmtl infine tutto il codice dovrà essere inserito dove vedi //php code.
    https://3v4l.org/s45Bk
    Vorrei salvare l'output del tuo vecchio codice, sei interessato? Così creo una funzione che memorizza quelle variabili in un file se trovi due ricorrenze inviando solo una volta dal tuo browser significa che il codice bombole2.php viene eseguito due volte.
    PS. Ovviamente session_start e il controllo di variabile $_SESSION dovrà essere in alto prima di qualsiasi output (comunque la sessione si chiude creando la variabile $_SESSION altrimenti verrà chiusa al termine dello script).
    Ultima modifica di darbula; 10-12-2020 a 17:50

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.