Visualizzazione risultati 1 fino 8 di 8

Discussione: Problemi con INSERT table

  1. #1
    talmtest non è connesso Neofita
    Data registrazione
    03-01-2019
    Messaggi
    9

    Predefinito Problemi con INSERT table

    Ciao ragazzi, ho un problema piuttosto strano: sto sviluppando un sito per la registrazione delle fatture dei fornitori, nel database ho creato diverse tabelle ma nel caso specifico, le tabelle interessate sono due: una tabella di testata e una di dettaglio. L'utente apre il sito e viene visualizzata una videata di scelta: nell'opzione "INSERISCI NUOVA FATTURA" a video compare una videata per l'inserimento di tutte le righe della fattura. Al salvataggio, il programma inserisce (dovrebbe inserire) tutte le posizioni della fattura nella tabella di dettaglio e alla fine inserisce la testata con i totali.
    La tabella di testata viene inserita senza problemi, mentre nella tabella di dettaglio i record non li scrive neanche a batterli col martello.
    La cosa strana è che il problema ce l'ho sul sito, mentre nel server XAMPP sul mio PC il programma funziona che è una meraviglia. Il programma è lo stesso dal momento che l'ho caricato con filezilla e idem per il database che l'ho importato con la funzione "IMPORTA". Ho dato uno sguardo alle versioni e ho visto che su Altervista c'è il server MySql mentre XAMPP c'è MariaDB, però mi sembra strano che una tabella venga scritta regolarmente mentre l'altra non se la fili affatto. Oltretutto la funzione di INSERT è la stessa. A titolo informativo aggiungo anche che ho attivato il motore InnoDB.

    Qualche idea in proposito? Anche perchè sennò rischio di buttare alle ortiche un mese di lavoro.
    Grazie a tutti
    Ultima modifica di talmtest : 01-03-2021 alle ore 20.04.09

  2. #2
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    3,998

    Predefinito

    Salve,
    può mostrare il codice relativo?

    Inoltre, come da regolamento(4.12), non è consentito abusare del servizio di restrizione aree tramite password. Ovvero, è consentito avere delle aree o pagine con accesso limitato tramite password, ma non è consentito bloccare il libero accesso per l'intero sito o la maggior parte di esso.

    Cordiali saluti.

  3. #3
    talmtest non è connesso Neofita
    Data registrazione
    03-01-2019
    Messaggi
    9

    Predefinito

    Mi scusi, cosa intende per blocco del sito? Io ho messo una password sul database, se questo non è permesso la tolgo subito, per il resto la password del sito è quella che mi ha rilasciato Altervista all'iscrizione. Intanto grazie per l'interessamento: di seguito il codice che richiama la function SAVE, poi, le invierò il codice delle function:
    Codice PHP:
    <?php
    session_start
    ();
    if(!isset(
    $_SESSION['utente']))
    {
    header("Location: index.php");
    }

    include
    __DIR__ . '/includes/Functions.php';

    $title = "Nuova Fattura";

    //PREPARAZIONE RIGHE DI DEFAULT
    $output = '';
    $select_forn = "Fornitore";
    $data_fatt = "Data Fattura";
    $numero = "Numero Fattura";

    if(isset(
    $_POST['fornitore']))
    {
    $select_forn = $_POST['fornitore'];
    }

    if(isset(
    $_POST['numero']))
    {
    $numero = $_POST['numero'];
    }

    if(isset(
    $_POST['data_fatt']))
    {
    $data_fatt = $_POST['data_fatt'];
    }

    $output = dettaglio_posizioni_fattura($output, 5);

    $record = array();
    $dettaglio = array();
    $chiave = array();
    try
    {
    include
    __DIR__ . '/includes/DatabaseConnection.php';
    $fornitori = SelectAllOrdinata($pdo, 'fornitori', '');

    if(isset(
    $_POST['salva']))
    {
    $output = '<tr id="tr';
    $esercizio = substr($_POST['data_fatt'],0,4);
    $codice_fornitore = strtok($_POST['fornitore'], "-");
    $numero_fattura = addslashes($_POST['numero']);
    $data_fattura = $_POST['data_fatt'];
    $tot_netto = 0;
    $tot_iva = 0;
    $tasso_sconto = 0;
    $tot_sconto = 0;
    $totale_fattura = 0;

    $item = $_POST['items'];
    $delitem = $_POST['del_items'];
    $da_elab = $item - $delitem;
    $indice = 1;
    $i = 1;
    $elaborati = 0;

    while(
    $elaborati != $da_elab)
    {
    if (isset(
    $_POST['descrizione'.$indice]))
    {
    $importo_netto = 0;
    $importo_iva = 0;
    $importo_sconto = 0;
    $importo_totale = 0;

    $record[] = " ";
    $dettaglio[] = " ";
    $chiave[] = " ";
    $posizione = $indice;
    $codart = addslashes($_POST['codart'.$indice]);
    $descrizione = addslashes($_POST['descrizione'.$indice]);
    $qta = $_POST['quantita'.$indice];
    $um = addslashes($_POST['um'.$indice]);
    $prezzo_unitario = $_POST['prezzo_unitario'.$indice];
    $aliva = $_POST['aliquota_iva'.$indice];
    $sconto = $_POST['sconto'.$indice];
    $tasso_sconto = $_POST['sconto'.$indice];

    //CALCOLO IMPORTO NETTO SENZA SCONTO
    if(isset($_POST['prezzo_unitario'.$indice]))
    {if(isset(
    $um))
    {
    $importo_netto = $_POST['prezzo_unitario'.$indice] * $qta;}
    }

    //CALCOLO SCONTO
    if($tasso_sconto == ""){$tasso_sconto = 0;}

    $importo_sconto = $importo_netto * $tasso_sconto / 100;


    //CALCOLO IVA
    if($aliva == ""){$aliva = 0;}

    $importo_iva = ($importo_netto - $importo_sconto) * $aliva / 100;


    $importo_netto = $importo_netto - $importo_sconto;//IMPORTO SCONTATO
    $importo_totale = $importo_netto + $importo_iva; //TOTALE POSIZIONE

    //TOTALIZZAZIONE PER DATI TESTATA
    $tot_netto = $tot_netto + $importo_netto;
    $tot_iva = $tot_iva + $importo_iva;
    $tot_sconto = $tot_sconto + $importo_sconto;
    $totale_fattura = $totale_fattura + $importo_totale;

    //FORMATTAZIONE NUMERI PER STAMPA A VIDEO
    $st_prezzo_unitario = round($prezzo_unitario, 2);
    $st_importo_iva = round($importo_iva, 2);
    $st_importo_sconto = round($importo_sconto, 2);
    $st_importo_totale = number_format($importo_totale, 2, ',', '.');

    $record = ['esercizio' => $esercizio,
    'codice_fornitore' => $codice_fornitore,
    'numero_fattura' => $numero_fattura,
    'posizione' => $indice,
    'codart' => $codart,
    'descrizione' => $descrizione,
    'quantita' => $_POST['quantita'.$indice],
    'um' => $um,
    'prezzo_unitario' => $_POST['prezzo_unitario'.$indice],
    'aliquota_iva' => $_POST['aliquota_iva'.$indice],
    'importo_iva' => $importo_iva,
    'sconto' => $tasso_sconto,
    'importo_sconto' => $importo_sconto,
    'importo_netto' => $importo_netto,
    'importo_totale' => $importo_totale];

    $dettaglio = ['codart' => $codart,
    'descrizione' => $descrizione,
    'quantita' => $_POST['quantita'.$indice],
    'um' => $um,
    'prezzo_unitario' => $_POST['prezzo_unitario'.$indice],
    'aliquota_iva' => $_POST['aliquota_iva'.$indice],
    'importo_iva' => $importo_iva,
    'sconto' => $tasso_sconto,
    'importo_sconto' => $importo_sconto,
    'importo_netto' => $importo_netto,
    'importo_totale' => $importo_totale];

    $chiave = ['esercizio' => $esercizio,
    'codice_fornitore' => $codice_fornitore,
    'numero_fattura' => $numero_fattura,
    'posizione' => $indice];

    //INSERT / UPDATE DETTAGLIO
    save($pdo, 'dettaglio_fatture_fornitori', $chiave, $dettaglio, $record);

    $indice++; $i++;
    $elaborati++;
    }
    else
    {
    $indice++;
    }
    }
    $chiave[] = " ";
    $dettaglio[] = " ";
    $record[] = " ";

    $dettaglio = ['data_fattura' => $data_fattura,
    'importo_totale_netto' => $tot_netto,
    'importo_totale_sconto' => $tot_sconto,
    'importo_totale_iva' => $tot_iva,
    'importo_totale' => $totale_fattura];

    $record = ['esercizio' => $esercizio,
    'codice_fornitore' => $codice_fornitore,
    'numero_fattura' => $numero_fattura,
    'data_fattura' => $data_fattura,
    'importo_totale_netto' => $tot_netto,
    'importo_totale_sconto' => $tot_sconto,
    'importo_totale_iva' => $tot_iva,
    'importo_totale' => $totale_fattura];

    //INSERT / UPDATE TESTATA
    save($pdo, 'testata_fatture_fornitore', $chiave, $dettaglio, $record);
    }
    }
    catch(
    PDOException $e)
    {
    $output = 'Impossibile connettersi al database server: '. $e->getMessage() . ' in ' . $e->getFile() . ': ' . $e->getLine();
    }
    ?>
    Ultima modifica di talmtest : 02-03-2021 alle ore 12.57.43

  4. #4
    talmtest non è connesso Neofita
    Data registrazione
    03-01-2019
    Messaggi
    9

    Predefinito

    E questo è il codice delle function: SAVE che richiama INSERT oppure UPDATE:


    Codice PHP:
    function save($pdo, $table, $chiave, $dettaglio, $record) {
    try
    {
    insert($pdo, $table, $record);
    }
    catch(
    PDOException $e)
    {
    update($pdo, $table, $chiave, $dettaglio);
    }
    }
    Poi Insert:

    Codice PHP:
    function insert($pdo, $table, $record){
    $query = 'INSERT INTO `' . $table . '` (';
    foreach (
    $record as $key => $value)
    {
    $query .= '`' .$key . '`,';
    }

    $query = rtrim($query, ',');

    $query .= ') VALUES (';

    foreach(
    $record as $key => $value)
    {
    $query .= ':' . $key . ',';
    }

    $query = rtrim($query, ',');

    $query .= ')';
    $record = processDates($record);
    query2($pdo, $query, $record);
    }

    La funzione UPDATE:

    Codice PHP:
    function update($pdo, $table, $chiave, $dettaglio) {
    $query = "UPDATE ".$table." SET ";
    foreach (
    $dettaglio as $key => $value) {
    $query .= "`" . $key . "` = " . "'".$value."'" . ",";
    }
    $query = rtrim($query, ', ');

    $query .= " WHERE ";
    foreach (
    $chiave as $key => $value) {
    $query .= $key . " = " . "'".$value."'" . " AND ";
    }
    $query = rtrim($query, ' AND ');
    $dettaglio = processDates($dettaglio);
    query2($pdo, $query, $dettaglio);
    }
    e la funzione Query2:

    Codice PHP:
    function query2($pdo, $sql, $parameters = []) {
    $query = $pdo->prepare($sql);
    foreach(
    $parameters as $name => $value)
    {
    $query->bindValue($name, $value);
    }
    $query->execute();
    return
    $query;
    }
    Ancora grazie
    Ultima modifica di talmtest : 02-03-2021 alle ore 12.56.39

  5. #5
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    3,998

    Predefinito

    Il sito a cui si riferisce è talmtest.altervista.org o un altro?

    Comunque accedendo al sito talmtest.altervista.org risulta una pagina di login nella index, il regoalemto non consente di bloccare il libero accesso all'intero sito, come indicato in precedenza.

    Per quanto riguarda il codice, intanto modificando i messaggi, lo racchiuda nei tag per il codice php [ php] [ /php], per renderlo meglio leggibile. Quando usa i tag, tolga lo spazio che sta dopo il catattere [.

    Cordiali saluti.

  6. #6
    talmtest non è connesso Neofita
    Data registrazione
    03-01-2019
    Messaggi
    9

    Predefinito

    Bene, ho capito cosa intendeva e ho tolto la pagina di login.
    Per quanto riguarda il problema tecnico, stamattina ho notato un comportamento strano, ho provato a registrare un paio di fatture: una è stata inserita senza problemi (parlo della tabella di dettaglio) mentre la seconda ha dato lo stesso problema di ieri pomeriggio. Non saprei, forse le due versioni di database possono avere comportamenti diversi. Ma è solo una supposizione.

    Cordiali saluti

  7. #7
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    3,998

    Predefinito

    Per visualizzare tutti gli erroi e le avvertenze, lo agguinga all'inizio del codice php:
    Codice PHP:
    error_reporting(E_ALL);
    Inoltre, aggiunga var_dump() sulla restituzione della query.

    In teoria i database MySql e MariaDB dovrebbero avere una buana compatibilità, ma all'atto reale può non essere sempre vero.

    Cordiali saluti.

  8. #8
    talmtest non è connesso Neofita
    Data registrazione
    03-01-2019
    Messaggi
    9

    Predefinito

    Ok, grazie per la sollecitudine

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •