Salta al contenuto
  • Categorie
  • Recenti
  • Tag
  • Popolare
  • Utenti
  • Gruppi
Collassa
Logo del marchio
  1. Home
  2. Coding e customizzazione (PHP, HTML, CSS)
  3. Difficoltà nello script php di scrittura record sql

Difficoltà nello script php di scrittura record sql

Pianificato Fissato Bloccato Spostato Coding e customizzazione (PHP, HTML, CSS)
14 Post 4 Autori 160 Visualizzazioni
  • Da Vecchi a Nuovi
  • Da Nuovi a Vecchi
  • Più Voti
Effettua l'accesso per rispondere
Questa discussione è stata eliminata. Solo gli utenti con diritti di gestione possono vederla.
  • robjrobjR Non in linea
    robjrobjR Non in linea
    robjrobj
    scritto su ultima modifica di robjrobj
    #5
    <!DOCTYPE html>
    <html lang="it">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>scrittura_bolletta</title>
        <link rel="stylesheet" href="css/form.css">
    </head>
    <body>
    <?php
    try{
        $conn = new mysqli("localhost","matteo","spranga","bollette_via_miserocchi");
        }catch(Exception $e){
            $error = $e -> getMessage();
            echo "<div class='errore-db'><p class='connect-error'>$error</p></div>";
        }
    $utenza = $_POST["utenza"];
    $data_emissione = $_POST["data_emissione"];
    $consumo_fatturato_mc = $_POST["cons_fat_mc"];
    $consumo_fatturato_kwh = $_POST["cons_fat_kwh"];
    $prezzo_unitario = $_POST["prezzo_€"];
    $spesa_materiale = $_POST["sps_mat_€"];
    $altri_oneri = $_POST["altri_oneri_€"];
    $conguagli = $_POST["conguagli_€"];
    $importo_fattura = $_POST["imp_fat_€"];
    var_dump($_POST);
    if($utenza==='hera_acqua'){
        $insert_sql = "INSERT INTO hera_acqua (
            data_emissione,
            consumo_fat_mc,
            prezzo_€,
            sps_materiale_€,
            altri_oneri_€,
            conguagli_€,
            imp_fat_€)
            VALUES(
            '$data_emissione',
            '$consumo_fatturato_mc',
            '$prezzo_unitario',
            '$spesa_materiale',
            '$altri_oneri',
            '$conguagli',
            '$importo_fattura');";
    }elseif($utenza==='hera_gas'){
        $insert_sql = "INSERT INTO hera_gas (
            data_emissione,
            consumo_fat_mc,
            prezzo_€,
            sps_materiale_€,
            altri_oneri_€,
            conguagli_€,
            imp_fat_€)
            VALUES(
            '$data_emissione',
            '$consumo_fatturato_mc',
            '$prezzo_unitario',
            '$spesa_materiale',
            '$altri_oneri',
            '$conguagli',
            '$importo_fattura');";
    }
    elseif($utenza==='hera_luce'){
        $insert_sql = "INSERT INTO $utenza (
            data_emissione,
            consumo_fat_kwh,
            prezzo_€,
            sps_materiale_€,
            altri_oneri_€,
            conguagli_€,
            imp_fat_€)
            VALUES(
            '$data_emissione',
            '$consumo_fatturato_kwh',  <!-- Corretto: ora usa kwh invece di mc -->
            '$prezzo_unitario',
            '$spesa_materiale',
            '$altri_oneri',
            '$conguagli',
            '$importo_fattura');";
    }
    
    try {
        $risultato = $conn->query($insert_sql);
        if ($risultato === TRUE) {
            echo "inserimento bolletta riuscito";
        } else {
            echo "inserimento bolletta fallito: " . $conn->error;
        }
    } catch (Exception $e) {
        echo "Errore durante l'esecuzione della query: " . $e->getMessage();
    }
    
    $conn->close();
    ?>
    <br>
    <div class='return'>
        <a href="http://localhost/utenze/insert_bollette.php">torna alla maschera di inserimento    
        </a>
    </div>
    </body>
    </html>
    

    Roberto Robuffo - www.digitalypainter.it - 123lotto.it

    1 Risposta Ultima Risposta
    0
    • K Non in linea
      K Non in linea
      kippo
      scritto su ultima modifica di
      #6

      non so se e' attinente all' argomento e se robjrobj ha gia' risolto il probl
      ma li' manca il default dell' if, mi spiego: hai un

      if acqua { .... }
      else if gas { .... }
      else if luce { .... }
      

      cosi' nella remotissima possibilita' che utenza non sia nessuno dei 3 il record non viene caricato
      invece per sicurezza metterei:

      if acqua { .... }
      else if gas { .... }
      else { .... }
      

      oppure, ancor meglio:

      if acqua { .... }
      else if gas { .... }
      else if luce { .... }
      else { errore }
      

      ciao

      1 Risposta Ultima Risposta
      0
      • T Non in linea
        T Non in linea
        teopieri
        scritto su ultima modifica di
        #7

        Ciao.
        Grazie per il suggerimento, ovviamente lo seguirò. Ma prima devo capire perché diavolo lo script non funziona. Cioè la query non viene eseguita. Eppure ho uno script identico funzionante dove cambiano solo i dati ovviamente le tabelle db che devo essere popolate.
        Appena posso, anche se Jabba mi ha già risposto che nn dovrebbe dipendere da questo, modifico gli attributi delle colonne delle tabella sql che ora sono impostate a decimal(5,2) a numerici(5,2), sicuramente avrà ragione Jabba ma .. non avendo null'altro da controllare ed essendo che l'altro script funziona, a sto punto può essere solo (spero ben) un problema di tipo di dato che lo script cerca di inserire ma che non vengono accettati dal server sql. (Mariadb).
        Grazie e buona giornata.
        Filippo

        1 Risposta Ultima Risposta
        0
        • jabbaJ Non in linea
          jabbaJ Non in linea
          jabba
          scritto su ultima modifica di jabba
          #8

          Ciao, ho dato un'occhiata al codice. Qualche considerazione:

          il messaggio di errore per l'inesrimento fallito è sbagliato, prova così:

          echo "inserimento bolletta fallito: " . $conn->error . "<br>Query: $insert_sql";
          

          Quando inserisci i valori cerca di pulirli prima, non si sa mai cosa ci può essere dentro. Di solito uso un real_escape per tirare fuori una cosa del genere:

          $data_emissione = $conn->real_escape_string($_POST["data_emissione"]);
          

          Poi ho un altro mega dubbio sul nome delle colonne: sicuro possano finire con €? Personalmente evito sempre di mettere caratteri speciali nel nome delle tabelle e delle colonne.
          In generale ti consiglio vivamente di usare i backtick per i nomi delle colonne, così non hai problemi di formattazione del testo:

          INSERT INTO tabella (`prezzo_€`, `imp_fat_€`, ...)
          

          Per ora non mi viene in mente altro...

          Gianluca Gabella - smanettone IT, webbarolo, Joomler per passione - pixed.it

          T 1 Risposta Ultima Risposta
          0
          • jabbaJ Non in linea
            jabbaJ Non in linea
            jabba
            risposto a jabba su ultima modifica di
            #9

            @jabba ha detto in Difficoltà nello script php di scrittura record sql:

            p.s: abilita tutti i tipi di debug possibili lato php, tipo:

            il codice per il debug di cui ti parlavo qui puoi metterlo all'inizio del file, dentro un blocco PHP:

            <?php
            
            error_reporting(E_ALL);
            ini_set('display_errors', 1);
            mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
            
            // tutto il resto del PHP della pagina
            

            Gianluca Gabella - smanettone IT, webbarolo, Joomler per passione - pixed.it

            1 Risposta Ultima Risposta
            0
            • T Non in linea
              T Non in linea
              teopieri
              risposto a jabba su ultima modifica di
              #10

              @jabba
              Grazie per la tua consueta disponibilità....
              Real escape è una funzione che nn conoscevo in ogni caso provo a modificare tutto secondo i suggerimenti avuti.
              Sul fatto del carattere € francamente non lo ritenevo un problema visto che eseguendo delle query INSERT into direttamente nella console mysql non ottengo nessuno errore e il record viene popolato... ma possono cmq dare fastidio a php.... può essere benissimo.... d'altronde l'altro script funzionante non ne contiene di caratteri speciali per cui può essere un problema che fin ora non si era posto.
              Interessante la correzione sul messaggio di errore. Infatti mi chiedevo perché anche nello script su cui mi son basato, simulando un errore a livello di query, ottenevo una pagina bianca senza alcun messaggio di errore.
              Spero di poter presto applicare le correzioni suggerite e di poter darVi un riscontro.
              Grazie infinite.
              Filippo.

              1 Risposta Ultima Risposta
              0
              • T Non in linea
                T Non in linea
                teopieri
                scritto su ultima modifica di
                #11

                Buona sera.
                Ho risolto con il debug che mi hai suggerito. Avevo anche sbagliato una delle tre query per un nome campo che era abbreviato diversamente.
                L'unica cosa che nn torna errore secondo l'echo impostato è appunto l'errore di esecuzione della query.
                Simulando un errore infatti mi da Fatal error etc.... e mi dice che ovviamente non trova il campo col nome sbagliato ma nn mi ritorna la echo "inserimento fallito"
                cmq ora le query insert into funzionano.
                GraZie mille di nuovo
                Filippo

                1 Risposta Ultima Risposta
                2
                • jabbaJ Non in linea
                  jabbaJ Non in linea
                  jabba
                  scritto su ultima modifica di
                  #12

                  Quindi non ti ha dato problemi il simbolo € nelle colonne? Buono a sapersi, grazie per il feedback!

                  Gianluca Gabella - smanettone IT, webbarolo, Joomler per passione - pixed.it

                  T 1 Risposta Ultima Risposta
                  0
                  • T Non in linea
                    T Non in linea
                    teopieri
                    scritto su ultima modifica di
                    #13

                    A dire il vero guarda . Ho messo i backtick per sicurezza quindi provo a toglierli poi ti dico.
                    Considera che io ho il server apache e Maria db su so Debian 12 che magari essendo conservatrice magari ha versioni differenti cioè meno aggiornate.
                    Cmq appena riesco a faccio la prova ma ho idea che avendo scazzato il nome di un campo nella query sql ....
                    A Presto
                    FILIPPO

                    1 Risposta Ultima Risposta
                    0
                    • T Non in linea
                      T Non in linea
                      teopieri
                      risposto a jabba su ultima modifica di
                      #14

                      @jabba
                      Ciao,
                      ti confermo che anche togliendo i backtick l'esecuzione della query avviene senza problemi.

                      vorrei capire perchè nn mi viene fuori l'errore di esecuzione della query.... che tipo di errore posso simulare?
                      quelli che ho ottenuto sabotando un nome di campo per esempio dipendono dall'abilitazione delle funzioni di debug che ora che bene o male ho risolto posso commentare per disattivarle.

                      va beh più tardi faccio delle altre prove.
                      Buona serata e grazie ancora
                      Filippo.

                      1 Risposta Ultima Risposta
                      0

                      • Accedi

                      • Non hai un account? Registrati

                      • Accedi o registrati per effettuare la ricerca.
                      Powered by NodeBB Contributors
                      • Primo post
                        Ultimo post
                      0
                      • Categorie
                      • Recenti
                      • Tag
                      • Popolare
                      • Utenti
                      • Gruppi