• User

    mancato inserimento dati dopo INSERT INTO

    buongiorno a tutti,
    come da titolo ho due file php che allego e che non restituiscono alcun errore, ma non inseriscono nulla nel db.
    La connessione e la disconnessione vengono eseguite tramite apposito file che ometto, visto che è collaudato.
    Alla fine della query ho inserito anche un ok a schermo che mi restituisce, ma comunque non mi inserisce nulla.

    grazie

    file anagrafica.php

    <?php include ("conn.php"); ?>
    <html>
    <head>
    <title>Inserimento</title>
    </head>
    <body>
    <form name="form_clienti" method="post" action="insert.php">
    <label>ragione_sociale:<input name="ragione_sociale" type="text" /></label>(obbligatorio)
    <p><label>via:<input name="via" type="text" /></label></p>
    <p><label>citta:<input name="citta" type="text" /></label></p>
    <p><label>provincia:<input name="provincia" type="text" /></label></p>
    <p><label>cap:<input name="cap" type="text" /></label></p>
    <p><label>stato:<input name="stato" type="text" /></label></p>
    <p><label>partita_iva:<input name="partita_iva" type="text" /></label></p>
    <p><label>codice_fiscale:<input name="codice_fiscale" type="text" /></label></p>
    <p><label>telefono:<input name="telefono" type="text" /></label></p>

      <p><input name="invia" type="submit" value="Invia" /></p>
    </form>
    

    </body>
    </html>
    <?php include ("close.php"); ?>

    file insert.php:
    <?php
    include ("conn.php")?>
    <?php
    $ragione_sociale = $_POST['ragione_sociale'];
    $via = $_POST['via'];
    $citta = $_POST['citta'];
    $provincia = $_POST['provincia'];
    $cap = $_POST['cap'];
    $stato = $_POST['stato'];
    $partita_iva = $_POST['partita_iva'];
    $codice_fiscale = $_POST['codice_fiscale'];
    $telefono = $_POST['telefono'];

    $query="INSERT INTO anagraficaclienti (ragione_sociale, via, citta, provincia, cap, stato, partita_iva, codice_fiscale, telefono)";
    $query.=" VALUES ('".$ragione_sociale."', '".$via."', '".$citta."', '".$provincia."', '".$cap."', '".$stato."', '".$partita_iva."', '".$codice_fiscale."', '".$telefono."')";

    mysqli_query($conn, $query);
    echo 'ok';
    ?>
    <?php include ("close.php"); ?>


  • User

    Prova a racchiudere i nomi delle variabili .$variabile. tra parentesi graffe .{$variabile}.
    E poi per curiosità, per quale motivo metti quei punti?


  • User

    Ciao Akeeron,
    innanzitutto grazie per la risposta e scusami se ti rispondo solo ora, ma non ho avuto tempo di metterci mano.
    Ho inserito le parentesi graffe, come da te consigliato, ma il risultato è lo stesso, praticamente tutto ok, ma non scrive nulla all'interno della tabella.
    Sto uscendo matto! 😞
    Quali punti ti riferisci??
    C'è qualcuno che può gentilmente darmi una mano e capire dove è l'errore?
    grazie


  • User

    Innanzitutto, ti consiglio questa soluzione, perché più pratica:
    [PHP]
    $query = <<<SQL
    INSERT INTO anagraficaclienti (ragione_sociale, via, citta, provincia, cap, stato, partita_iva, codice_fiscale, telefono)
    VALUES( "{$value1}", "{$value2}", "{$value3}" );
    SQL;
    [/PHP]

    E adesso ti spiego perché non funziona nel tuo metodo:
    [PHP]$query="INSERT INTO anagraficaclienti (ragione_sociale, via, citta, provincia, cap, stato, partita_iva, codice_fiscale, telefono)";
    $query.=" VALUES ('".$ragione_sociale."', '".$via."', '".$citta."', '".$provincia."', '".$cap."', '".$stato."', '".$partita_iva."', '".$codice_fiscale."', '".$telefono."')";
    [/PHP]

    Tu hai scritto:
    [PHP]$query .=" VALUES ("[/PHP]
    e rimettendo le doppie virgolette senza escape dopo VALUES (, è normale che ti si interrompa la stringa.
    Inoltre, hai incasinato l'ordine delle virgolette, singole e doppie.

    Se proprio volessi utilizzare il tuo metodo, effettua l'escape delle doppie virgolette con "
    Spero di essere stato chiaro...

    PS: Ma c'è un motivo per cui tu inserisci un campo

    ".roma."
    nel database?


  • User

    Ciao e grazie per la celere risposta.
    Ho fatto come consigliato, ma il risultato è sempre lo stesso.
    Allego il file insert.php
    <?php
    include ("conn.php")?>
    <?php
    $ragione_sociale = $_POST['ragione_sociale'];
    $via = $_POST['via'];
    $citta = $_POST['citta'];
    $provincia = $_POST['provincia'];
    $cap = $_POST['cap'];
    $stato = $_POST['stato'];
    $partita_iva = $_POST['partita_iva'];
    $codice_fiscale = $_POST['codice_fiscale'];
    $telefono = $_POST['telefono'];

    $query= <<<SQL
    INSERT INTO anagraficaclienti (ragione_sociale, via, citta, provincia, cap, stato, partita_iva, codice_fiscale, telefono)
    VALUES ("{$ragione_sociale}", "{$via}", "{$citta}", "{$provincia}", "{$cap}", "{$stato}", "{$partita_iva}", "{$codice_fiscale}", "{$telefono}");
    SQL;

    mysqli_query($conn, $query);
    echo 'ok';
    ?>
    <?php include ("close.php"); ?>

    PS: Non vedo a nessuna parte il campo ".roma."

    grazie


  • User

    Ok, adesso la sintassi è chiara, e appurato che il problema non risiede nel codice, ti insegno un trucco.
    Al posto di echo "ok"; mettici

    echo $query;
    Lancia la pagina, copia la query stampata dall'echo, vai su phpmyadmin, ed esegui direttamente da lì quella query.
    Quando ti restituirà l'errore user friendly, saprai dove andare a cercare 😉


  • User

    Ciao,
    grazie mille.
    Ho provato a fare ciò che hai scritto e spero di non aver sbagliato....
    Mi esce il seguente errore:

    #1064 - 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 '$query' at line 1

    grazie


  • User

    Pagina insert.php
    [PHP]<?php
    include ("conn.php");

    $ragione_sociale = $_POST['ragione_sociale'];
    $via = $_POST['via'];
    $citta = $_POST['citta'];
    $provincia = $_POST['provincia'];
    $cap = $_POST['cap'];
    $stato = $_POST['stato'];
    $partita_iva = $_POST['partita_iva'];
    $codice_fiscale = $_POST['codice_fiscale'];
    $telefono = $_POST['telefono'];

    $query= <<<SQL
    INSERT INTO anagraficaclienti (ragione_sociale, via, citta, provincia, cap, stato, partita_iva, codice_fiscale, telefono)
    VALUES ("{$ragione_sociale}", "{$via}", "{$citta}", "{$provincia}", "{$cap}", "{$stato}", "{$partita_iva}", "{$codice_fiscale}", "{$telefono}");
    SQL;

    mysqli_query($conn, $query);
    echo $query;

    include ("close.php");
    ?>[/PHP]

    • Lancia la pagina insert.php ( ovviamente tramite form, altrimenti non avremmo i dati nel $_POST ), DEVE mostrarti in output la query.
    • Torna su phpmyadmin ed incolla la query in output dalla pagina insert.php

    Riprova a seguire questi passi, poi posta il messaggio d'errore.


  • User

    ciao e grazie, di seguito lo screen
    INSERT INTO anagraficaclienti (ragione_sociale, via, citta, provincia, cap, stato, partita_iva, codice_fiscale, telefono) VALUES ("azienda", "roma", "roma", "rm", "00100", "ita", "00000001", "00000001", "404030202")

    grazie


  • User

    Esegui questa query su phpmyadmin e vedi l'errore che ti restituisce...


  • User

    ciao lo screen inserito viene da phpmyadmin e mi scrive "MySQL ha restituito un insieme vuoto (i.e. zero righe). (La query ha impiegato 0.0817 sec)"


  • User

    Non ho visto nessuno screen sfortunatamente, ma se ti dice che ha restituito un insieme vuoto la query funziona. Sei sicuro che il problema del mancato inserimento dati persista?


  • User

    ciao, praticamente solo se inserisco la query io manualmente da phpmyadmin allora funziona e memorizza il record, altrimenti non fa nulla.
    non so che pesci pigliare è davvero strano

    grazie mille


  • User

    A questo punto, sei sicuro che il file conn.php stabilisca una vera connessione al DB? E che non abbia errori al suo interno? Di solito se la query funziona il problema risiede nella connessione tra PHP e MySQL.
    Se anche la connessione dovesse funzionare, non so proprio come aiutarti, mi spiace!

    Saluti


  • User

    ciao,
    penso di si è questo

    <?php
    $conn=mysqli_connect("localhost", "root", "password");
    if (!$conn)
    {
    die ("connessione al database non riuscita! ".mysqli_error());
    }
    ?>

    ti ringrazio del tuo aiuto ma non capisco manco io.


  • User

    Manca il nome del database.
    [PHP]$db_connection = mysqli_connect("host","user","password","database");[/PHP]
    Come vedi, il costruttore richiede quattro parametri, te ne fornisci tre, per forza non funziona la query.

    Saluti


  • User

    grazie mille, ho provato ora e funziona perfettamente.
    mi spiace averti fatto impazzire per una "cavolata".
    il php lo sto imparando.
    grazie ancora.


  • User

    Di nulla, lieto d'esserti stato d'aiuto. Tieni a mente quel "trucchetto" che ti ho illustrato in questo topic, può essere utile se avrai problemi di query in futuro.


  • User

    Perfetto, grazie mille ancora!


  • User

    Buongiorno ragazzi, sempre in rif. ai due files php inseriti, come posso verificare che per esempio se nel db è presente un campo come la partita iva non si reinserisca un nuovo record che lo duplica?
    Ho provato ad inserire un ciclo if prima dell'istruzione, ma non mi funziona.
    Grazie mille