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

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    158
    DARBULA si fai pure

    alhazred nessun errore di sintassi... ma:

    per quanto riguarda la parte if($fatturato == "Si")

    - se inserisco una quantità di vendita inferiore alla quantità fatturata tutto va bene come è giusto che sia.
    - se inserisco una quantità di vendita superiore alla quantità fatturata, mi restituisce l echo dicendomi che la quantità di vendita non puo superare la quantita fatturata, ma poi continua ugualmente a fare le altre query (quindi il problema di prima permane), INOLTRE la quantità fatturata non va più in negativo ma stavolta rimane bloccata allo stesso valore..in questo caso smette di funzionare anche ($luogo_vendita == "negozio") che non mi aggiunge piu alcuna unità.

    per quanto riguarda la parte if($fatturato == "No")

    - se inserisco una quantità di vendita inferiore alla quantità non fatturata NON FUNZIONA e si ferma anche if($luogo_vendita="negozio").
    - se inserisco una quantità di vendita superiore alla quantità non fatturata, mi restituisce l echo dicendomi che la quantità di vendita non puo superare la quantita non fatturata ma poi continua ugualmente a fare le altre query (quindi il problema di prima permane), INOLTRE in questo caso smette di funzionare anche ($luogo_vendita == "negozio") che non mi aggiunge piu alcuna unità.

    secondo me con tutti sti if, elseif, else il codice è impazzito haha..

    un informazione che posso darvi sulla versione php utilizzata dal mio servizio host è PHP 7.3

    la struttura della mia tabella bombole è la seguente:


  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Ok, farò qualche prova, intanto alcuni appunti sulla tabella: usa tipi di dato consistenti con ciò che ci devi mettere dentro.
    - Per i prezzi devi usare DECIMAL UNSIGNED
    - per le quantità devi usare SMALLINT UNSIGNED che arriva a 65.535, augurando tantissime vendite INT UNSIGNED che arriva a 16.777.215 ecc.. comunque qui trovi i range
    https://dev.mysql.com/doc/refman/8.0...ger-types.html
    - Per le immagini, si usa un campo varchar nel quale inserire il nome del file, l'immagine vera e propria si mette in una cartella e la si ripesca conoscendone il nome

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Ho sistemato un po' di warning che venivano fuori e riorganizzato un po' i messaggi che forse come li avevi scritti erano un po' fuorvianti, diceva "Francesco hai venduto..." anche quando la vendita in realtà non avveniva e forse era proprio quello che ti traeva in inganno.

    Ti allego il nuovo codice, testato e funzionante.
    File allegati File allegati

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    193
    Puoi inserire questa funzione alla fine di bombole2.php (il vecchio codice)?
    Codice PHP:
    $arr = array($tipo_b$quantita_vendita$scontrino$fatturato$luogo_vendita);
    var_x_error_log$arr );
    function 
    var_x_error_log$objectauto null ){
    ob_start(); // start buffer capture
    var_dump$objectauto ); // dump the value
    $contentsauto ob_get_contents(); // put the buffer into a variable
    ob_end_clean(); // end capture
    error_log$contentsauto3dirname(__FILE__) . '/test.log'); // log contents of the result of var_dump( $objectauto)

    Quando il tuo browser prova un singolo invio verrà creato il file test.log nella cartella corrente, per favore posta il contenuto per capire se il codice viene eseguito una o più volte.
    Mentre su questo messaggio https://forum.html.it/forum/showthre...1#post25558433 ti ho creato un codice che convalida i dati del form , in realtà poi si pensa a sanificare anche la query ma per adesso è superfluo.
    Per ogni tuo dubbio rimango a disposizione.
    Ultima modifica di darbula; 10-12-2020 a 22:09

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    158
    alhazred e darbula vi ringrazio inanzitutto per la pazienza...

    per alhazred, allora adesso facendo questo:



    il risultato è questo:

    codice:
    DEBUG 'sql': Ho diminuito la quantità di bombole rimaste, ne ho tolte 1
    
    DEBUG 'sql2': Ho incrementato la quantità di bombole vendute, ne ho aggiunte 1
    
    DEBUG 'sql4': Ho aumentato la quantità di bombole NON scontrinate, ne ho aggiunte 1
    
    DEBUG 'sql7': Ho recuperato la quantità di bombole NON fatturate, ne ho trovate 
    
    
    Rollback eseguito, il db non ha subito variazioni
    
    Errore quantita_vendita (1) non può essere maggiore di qua_n_fatturate ()



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

    per darbula.. ho ricaricato il vecchio codice e aggiunto quello che mi hai detto tu.

    il risultato è questo:

    codice:
    array(5) {
      [0]=>
      string(2) "10"
      [1]=>
      string(1) "1"
      [2]=>
      string(2) "No"
      [3]=>
      string(2) "No"
      [4]=>
      string(7) "negozio"
    }
    il vecchio codice l ho ricaricato negli allegati se volete
    File allegati File allegati

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Quote Originariamente inviata da Punix Visualizza il messaggio
    alhazred e darbula vi ringrazio inanzitutto per la pazienza...

    per alhazred, allora adesso facendo questo:
    il risultato è questo:

    codice:
    DEBUG 'sql': Ho diminuito la quantità di bombole rimaste, ne ho tolte 1
    
    DEBUG 'sql2': Ho incrementato la quantità di bombole vendute, ne ho aggiunte 1
    
    DEBUG 'sql4': Ho aumentato la quantità di bombole NON scontrinate, ne ho aggiunte 1
    
    DEBUG 'sql7': Ho recuperato la quantità di bombole NON fatturate, ne ho trovate 
    
    
    Rollback eseguito, il db non ha subito variazioni
    
    Errore quantita_vendita (1) non può essere maggiore di qua_n_fatturate ()
    1) C'è un errore su una riga nella sezione dove c'è la sql7, la riga dice
    $qua_n_fatturate = $row5['Quantita_n_fatturate'];

    ma dovrebbe essere
    $qua_n_fatturate = $row7['Quantita_n_fatturate'];

    2) Ciò che hai postato mi fa capire che hai impostato il report degli errori ad un livello che non mostra gli warning, che ti avrebbero fatto capire questo problema.
    Aggiungi come prima istruzione dello script
    error_reporting(E_ALL);

    3) Cancella la riga di codice:
    mysqli_free_result($result4);
    l'avevo dimenticata, le query update non restituiscono un recordset che va liberato, ritornano semplicemente true o false

    3) Non sapendo cosa contenesse il db prima di eseguire questo tentativo di vendita non capisco se il rollback abbia funzionato non permettendo modifiche o se invece le quantità siano cambiate.
    Nel caso il rollback non abbia fatto il suo lavoro, ricorda che la tabella deve usare il motore innodb, perché myisam non supporta le transazioni.

    4) Ricordati anche di cambiare il db dando ai campi il giusto tipo secondo ciò che devono contenere, è una cosa importante.

    Ti propongo qui sotto il codice per la tabella corretta

    codice:
    CREATE TABLE `bombole` (
      `chili_bombola` TINYINT UNSIGNED NOT NULL PRIMARY KEY,
      `Descrizione` varchar(500) NOT NULL,
      -- se cambi il sistema di salvataggio dell'immagine
      -- altrimenti rimetti il campo blob, ma te lo sconsiglio
      `img` varchar(200) NOT NULL,
      -- se non supera 999,99 euro, altrimenti 6,2
      `Prezzo_acquisto` DECIMAL(5,2) UNSIGNED NOT NULL DEFAULT 0,
      -- come sopra
      `Prezzo_unitario` DECIMAL(5,2) UNSIGNED NOT NULL DEFAULT 0,
      -- INT arriva a 16.777.215 ma vedi tu secondo le tue esigenze
      `Quantita_fatturate` 	 INT UNSIGNED NOT NULL DEFAULT 0,
      `Quantita_n_fatturate` INT UNSIGNED NOT NULL DEFAULT 0,
      `Quantita_rimaste` 	 INT UNSIGNED NOT NULL DEFAULT 0,
      `Quantita_vendute` 	 INT UNSIGNED NOT NULL DEFAULT 0,
      `scontrinato` 	 INT UNSIGNED NOT NULL DEFAULT 0,
      `non_scontrinato` 	 INT UNSIGNED NOT NULL DEFAULT 0,
      `v_domicilio` 	 INT UNSIGNED NOT NULL DEFAULT 0,
      `v_negozio` 		 INT UNSIGNED NOT NULL DEFAULT 0
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8_unicode_ci;
    Ultima modifica di Alhazred; 11-12-2020 a 12:01

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    193
    Devi sempre attenerti al primo errore, per favore usa il form con scontrino e fatturato su SI, hai un'ora di tempo per modificare il tuo messaggio (perché il primo codice da te postato controlla if($fatturato == 'SI')) non su NO e anche Domicilio al posto di Negozio.
    Cioè la copia esatta di questa discussione https://forum.html.it/forum/showthre...1#post25558427
    Ultima modifica di darbula; 10-12-2020 a 22:32

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    158
    scusa darbula avevo fatto confusione avendo modificato 10 mila volte sto codice...ecco a te darbula

    codice:
    array(5) {
      [0]=>
      string(2) "10"
      [1]=>
      string(1) "1"
      [2]=>
      string(2) "Si"
      [3]=>
      string(2) "Si"
      [4]=>
      string(9) "domicilio"
    }
    File allegati File allegati
    Ultima modifica di Punix; 10-12-2020 a 22:58

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    193
    Ciao se i dati sono già presenti puoi aggiornarli al valore attuale con UPDATE fai proprio questo (Per i campi Descrizione e Img potrebbe anche essere null inizialmente).
    Quindi se ci rifletti qualsiasi query potrà essere ridotta a uno, l'unico dato fondamentale è chili dove con una SELECT recuperi tutti i campi (ovviamente per il contesto del form occorrono necessariamente cinque campi) altresì quando almeno un valore sarà differente dovrai aggiornare altrimenti no (non credo sia così difficile verificare quale variabile è più grande poiché $quantita_vendita dovrà essere sempre uguale o minore a $quantita_rimaste altrimenti è un tipo speciale di errore).
    Secondo me questo codice è di più facile lettura https://3v4l.org/XFcoM come al solito in //php code dovrai inserire tutto il codice necessario per far funzionare la tua applicazione, ti connetti al database fai la SELECT e poi le tue operazioni mentre per $error_string puoi anche aggiungere uno spazio finale e mostri l'errore o gli errori nel form html.
    Ho scritto la funzione header perché è errata dopo l'output (altrimenti con browser differenti avrai comportamenti diversi), poi più avanti si forza UTF-8 alla connessione del database ma per adesso dobbiamo solo poter lavorare.
    Altresi ricorda che stai creando una pagina html e se non usi iframe potrai utilizzare una sola volta </html> che peraltro indica la fine della pagina.
    In sintesi //php code tutto il codice che deve fare UPDATE altrimenti errore da qualche parte.
    Ultima modifica di darbula; 11-12-2020 a 17:24

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    193
    Quindi alla fine farai una sanificazione della query con ciò che indica php https://www.php.net/manual/en/mysqli...statements.php su bind_param i sta per intero mentre s per stringa ovviamente se la condizione non è falsa, non è
    una sequenza pari a 0, non è una stringa vuota, non è un array vuoto o non null per php è vero quindi if($fatturato) o if($scontrino) che solo di default è 0 se la condizione è vera significa che devi convertire nella stringa SI altrimenti converti alla stringa NO (poiché nel mio codice converti il SI al valore boleano vero) per effettuare operazioni nel tuo database quando necessario.
    Ultima modifica di darbula; 11-12-2020 a 17:51

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