[PHP] Delucidazioni Filter_sanitaze_string

Discussione in 'PHP' iniziata da elpirata, 19 Maggio 2017.

  1. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    Un saluto a tutti gli amici del forum,
    grazie al supporto di un amico sto effettuando un porting di un gestionale da mysql a mysqli.

    Avrei necessità del vostro supporto perchè sto riscintrando un problema con l'insert dei campi in un db, per l'esattezza se nei campi del form inserisco caratteri tipo slash / o un apostrofo (via d'annunzio), la query fallisce, se non utilizzo caratteri speciali tutto va liscio.

    Devo recuperare tante variabili, stando alla vostra esperienza, come potrei ovviare al problema dei caratteri speciali ? Avevo sentito parlare di una nuova funzione Filter_sanitaze_string, ma non so come implementarla nel mio script.

    PHP:
    $itr1 mysqli_real_escape_string($mysqli$_POST['itr1']);
    $itr2 mysqli_real_escape_string($mysqli$_POST['itr2']);
    $for1 mysqli_real_escape_string($mysqli$_POST['for1']);
    $for2 mysqli_real_escape_string($mysqli$_POST['for2']);
    $itr1 trim(strip_tags(stripslashes(strtoupper($itr1))));
    $itr2 trim(strip_tags(stripslashes(strtoupper($itr2))));
    $for1 trim(strip_tags(stripslashes(strtoupper($for1))));
    $for2 trim(strip_tags(stripslashes(strtoupper($for2))));
    $q1 mysqli_real_escape_string($mysqli$_POST['q1']);
    $q2 mysqli_real_escape_string($mysqli$_POST['q2']);
    $iu1 mysqli_real_escape_string($mysqli$_POST['iu1']);
    $iu2 mysqli_real_escape_string($mysqli$_POST['iu2']);
    $sc1 mysqli_real_escape_string($mysqli$_POST['sc1']);
    $sc2 mysqli_real_escape_string($mysqli$_POST['sc2']);
    $imp_1 mysqli_real_escape_string($mysqli$_POST['imp_1']);
    $imp_2 mysqli_real_escape_string($mysqli$_POST['imp_2']);

    Avevo anche (forse assurdamente pensato) ad una funzione del genere:

    PHP:

    function sanitize ($string)
    {
        
    $string filter_var($stringFILTER_SANITIZE_STRING);
        
    $string trim($string);
        
    $string stripslashes($string);
        
    $string strip_tags($string);

        return 
    $string;
    }

    Grazie
     
  2. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    Ciao, la funzione mysqli_real_escape_string() è più che sufficiente per fare l'escape. Potresti con un ciclo sistemare tutti i campi ricevuti.
    PHP:
    foreach ($_POST as $key => $value) {
        
    $_POST[$key] = mysqli_real_escape_string($value);
    }
     
  3. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18

    Ciao criric,
    nel ringraziarti per la risposta ti dico l'escape lo riesco a fare, ma il problema di query fallita si verifica con il tentativo si inserire backslash ( \ )
     
  4. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    se inserisci un backslash l'escape te lo trasforma in \\
    posta la query e l'errore sql che ti rstituisce
     
  5. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    Buongiorno,
    solo per una simulazione ho provato ad inserire nella input veicolo = \\ ALFA ROMEO \\\

    se inserissi veicolo = \\ ALFA ROMEO \\ tutto ok la query cosi come sta va a buon fine.


    Codice:
    Ho trovato un errore nell'esecuzione della QUERY UPDATE appuntamenti SET veicolo = '\\ ALFA ROMEO \\\', data = STR_TO_DATE('21/05/2017', '%d/%m/%Y'), ora = '08:30:00', cliente = 'ANDREA D'ARIA D'ARIA', telefono = '3332511111 | 800122522', gestore = 'NESSUNO', tipo_pren = 'CLIENTE PRIVATO', stato_pren = 'ACCETTAZIONE', note = 'QUESTO E' \\\ SOLO UN COMMENTO DI TEST' WHERE idappuntamento = '1231
    
    Grazie sempre per il prezioso supporto
     
  6. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    Non mi sembra che venga eseguito l'escape dall'errore che hai postato.
    Prendi come esempio questo codice :
    PHP:
    $conn mysqli_connect("localhost""root""password""database");
    $query mysqli_real_escape_string($conn"\\\ D'ARIA \ ALFA ROMEO \\");
    var_dump($query);
    /**
     * output
     * string '\\\\ D\'ARIA \\ ALFA ROMEO \\' (length=29)
     */
    nota come sono stati gestiti i backslash dalla funzione di escape.
    Posta tutto lo script fino all'esecuzione della query.
     
  7. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18

    Ciao criric buonasera,
    e un saluto a tutti gli amici del forum,
    ecco lo script che senza l'aiuto del mio amico non sarei mai riuscito a realizzare

    PHP:
    <?php

    if (isset($_GET['id'])) {
    $id = (int)$_GET['id'];
    $sql1 "SELECT * FROM appuntamenti WHERE idappuntamento = '$id'";
    $res1 $mysqli->query($sql1);
    while (
    $row $res1->fetch_array(MYSQLI_ASSOC)) {
    $id mysqli_real_escape_string($mysqli$row['id']);
    $cliente mysqli_real_escape_string($mysqli$row['cliente']);
    $data mysqli_real_escape_string($mysqli$row['data']);
    $ora mysqli_real_escape_string($mysqli$row['ora']);
    $gestore mysqli_real_escape_string($mysqli$row['gestore']);
    $veicolo mysqli_real_escape_string($mysqli,$row['veicolo']);
    $stato_pren mysqli_real_escape_string($mysqli$row['stato_pren']);
    $tipo_pren mysqli_real_escape_string($mysqli$row['tipo_pren']);
    $telefono mysqli_real_escape_string($mysqli$row['telefono']);
    $note mysqli_real_escape_string($mysqli$row['note']);
    $data strtotime($data);
    $data date('d/m/Y'$data);
    }

    if (isset(
    $_POST['submit'])) {
    $id = (int)$_GET['id'];

    /* RECUPERO I DATI DAL FORM INSERIMENTO COMMESSA */
    $veicolo filter_input(INPUT_POST'veicolo'FILTER_SANITIZE_STRING);
    $cliente filter_input(INPUT_POST'cliente'FILTER_SANITIZE_STRING);
    $telefono filter_input(INPUT_POST'telefono'FILTER_SANITIZE_STRING);
    $note filter_input(INPUT_POST'note'FILTER_SANITIZE_STRING);

    $data mysqli_real_escape_string($mysqli$_POST['data']);
    $ora mysqli_real_escape_string($mysqli$_POST['ora']);
    $gestore mysqli_real_escape_string($mysqli$_POST['gestore']);
    $tipo_pren mysqli_real_escape_string($mysqli$_POST['tipo_pren']);
    $stato_pren mysqli_real_escape_string($mysqli$_POST['stato_pren']);

    /* SETTO I MAIUSCOLI */
    $veicolo strtoupper($veicolo);
    $cliente strtoupper($cliente);
    $note strtoupper($note);

    /* FILTRO LE ALTRE VARIABILI */
    $data trim(strip_tags(stripslashes($data)));
    $ora trim(strip_tags(stripslashes($ora)));
    $telefono trim(strip_tags(stripslashes($telefono)));
    $gestore trim(strip_tags(stripslashes(strtoupper($gestore))));
    $tipo_pren trim(strip_tags(stripslashes(strtoupper($tipo_pren))));
    $stato_pren trim(strip_tags(stripslashes(strtoupper($stato_pren))));
    /* FINE FILTRI e CONVERSIONI SULLE VARIABILI POST */

    $sql2 "UPDATE appuntamenti SET veicolo = '$veicolo', data = STR_TO_DATE('$data', '%d/%m/%Y'), ora = '$ora', cliente = '$cliente', telefono = '$telefono', gestore = '$gestore', tipo_pren = '$tipo_pren', stato_pren = '$stato_pren', note = '$note' WHERE idappuntamento = '$id'";
    $res2 $mysqli->query($sql2);

    if (!
    $res2) {
    echo 
    "<p style='margin-top: 40px;text-align:center;'>Ho trovato un errore nell'esecuzione della <b>QUERY</b> $sql2</p>";

    }else{

    $messaggio "<div class='success'>Appuntamento aggiornato con successo! Attendi..</div>";
    echo 
    "<meta http-equiv='refresh' content='8;url=index.php?page=lista_appuntamenti_oggi&tipo=tutti&data=oggi'>";
     
      }
     }
    }
    ?>
     
  8. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    non fai l'escape di tutte le variabili, infatti l'escape sulla variabile $veicolo non c'è.
    perchè fai una select prima ?
     
  9. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    ma non lo faccio qua:
    PHP:
    $veicolo mysqli_real_escape_string($mysqli,$row['veicolo']);
    tramite la variabile superglobale $_GET recupero l'id dell'appuntamento che devo modificare,
    effettuando una select che mi restituisce proprio quell'id, una volta recuperato mostro a video il form
    per modificare i dati e tramite il submit aggiorno l'appuntamento.
     
  10. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    li lo fai quando estrai i dati della query e non serve ma dopo l'invio del post non lo fai.
    Io te lo sistemerei un po.
    Non hai postato l'inizializzazione di Mysqli ma immagino che hai qualcosa simile a
    PHP:
    $mysqli = new mysqli($host$user$password$database);
     
  11. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    L'inizializzazione avviene esattamente come da te indicato,
    come potrei migliorare un pò il codice ?
     
  12. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    intanto se invii il post non serve fare la select poi utilizzerei i cicli per fare l'escape come ti ho postato sopra.
    Cosa manca al codice che hai postato a parte la connessione al db ? solo il form ? posta anche quello
     
  13. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    Questo lo script completo:

    PHP:
    <?php

    if (isset($_GET['id'])) {
    $id = (int)$_GET['id'];
    $sql1 "SELECT * FROM appuntamenti WHERE idappuntamento = '$id'";
    $res1 $mysqli->query($sql1);
    while (
    $row $res1->fetch_array(MYSQLI_ASSOC)) {
    $id mysqli_real_escape_string($mysqli$row['id']);
    $cliente mysqli_real_escape_string($mysqli$row['cliente']);
    $data mysqli_real_escape_string($mysqli$row['data']);
    $ora mysqli_real_escape_string($mysqli$row['ora']);
    $gestore mysqli_real_escape_string($mysqli$row['gestore']);
    $veicolo mysqli_real_escape_string($mysqli,$row['veicolo']);
    $stato_pren mysqli_real_escape_string($mysqli$row['stato_pren']);
    $tipo_pren mysqli_real_escape_string($mysqli$row['tipo_pren']);
    $telefono mysqli_real_escape_string($mysqli$row['telefono']);
    $note mysqli_real_escape_string($mysqli$row['note']);
    $data strtotime($data);
    $data date('d/m/Y'$data);
    }

    if (isset(
    $_POST['submit'])) {
    $id = (int)$_GET['id'];

    /* RECUPERO I DATI DAL FORM INSERIMENTO COMMESSA */
    $veicolo filter_input(INPUT_POST'veicolo'FILTER_SANITIZE_STRING);
    $cliente filter_input(INPUT_POST'cliente'FILTER_SANITIZE_STRING);
    $telefono filter_input(INPUT_POST'telefono'FILTER_SANITIZE_STRING);
    $note filter_input(INPUT_POST'note'FILTER_SANITIZE_STRING);

    $data mysqli_real_escape_string($mysqli$_POST['data']);
    $ora mysqli_real_escape_string($mysqli$_POST['ora']);
    $gestore mysqli_real_escape_string($mysqli$_POST['gestore']);
    $tipo_pren mysqli_real_escape_string($mysqli$_POST['tipo_pren']);
    $stato_pren mysqli_real_escape_string($mysqli$_POST['stato_pren']);

    /* SETTO I MAIUSCOLI */
    $veicolo strtoupper($veicolo);
    $cliente strtoupper($cliente);
    $note strtoupper($note);

    /* FILTRO LE ALTRE VARIABILI */
    $data trim(strip_tags(stripslashes($data)));
    $ora trim(strip_tags(stripslashes($ora)));
    $telefono trim(strip_tags(stripslashes($telefono)));
    $gestore trim(strip_tags(stripslashes(strtoupper($gestore))));
    $tipo_pren trim(strip_tags(stripslashes(strtoupper($tipo_pren))));
    $stato_pren trim(strip_tags(stripslashes(strtoupper($stato_pren))));
    /* FINE FILTRI e CONVERSIONI SULLE VARIABILI POST */

    $sql2 "UPDATE appuntamenti SET veicolo = '$veicolo', data = STR_TO_DATE('$data', '%d/%m/%Y'), ora = '$ora', cliente = '$cliente', telefono = '$telefono', gestore = '$gestore', tipo_pren = '$tipo_pren', stato_pren = '$stato_pren', note = '$note' WHERE idappuntamento = '$id'";
    $res2 $mysqli->query($sql2);

    if (!
    $res2) {
    echo 
    "<p style='margin-top: 40px;text-align:center;'>Ho trovato un errore nell'esecuzione della <b>QUERY</b> $sql2</p>";

    }else{

    $messaggio "<div class='success'>Appuntamento aggiornato con successo! Attendi..</div>";
    echo 
    "<meta http-equiv='refresh' content='8;url=index.php?page=lista_appuntamenti_oggi&tipo=tutti&data=oggi'>";
     
      }
     }
    }
    ?>


    <? echo $messaggio?>

    <form method="post" action="">

    <fieldset>
    <legend>Registra Appuntamento</legend>
    <table id="add">
    <tr>
    <td><b>Veicolo</b></td>
    <td><input type="text" name="veicolo" value="<?= $veicolo?>" required="required"></td>
    <td><b>Stato Prenotazione</b></td>
    <td><select name="stato_pren" required="required">
    <?php
    $sql5 
    "SELECT * FROM stato_pren WHERE stato != '$stato_pren' ORDER BY stato ASC";
    $rs5 $mysqli->query($sql5);
    echo 
    "<option value='$stato_pren'>$stato_pren</option>";
    while (
    $row $rs5->fetch_array(MYSQLI_ASSOC)) {
    $stato mysqli_real_escape_string($mysqlistrtoupper($row['stato']));
    echo 
    "<option value='$stato'>$stato</option>";
    }
    ?>
    </select></td>
    </tr>

    <tr>
    <td><b>Data Prenotazione</b></td>
    <td><input type="text" name="data" id="datepicker" value="<?= $data?>" required="required"></td>
    <td><b>Ora Prenotazione</b></td>
    <td><input type="text" name="ora" class="timepicker" value="<?= $ora?>" required="required"></td>
    </tr>

    <tr>
    <td><b>Cliente</b></td>
    <td><input type="text" name="cliente" value="<?= $cliente?>" required="required"></td>
    <td><b>Telefono</b></td>
    <td><input type="text" name="telefono" value="<?= $telefono?>" required="required"></td>
    </tr>

    <tr>
    <td><b>Gestore</b></td>
    <td><select name="gestore">
    <?php
    $sql3 
    "SELECT * FROM gestore WHERE gestore != '$gestore' ORDER BY gestore ASC";
    $rs3 $mysqli->query($sql3);
    echo 
    "<option value='$gestore'>$gestore</option>";
    while (
    $row $rs3->fetch_array(MYSQLI_ASSOC)) {
    $nuovo_gest mysqli_real_escape_string($mysqlistrtoupper($row['gestore']));
    echo 
    "<option value='$nuovo_gest'>$nuovo_gest</option>";
    }
    ?>
    </select></td>

    <td><b>Tipo Cliente</b></td>
    <td><select name="tipo_pren" required="required">
    <?php
    $sql4 
    "SELECT * FROM tipoprenotazione WHERE tipopren != '$tipo_pren' ORDER BY tipopren ASC";
    $rs4 $mysqli->query($sql4);
    echo 
    "<option value='$tipo_pren'>$tipo_pren</option>";
    while (
    $row $rs4->fetch_array(MYSQLI_ASSOC)) {
    $tipopren mysqli_real_escape_string($mysqlistrtoupper($row['tipopren']));
    echo 
    "<option value='$tipopren'>$tipopren</option>";
    }
    ?>
    </select></td>
    </tr>


    <tr>
    <td><b>Modifica Lamentato</b></td>
    <td><textarea maxlength="90" name="note" required="required"><?= $note?></textarea></td>
    </tr>
    </table>
    </fieldset>

    <input type="submit" name="submit" class="bottone" value="Aggiorna Appuntamento">
    <div class="clear"></div>
    </form>
     
  14. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    intanto ti schematizzo come farei io la struttura
    PHP:
    if (isset($_POST['submit'])) {
        
    // controllo dati
        // esecuzione query
        // messaggio
        
    die();
        
    // inutile andare avanti
    }
    if (isset(
    $_GET['id'])) {
        
    // query per estrazione dati
        // form
    } else {
        
    // senza id non puoi fare niente
        
    die("mi manca l'id");
    }
    dopo ti posto cosa farei nel submit.
    Non serve l'escape quando estrai i dati dalla tabella.
     
  15. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    non ho avuto modo di testare ma piu o meno avrei fatto cosi
    PHP:
    <?php
    $mysqli 
    = new mysqli($host$user$password$database);
    if (isset(
    $_POST['submit'])) {

        function 
    pulisci($stringa$mysqli) {
            return 
    $mysqli->real_escape_string(trim(strip_tags(strtoupper($stringa))));
        }

        foreach (
    $_POST as $key => $value) {
            
    $_POST[$key] = pulisci($value$mysqli);
        }
        
    extract($_POST);

        
    $sql2 "UPDATE appuntamenti SET "
                
    "veicolo = '$veicolo', "
                
    "data = STR_TO_DATE('$data', '%d/%m/%Y'), "
                
    "ora = '$ora', "
                
    "cliente = '$cliente', "
                
    "telefono = '$telefono', "
                
    "gestore = '$gestore', "
                
    "tipo_pren = '$tipo_pren', "
                
    "stato_pren = '$stato_pren', "
                
    "note = '$note' "
                
    "WHERE idappuntamento = '$id'";
        
    // l'id lo metti come input hidden nel form cosi ti arriva in post

        
    if (!$mysqli->query($sql2)) {
            echo 
    "<div class='error'>errore nell'esecuzione della query : " $mysqli->error "</div>";
            echo 
    "<a href='index.php?page=lista_appuntamenti_oggi&tipo=tutti&data=oggi'> torna alla lista </a>";
        } else {
            echo 
    "<div class='success'>Appuntamento aggiornato con successo! Attendi..</div>";
            
    header("refresh:5;url=index.php?page=lista_appuntamenti_oggi&tipo=tutti&data=oggi");
        }
        die();
    }
    if (isset(
    $_GET['id'])) {
        
    $id = (int) $_GET['id'];
        
    $sql1 "SELECT * FROM appuntamenti WHERE idappuntamento = '$id' LIMIT 1";
        
    $res1 $mysqli->query($sql1);
        
    extract($res1->fetch_assoc());
        
    ?>
        qui il form
        <?php
    }
    ?>
    il bello della programmazione è che lo stesso risultato lo puoi ottenere in cento modi diversi tutti più o meno validi.
    Per risolvere il tuo problema senza stravolgere il codice basta che aggiungi l'escape dopo il post anche alla variabile $veicolo
    ps
    la mia versione per popolare le select
    PHP:
    <select name="stato_pren" required="required">
        <?php
        $sql5 
    "SELECT * FROM stato_pren ORDER BY stato ASC";
        
    $rs5 $mysqli->query($sql5);
        while (
    $row $rs5->fetch_assoc()) {
            echo 
    "<option value='" $row['stato'] . "'";
            if (
    $row['stato'] == $stato_pren) {
                echo 
    " selected='selected' ";
            }
            echo 
    ">" $row['stato'] . "</option>";
        }
        
    ?>
    </select>
    pps
    evita di usare gli short tag di php <?= e usa la versione estesa <?php echo : non tutti i server li hanno abilitati
     
  16. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    Un buon pomeriggio a tutti,
    ho modificato tutto lo script applicando quanto suggerito, se effettuo il var_dump della query prima dell'esecuzione sembra essere ok

    PHP:
    string(286"UPDATE appuntamenti SET veicolo = 'PEGOUT', data = STR_TO_DATE('2017-05-23', '%d/%m/%Y'), ora = '08:30:00', cliente = 'PINCO PALLI', telefono = '32451236521', gestore = 'NESSUNO', tipo_pren = 'CLIENTE PRIVATO', stato_pren = 'LAVORAZIONE', note = 'CAMBIO', WHERE idappuntamento = '1216' " 
    appena tolgo il var_dump ottengo questo errore:

    PHP:
    errore nell'esecuzione della query : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE idappuntamento '1216'' at line 1
    questa la query:

    PHP:
    if (isset($_POST['submit'])) {
       
            function 
    pulisci($stringa$mysqli){
                return 
    $mysqli->real_escape_string(trim(strip_tags(strtoupper($stringa))));
            }
               
            foreach (
    $_POST as $key => $value) {
                
    $_POST[$key] = pulisci($value$mysqli);
            }  
            
    extract($_POST);
           
           
            
    $sql2 "UPDATE appuntamenti SET "
                    
    "veicolo = '$veicolo', "
                    
    "data = STR_TO_DATE('$data', '%d/%m/%Y'), "
                    
    "ora = '$ora', "
                    
    "cliente = '$cliente', "
                    
    "telefono = '$telefono', "
                    
    "gestore = '$gestore', "
                    
    "tipo_pren = '$tipo_pren', "
                    
    "stato_pren = '$stato_pren', "
                    
    "note = '$note', "
                    
    "WHERE idappuntamento = '$id'";
          
            
    var_dump ($sql2);
            exit;
     
  17. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    hai messo una virgola in più
    PHP:
    "note = '$note', "
    essendo l'ultimo camp prima della where va tolta.
    l'errore infatti ti suggerisce
     
  18. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    Grazieee mille criric, soprattuto per l'estrema pazienza ...
    ci sono quasi, ho un problema nel formato della data, se trasformo la query eliminando
    strtotime, recupero correttamente la data solo che nel formato 2017-05-23 e poi
    non capisco il senso di quel die() dopo l'esecuzione della query ...

    In sostanza se eseguo la query, gli appuntamenti adesso si aggiornano alla perfezione solo che resta
    poi fermo sulla scritta "Appuntamento aggiornato con successo! Attendi.."

    PHP:
            $sql2 "UPDATE appuntamenti SET "
                    
    "veicolo = '$veicolo', "
                    
    "data = STR_TO_DATE('$data', '%d/%m/%Y'), "
                    
    "ora = '$ora', "
                    
    "cliente = '$cliente', "
                    
    "telefono = '$telefono', "
                    
    "gestore = '$gestore', "
                    
    "tipo_pren = '$tipo_pren', "
                    
    "stato_pren = '$stato_pren', "
                    
    "note = '$note' "
                    
    "WHERE idappuntamento = '$id' ";
            
    //var_dump ($sql2);
            //exit;
        
            
    if (!$mysqli->query($sql2)) {
                echo 
    "<div class='error'>errore nell'esecuzione della query : " $mysqli->error "</div>";
                echo 
    "<a href='index.php?page=lista_appuntamenti_oggi&tipo=tutti&data=oggi'> torna alla lista </a>";
            } else {
                echo 
    "<div class='success'>Appuntamento aggiornato con successo! Attendi..</div>";
                
    header("refresh:5;url=index.php?page=lista_appuntamenti_oggi&tipo=tutti&data=oggi");
            }
            die();
        }
            if (isset(
    $_GET['id'])) {
            
    $id = (int) $_GET['id'];
            
    $sql1 "SELECT * FROM appuntamenti WHERE idappuntamento = '$id' LIMIT 1";
            
    $res1 $mysqli->query($sql1);
            
    extract($res1->fetch_assoc());
        
    ?>
    P.s
    Purtroppo, ancora non utilizzo bootstrap e se non sbaglio la classe success fa parte del framework ...
     
  19. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
    die() serve per interrompere il flusso della pagina : inutile andare avanti una volta fatta la query e informato del risultato.
    per la data puoi fare cosi
    PHP:
    "data = STR_TO_DATE('" strtotime($data) . "', '%d/%m/%Y'), "
    l'header refresh dovrebbe funzionare, strano! prova a metterlo da solo in una pagian e vedi che fa. dovrebbe scattare dopo 5 secondi
     
  20. elpirata

    elpirata Utente Attivo

    Registrato:
    18 Marzo 2009
    Messaggi:
    187
    Mi Piace Ricevuti:
    6
    Punteggio:
    18
    Adesso passa la data cosi :
    PHP:
    errore nell'esecuzione della query : Incorrect datetime value: '1495490400' for function str_to_date
    e quando la recupero nella input la mostra cosi:
    http://clip2net.com/s/3KG2DNn
     
Sto caricando...

Condividi questa Pagina