• User Newbie

    Problema update database

    Buongiorno,
    sono alle prime armi con php e sto impostando un semplice CRUD.
    Ho un problema con il file update che non mi fa aggiornare i dati del database. Non si genera nessun error_log e quando modifico i dati nel browser, il sistema mi dice che sono aggiornati correttamente ma non vengono modificati. Tutto il resto funziona. Riuscite a darmi un aiuto per favore? Di seguito il codice.
    Grazie. Francesco.
    [PHP]<?phpinclude 'functions.php';$pdo = pdo_connect_mysql();$msg = '';// Check if the commessa ID exists, for example update.php?ID=1 will get the commessa with the ID of 1if (isset($_GET['ID'])) { if (!empty($_POST)) { // This part is similar to the create.php, but instead we update a record and not insert $id = isset($_POST['ID']) ? $_POST['ID'] : NULL; $data = isset($_POST['data']) ? $_POST['data'] : date('Y-m-d'); $clienti = isset($_POST['clienti']) ? $_POST['clienti'] : ''; $descrizione = isset($_POST['descrizione']) ? $_POST['descrizione'] : ''; $quantita = isset($_POST['quantita']) ? $_POST['quantita'] : ''; // Update the record $stmt = $pdo->prepare('UPDATE commesse_2020 SET ID = ?, data = ?, clienti = ?, descrizione = ?, quantita = ?, WHERE ID = ?'); $stmt->execute([$id, $data, $clienti, $descrizione, $quantita, $_GET['ID']]); $msg = 'Aggiornata correttamente!'; } // Get the commessa from the commesse table $stmt = $pdo->prepare('SELECT * FROM commesse_2020 WHERE ID = ?'); $stmt->execute([$_GET['ID']]); $commessa = $stmt->fetch(PDO::FETCH_ASSOC); if (!$commessa) { exit('La commessa non esiste con questo ID!'); }} else { exit('No ID specified!');}?>
    <?=template_header('Read')?>
    <div class="content update"> <h2>Modifica commessa #<?=$commessa['ID']?></h2> <form action="update.php?ID=<?=$commessa['ID']?>" method="post"> <label for="ID">ID</label> <input type="text" name="ID" placeholder="26" value="auto" ID="ID"> <label for="data">data</label> <input type="datetime-local" name="data" value="<?=date('Y-m-d')?>" ID="data"> <label for="clienti">clienti</label> <input type="text" name="clienti" placeholder="Nome cliente" ID="clienti"> <label for="descrizione">descrizione</label> <input type="text" name="descrizione" placeholder="Descrizione" ID="descrizione"> <label for="quantita">quantita</label> <input type="text" name="quantita" placeholder="Quantita" ID="quantita"> <input type="submit" value="Update"> </form> <?php if ($msg): ?> <p><?=$msg?></p> <?php endif; ?></div>
    <?=template_footer()?>
    [/PHP]


  • User Attivo

    Ciao,

    incolla il codice su https://pastebin.com/ e posta il link, tutto il codice non solo una parte altrimenti è impossibile dirti cosa non va


  • Moderatore

    Ciao
    ti ho spostato nella sezione PHP


  • User Newbie

    Grazie.

    • <?php

    • include 'functions.php';

    • $pdo = pdo_connect_mysql();

    • $msg = '';

    • // Check if the commessa ID exists, for example update.php?ID=1 will get the commessa with the ID of 1

    • if (isset($_GET['ID'])) {

    • if (!empty($_POST)) {
      
    •     // This part is similar to the create.php, but instead we update a record and not insert
      
    •     $id = isset($_POST['ID']) ? $_POST['ID'] : NULL;
      
    •     $data = isset($_POST['data']) ? $_POST['data'] : date('Y-m-d');
      
    •     $clienti = isset($_POST['clienti']) ? $_POST['clienti'] : '';
      
    •     $descrizione = isset($_POST['descrizione']) ? $_POST['descrizione'] : '';
      
    •     $quantita = isset($_POST['quantita']) ? $_POST['quantita'] : '';
      
    •     // Update the record
      
    •     $stmt = $pdo->prepare('UPDATE commesse_2020 SET ID = ?, data = ?, clienti = ?, descrizione = ?, quantita = ?, WHERE ID = ?');
      
    •     $stmt->execute([$id, $data, $clienti, $descrizione, $quantita, $_GET['ID']]);
      
    •     $msg = 'Aggiornata correttamente!';
      
    • }
      
    • // Get the commessa from the commesse table
      
    • $stmt = $pdo->prepare('SELECT * FROM commesse_2020 WHERE ID = ?');
      
    • $stmt->execute([$_GET['ID']]);
      
    • $commessa = $stmt->fetch(PDO::FETCH_ASSOC);
      
    • if (!$commessa) {
      
    •     exit('La commessa non esiste con questo ID!');
      
    • }
      
    • } else {

    • exit('No ID specified!');
      
    • }

    • ?>

    • <?=template_header('Read')?>

    • <div class="content update">

    • <h2>Modifica commessa #<?=$commessa['ID']?></h2>
      
    • <form action="update.php?ID=<?=$commessa['ID']?>" method="post">
      
    •   <label for="ID">ID</label>
      
    •   <input type="text" name="ID" placeholder="26" value="auto" ID="ID">
      
    •   <label for="data">data</label>
      
    •   <input type="datetime-local" name="data" value="<?=date('Y-m-d')?>" ID="data">
      
    •   <label for="clienti">clienti</label>
      
    •   <input type="text" name="clienti" placeholder="Nome cliente" ID="clienti">
      
    •   <label for="descrizione">descrizione</label>
      
    •   <input type="text" name="descrizione" placeholder="Descrizione" ID="descrizione">
      
    •   <label for="quantita">quantita</label>
      
    •   <input type="text" name="quantita" placeholder="Quantita" ID="quantita">
      
    •     <input type="submit" value="Update">
      
    • </form>
      
    • <?php if ($msg): ?>
      
    • <p><?=$msg?></p>
      
    • <?php endif; ?>
      
    • </div>

    • <?=template_footer()?>


  • User Attivo

    Ciao,

    se magari usavi pastebin come ti avevo detto, il codice risulterebbe più leggibile :rollo:

    Ad ogni modo prova a fare un pò di debug veloce con var_dump stampando il risultato dell'esecuzione della query

    [PHP]
    $execute = $stmt->execute('UPDATE bla bla bla...');
    var_dump($execute);
    exit;
    [/PHP]

    Inoltre stampa anche questo

    [PHP]
    $pdo->errorInfo();
    [/PHP]

    Non capisco poi il senso di aggiornare l'ID del record (SET ID = ?), a cosa ti serve?


  • User Newbie

    Ciao Flavio,
    ho inserito il codice da te suggerito dopo "$msg = 'Aggiornata correttamente!';" e mi stampa: bool(false).
    Inoltre nel file error_log ho questo errore:
    PHP Warning: PDOStatement::execute() expects parameter 1 to be array, string given in /home/uqplaxvd/public_html/crm2020/update.php on line 18

    Inserendo solo "$pdo->errorInfo();" dopo "$msg = 'Aggiornata correttamente!';" mi da questo errore nel file error_log:
    PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /home/uqplaxvd/public_html/crm2020/update.php on line 16

    Ho eliminato "ID = ?"
    Grazie per il supporto.


  • User Attivo

    PHP Warning: PDOStatement::execute() expects parameter 1 to be array, string given in /home/uqplaxvd/public_html/crm2020/update.php on line 18

    Stai passando una stringa alla funzione execute(), mentre dovresti passare un array

    PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /home/uqplaxvd/public_html/crm2020/update.php on line 16

    Stai passando un numero maggiore o minore di parametri rispetto al numero di '?' che hai nella query

    UPDATE commesse_2020 SET ID = ?, data = ?, clienti = ?, descrizione = ?, quantita = ?