Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Inserimento dati in database

    Ciao ragazzi
    mi rendo conto che senza postarvi il codice php magari sia difficile rispondere, ma siccome penso sia una stupidata di cui io non sono a conoscenza prima va faccio la domanda, poi in caso vediamo il codice.
    Cmq è la solita stupida form che passa un nome e un'indirizzo mail col metodo POST ad una pagina php che provvede all'inserimento di questi due dati in una tabella in precedenza creata su MYSQL server con tutti i campi necessari. Fin qui nulla di strano se non per il fatto che lanciando il codice, il primo dato (nome e email) lo inserisce correttamente, il secondo pure, mentre il terzo lo inserisce 2 volte :master: Se naturalmente vado avanti il quarto dato lo inserisce 4 volte e 8 volte per il quinto e via dicendo.
    Cosa ho combinato, o meglio cosa non ho combinato per fare in modo che vengano inseriti una sola volta correttamente?
    Ho provato anche ad azzerare le variabili dopo l'avvenuto inserimento, ma senza successo.

    Mi suggerite qualcosa ?

    Grazie, ciao a tutti
    Paolo

  2. #2
    Utente di HTML.it L'avatar di thepooh
    Registrato dal
    Oct 2005
    Messaggi
    203
    Quindi tu hai un DB tipo
    campo1, campo2, campo3, campo4
    e inserisci i dati
    dato1, dato2, dato3, dato4
    ma in realtà ti viene memorizzato
    dato1, dato2, dato3dato3, dato4dato4dato4dato4

    Se è così esegui una echo dei dati prima di andare a scrivere su data base, sicuramente li passi già in quel modo.
    Se verifichi che li passi giusti prima della scrittura devi postare il codice

  3. #3
    Si esatto campo utente, mail e orario,se continuo a inserire dati ottengo questo
    paolo paolo@xxx.it 08.00 il primo è ok
    pippo pippo@xx.it 08.01 il sencondo è ok
    bimbo bimbo@xxx.it 08.01 da qui in poi raddoppiano a ogni inserimento
    bimbo bimbo@xxx.it 08.01
    plutino pluto@xxx.it 08.02
    plutino pluto@xxx.it 08.02
    plutino pluto@xxx.it 08.02
    plutino pluto@xxx.it 08.02
    ecc...........ecc...........

    Sicuramente ho fatto una grande toppa, solo che anche debuggando non riesco a trovare dove.
    Cmq ti posto il pezzo di codice in questione, tanto è cortissimo e probabilmente semplice.
    ---------------------------
    questo è il file elaborazione.php che viene aperto dopo che ho fatto l'invio dal form

    <?php
    include ("controldata.php");
    $errore=false;
    if ( ($nome_utente == "") or ($email == "")) {
    $errore=true;
    echo "
    Spiacente, devi compilare tutti i campi
    <a href=\"newsletter.htm\">Torna al modulo di inserimento</a>";
    } else {
    $pattern="^[^@ ]+@[^@ ]+\.[^@ \.]+$";
    if (!ereg($pattern,$email)) {
    echo "Questa \"$email\" non e un email valida
    <a href=\"newsletter.htm\">Torna al modulo di inserimento</a>";
    } else{

    include ("config.php");
    include ("dbconnect.php");
    $lettura_database=mysql_query("select * from newsletter") or die (mysql_error());
    if ($optnewsletter=="Cancellati") {
    include("cancella.php");
    } else {
    if (mysql_num_rows($lettura_database)>0) {
    include("scansione.php");
    } else {
    include("iscrivi.php");
    }}}}



    ?>
    --------------------------------
    questo è il file scansione.php dovrebbe vedere se ci sono gia' dati nel database
    <?php
    /*Inizio scansione del database*/
    while($scatola_temporanea=mysql_fetch_array($lettu ra_database)){ /*scansiona l'array*/
    $nome_utente_temp=("$scatola_temporanea[nome_utente]");
    $email_temp=("$scatola_temporanea[email]");
    if ($nome_utente==$nome_utente_temp and $email==$email_temp) {
    include ("ritorno.php"); #ritorna al form
    } else {
    include("iscrivi.php");
    }}
    /*fine scansione database*/
    ?>
    --------------------------------------------
    questo è il file controldata.php assegna solo le variabili passate dal form
    <?php
    $nome_utente=htmlspecialchars($_POST['nome_utente']);
    $email=htmlspecialchars($_POST['email']);
    $optnewsletter=htmlspecialchars($_POST['optnewsletter']);
    ?>
    ----------------------------------------------
    questo è il file iscrivi.php che si dovrebbe occupare di inserire i dati nel database
    <?php
    include ("config.php"); #questo contiene i dati dell'accesso al server
    include ("dbconnect.php");#questo mi connette al database
    include ("controldata.php");
    $inserimento= mysql_query("INSERT INTO newsletter(nome_utente,email,data_ora) VALUES ('$_POST[nome_utente]','$_POST[email]',now())")or die (mysql_error());
    echo ("Sei iscritto\a alla newletter");
    echo "<a href=\"index.hmt\">Torna alla home page</a>";
    ?>
    ----------------------------------------------
    dovrebbero essere tutti i codici fondamentali, non ti ho inviato il form perchè penso che non sia necessario, e nemmeno i pezzi di codice che non prendono parte alla scrittura sul database perchè il cuore di tutto dovrebbe stare qui. Mi spiace impegnarti non vorrei rubarti del tempo, ma in ogni caso se riesci a capire dove ho sbagliato mi fai un favore perchè è da tempo che ci sto dietro senza risolvere nulla.

    ti ringrazio moltissimo
    PAOLO

  4. #4
    Utente di HTML.it L'avatar di thepooh
    Registrato dal
    Oct 2005
    Messaggi
    203
    quindi non ti viene inserito lo stesso campo ripetuto più volte
    dato1, dato2, dato3dato3, dato4dato4dato4dato4
    ma l'intero record ti viene scritto più volte
    bimbo bimbo@xxx.it 08.01 da qui in poi raddoppiano a ogni inserimento
    bimbo bimbo@xxx.it 08.01
    plutino pluto@xxx.it 08.02
    plutino pluto@xxx.it 08.02
    plutino pluto@xxx.it 08.02
    plutino pluto@xxx.it 08.02
    ecc...........ecc...........
    l'unico motivo è che tu entri in ciclo più volte nell'iscrivi.php dove esegui un ciclo while.

    Se sono presenti i dati vai a leggere il DB, trovi più di una riga e vai in scansione.php
    if ( ($nome_utente == "") or ($email == "")) {
    ..
    $lettura_database=mysql_query("select * from newsletter") or die (mysql_error());
    ..
    if (mysql_num_rows($lettura_database)>0) {
    include("scansione.php");
    } else {
    include("iscrivi.php");
    all'interno della while in scansione.php chiedi una corrispondenza di valori che probabilmente non trovando va in iscrivi.php
    if ($nome_utente==$nome_utente_temp and $email==$email_temp) {
    include ("ritorno.php"); #ritorna al form
    } else {
    include("iscrivi.php");
    }
    Testati questa corrispondenza e....
    non capisco perchè non inserisci i campi inseriti come filtro nella prima query
    $lettura_database=mysql_query("select * from newsletter") or die (mysql_error());
    ..
    if (mysql_num_rows($lettura_database)>0) {
    include("scansione.php");
    } else {
    include("iscrivi.php");
    se hai i dati da ricercare devi eseguire la query:
    ("select * from newsletter where campoutente=campoutenteinserito")

  5. #5
    Allora facendo buon uso dei tuoi consigli,ho cercato di capire cosa succedeva piu' che altro nel codice di scansione del database.
    Ho cambiato un pò di codice, ho forzato le variabili, e l'ho debuggato da solo al di fuori di tutto il resto, e ho scoperto varie cose.
    Prima di tutto, ho visto che quando il database è vuoto e quindi non contiene record mi esce dal codice, e secondo (importante) che la scansione delle variabili è fatta in modo ciclico e non su tutto il database in un unico passaggio.
    Ti riposto il codice............................................ ..

    <?php
    $_POST['nome_utente']="pippo";
    $_POST['email']="pippo@iol.it";
    include ("config.php");
    include ("dbconnect.php");
    include ("controldata.php");
    $lettura_database = ("SELECT * FROM newsletter");
    $ris = mysql_query($lettura_database,$db) or die("ERRORE NELLA LETTURA DATABASE" .mysql_error());
    while($scatola_temporanea=mysql_fetch_array($ris)) { /*scansiona l'array*/
    if ($ris==false){
    include("iscrivi.php");
    } else {
    $nome_utente_temp=($scatola_temporanea['nome_utente']);
    $email_temp=($scatola_temporanea['email']);

    if ($_POST['nome_utente']==$nome_utente_temp and $_POST['email']==$email_temp) {
    include ("ritorno.php");
    } else {
    include("iscrivi.php");
    }
    }}
    /*fine scansione database*/
    ?>
    ---------------------------
    Allora come dicevo sopra se anche $ris mi ritorna FALSE perchè il database è vuoto non mi fa l'iscrizione come io vorrei, ma esce dal codice e mi ritrovo il cursore sull'ultima riga.
    La seconda cosa è che la variabile $nome_utente_temp che prende il dato da database, al primo giro per esempio vale "paolo" e siccome il nome_utente che ho forzato di sopra è "pippo", lui me lo iscrive la prima volta, al secondo giro $nome_utente_temp vale per esempio "pluto", ma essendo ancora nome_utente "pippo" lui me lo riscrive un'altra volta, e quindi credo che sia per questo che mi ritrovavo gli inserimenti duplicati.
    Quindi come faccio a fare una scansione del database in un'unica "botta" e verificare se il dato esiste o meno?
    E come gli dico di eseguire l'iscrizione se il database è vuoto?

    Ti ringrazio nuovamente per la pazienza e la cortesia
    PAOLO

  6. #6
    Utente di HTML.it L'avatar di thepooh
    Registrato dal
    Oct 2005
    Messaggi
    203
    se hai i dati da ricercare devi eseguire la query:
    ("select * from newsletter where campoutente=campoutenteinserito")
    nella prima query che tu fai devi chiedere direttamente se esiste la riga, non hai bisogno di scorrerti tutto il data base.
    quindi devi fare:
    $lettura_database = ("SELECT * FROM newsletter where utente='" . $_POST['nome_utente'] . "');
    se ti trova la riga è già iscritto e quindi segui una strada, altrimenti ne segui un'altra!

  7. #7
    Ciao thepooh
    perdonami ma come avrai capito non sono una "cima" in php e quindi non sono riuscito a far funzionare quello che mi hai suggerito

    Il primo errore me lo ha dato credo sulla variabile $_POST messa all'interno del Select, che io ho sostituito con una variabile alla quale ho assegnato $_POST. Se non dico fesserie mi sembrava non fosse possibile usare le $_POST in maniera diretta, o sbaglio?

    <?php
    $nome_utente=$_POST['nome_utente']="pippo";
    $_POST['email']="pippo@iol.it";
    include ("config.php");
    include ("dbconnect.php");
    include ("controldata.php");
    $lettura_database ='SELECT * FROM newsletter WHERE nome_utente=$nome_utente';
    $ris = mysql_query($lettura_database) or die("ERRORE NELLA LETTURA DATABASE" .mysql_error());
    while($scatola_temporanea=mysql_fetch_array($ris)) { /*scansiona l'array*/
    if ($result==false){
    include("iscrivi.php");
    } else {
    $nome_utente_temp=($scatola_temporanea['nome_utente']);
    $email_temp=($scatola_temporanea['email']);

    if ($_POST['nome_utente']==$nome_utente_temp and $_POST['email']==$email_temp) {
    include ("ritorno.php");
    } else {
    include("iscrivi.php");
    }
    }}
    /*fine scansione database*/
    ?>
    --------------------------
    Inoltre tu non mi hai detto se tenere o meno le righe di codice sotto il select (tipo il while), perchè mi chiedo:
    Se uso solo il Select nel modo da te descritto chi è che mi fa il ciclo su tutti i record?
    E se invece io tengo il codice relativo al While e il $ris, proprio quando arrivo al $ris mi sbatte fuori dal codice e quindi come controllo i dati.
    Scusami mi rendo conto che ti angoscio e quindi se ti sei stancato, posto il problema un'altra volta all'interno del NG senza problemi alcuni.
    In ogni caso di ringrazio lo stesso per la cortesia e il tempo dedicatomi, se poi riesci a darmi qualche info in piu'te ne sarei grato.
    Un saluto
    PAOLO

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.