Visualizzazione risultati 1 fino 25 di 25

Discussione: [PHP-MySQLi] Inserimento dati nel database

  1. #1
    Guest

    Exclamation [PHP-MySQLi] Inserimento dati nel database

    Rieccomi
    Ho un database dove troviamo una tabella con 5 campi quali:
    ID di tipo intero con auto incremento
    IP di tipo intero
    email di tipo varchar
    usurname di tipo varchar
    password di tipo varchar

    Nel mio codice PHP riesco a stabilire una connessione con il database ma non riesco, leggendo i dati tramite un form, ad inserirli nel database...
    Sapete aiutarmi?
    Questo è il mio codice (anche se abbozzato, per provare):
    Codice PHP:
    <?php
    //Connessione database
    $connect = new mysqli("localhost", "usurname", "password", "nomedatabase");

    // verifica dell'avvenuta connessione
    if (mysqli_connect_errno()) {
    // notifica in caso di errore
    echo "Errore in connessione al DBMS: ".mysqli_connect_error();
    // interruzione delle esecuzioni i caso di errore
    exit();

    }
    else {
    // notifica in caso di connessione attiva
    echo "Connessione avvenuta con successo!";
    if(isset(
    $_POST['submit'])){
    if(
    $mysqli->query('INSERT into NOMETABELLA (mail, usurname, pass) VALUES (\''.mysqli_real_escape_string($mail).'\',\''.mysqli_real_escape_string($usurname).'\',\''.mysqli_real_escape_string($pass).'\')'){ /*Codice per mandarmi un messaggio del fatto di aver un'altro iscritto */
    echo 'Dati inseriti correttamete';
    }
    echo
    "Errore!";
    }
    }
    // chiusura della connessione
    $connect->close();
    ?>
    <form method="post" id="modulo">
    <table>

    <tr><td valign="top"><span>Tua e-mail:</span></td><td><input value="<?= $_POST['mail'];?>" name="mail" <?= ($avvisi['mail'])?> type="text" id="mail" /></td></tr>

    <tr><td valign="top"><span>Usurname:</span></td><td><input value="<?= $_POST['usurname'];?>" name="usurname" <?= ($avvisi['usurname'])?> type="text" id="usurname" /></td></tr>

    <tr><td valign="top"><span>Password:</span></td><td><input value="<?= $_POST['pass'];?>" name="pass" <?= ($avvisi['pass'])?> type="text" id="pass" /></td></tr>

    <tr><td valign="top"><span>Conferma password:</span></td><td><input value="<?= $_POST['cpass'];?>" name="cpass" <?= ($avvisi['cpass'])?> type="text" id="cpass" /></td></tr>
    <tr><td></td><td>

    <input type="submit" name="submit" id="submit" value="Invia" />
    </tr></td>
    </table>
    </form>
    Come faccio a fare caricare correttamente il mio database? Il problema è che non mi esegue il contenuto dell'IF dopo: if(isset($_POST['submit'])){, quindi potete dirmi come correggerlo?

    Sapreste anche dirmi come fare in modo che quando si inserisce la password si vedano degli altri simboli e non il reale testo?

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Mi sembra manchi una parentesi chiusa nella riga diciassette, prima della parentesi graffa. Non ti mostra un messaggio di errore in merito?
    Per quanto riguarda le password, dovresti inserirne l'hash (che non è una mera traslitterazione in simboli, leggi la voce su Wikipedia al rigurado).

  3. #3
    Guest

    Predefinito

    Le parentesi dovrebbero essere giuste, comunque ora cerco hash ma per quanto riguarda il caricamento del database? :/

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Ho appena provato il codice: a parte quel problema di parentesi ed il fatto che prima usi la variabile $connect e poi chiami il metodo query sulla variabile mysqli non ci sono problemi, la query viene eseguita correttamente.

  5. #5
    Guest

    Predefinito

    Ops, errore di copiatura.. problema risolto! Ma a me non va... cosa può essere?

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Puoi indicare il codice esatto che usi?

  7. #7
    Guest

    Predefinito

    Il codice e' quello riportato sopra con la correzione del metodo di connessione... comunque a me non da nessun errore di parentesi

  8. #8
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Non è che stai da qualche parte sopprimendo i messaggi di errore? Assicurati di prima della connessione
    Codice PHP:
    error_reporting(E_ALL);

  9. #9
    Guest

    Predefinito

    Non conoscevo questa funzione ora mi da degli errori, uno per ogni variabile dicendomi: Undefined index: VARIABILE

  10. #10
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Il messaggio di errore completo?

  11. #11
    Guest

    Predefinito

    Mi spunta all'interno degli input del form ed è: <br /><b>Notice</b>: Undefined index: mail in <b>/membri/sewzen/MIAPAGINA.php</b> on line <b>67</b><br />
    E cosi via per le altre variabili...

    In questo modo ho risolto l'errore:
    Codice PHP:
    <input value="<?= isset($_POST['mail']);?>
    E cosi via per gli altri, pero adesso quando premo invio, negli'input spunta il valore 1 a prescindere dall'inserimento o meno di un testo. Comunque sia, non ottengo il risultato desiderato..
    Ultima modifica di mathis : 07-04-2013 alle ore 00.57.41

  12. #12
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Quello non è un errore, è un avviso (notice) che ti informa del fatto che non c'è quell'elemento dell'array. Se provi ad inviare il modulo cosa succede?

  13. #13
    Guest

    Predefinito

    Se provo ad inviare mi spunta il testo Errore!

    Se guardi sopra intendo quello:
    Codice PHP:
    }
    echo
    "Errore!";
    }
    }
    $connect->close();
    ?>

  14. #14
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    È corretto: viene stampato ogni volta che la condizione dell'if in riga sedici è vera. Indenta per bene il codice e verifica nel database se il record è stato aggiunto.

  15. #15
    Guest

    Predefinito

    Il record non viene aggiunto, la tabella resta vuota e poi dovrebbe arrivarmi anche una e-mail ma niente :/

  16. #16
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Mail? Dove? Ripeto: se non indichi il codice completo non è possibile identificare l'errore.

  17. #17
    Guest

    Predefinito

    Codice PHP:
    <?php
    //Connessione database
    $connect = new mysqli("localhost", "usurname", "password", "nomedatabase");

    // verifica dell'avvenuta connessione
    if (mysqli_connect_errno()) {
    // notifica in caso di errore
    echo "Errore in connessione al DBMS: ".mysqli_connect_error();
    // interruzione delle esecuzioni i caso di errore
    exit();

    }
    else {
    // notifica in caso di connessione attiva
    echo "Connessione avvenuta con successo!";
    if(isset(
    $_POST['submit'])){
    if(
    $connect->query('INSERT into Utenti (mail, usurname, pass) VALUES (\''.mysqli_real_escape_string($mail).'\',\''.mysqli_real_escape_string($usurname).'\',\''.mysqli_real_escape_string($pass).'\')')){
    $to = "\n mia@email.it ";
    $headers = "From: website@sewzen.it \n";
    // soggetto della mail
    $subject = "E-mail proveniente da Sewzen website";
    // corpo messaggio
    $body .= "NUOVA REGISTRAZIONE!\n\n";
    $body .= "Usurname: " . trim(stripslashes($_POST["usurname"])) . "\n"; //nome del mandante
    $body .= "E-mail: " . trim(stripslashes($_POST["mail"])) . "\n"; //mail
    $body.= "IP: ".getenv("REMOTE_ADDR") ."\n";
    // invio mail
    mail($to, $subject, $body, $headers);
    $destinatario = $_POST["mail"];
    $oggetto = "E-mail proveniente da Sewzen website";
    $head = "From: website@sewzen.it";
    $messaggio = "Salve " . trim(stripslashes($_POST["usurname"])) . ", grazie per esserti registrato al nostro sito!\n\n";
    mail($destinatario, $oggetto, $messaggio, $head);
    echo
    'Dati inseriti correttamete';
    }
    else echo
    "Errore!";
    }
    }
    // chiusura della connessione
    $connect->close();
    ?>
    <form method="post" id="modulo">
    <table>

    <tr><td valign="top"><span>Tua e-mail:</span></td><td><input value="<?= $_POST['mail'];?>" name="mail" type="text" id="mail" /></td></tr>

    <tr><td valign="top"><span>Usurname:</span></td><td><input value="<?= $_POST['usurname'];?>" name="usurname" type="text" id="usurname" /></td></tr>

    <tr><td valign="top"><span>Password:</span></td><td><input value="<?= $_POST['pass'];?>" name="pass" type="text" id="pass" /></td></tr>

    <tr><td valign="top"><span>Conferma password:</span></td><td><input value="<?= $_POST['cpass'];?>" name="cpass" type="text" id="cpass" /></td></tr>
    <tr><td></td><td>

    <input type="submit" name="submit" id="submit" value="Invia" />
    </tr></td>
    </table>
    </form>
    </div>
    </div>
    </body>
    </html>
    Ecco il codice completo..

  18. #18
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Dunque, se usi la funzione mysqli_real_escape_string così i record inseriti saranno sempre vuoti, devi usare il metodo real_escape_string richiamandolo sull'oggetto $connect, per capire poi qual'è l'errore che viene prodotto durante l'esecuzione della query puoi andare a controllare il valore della proprietà error.
    La chiamata alla funzione stripslashes a cosa dovrebbe servire?

  19. #19
    Guest

    Predefinito

    Scusa, credo di non aver capito.. potresti spiegarti meglio? :

    Comunque la funzione stripslashes la uso per eliminare eventuali slash :)

  20. #20
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da mathis Visualizza messaggio
    Scusa, credo di non aver capito.. potresti spiegarti meglio? :
    Leggi la documentazione relativa alla funzione mysqli_real_escape_string, in particolare le note.
    Citazione Originalmente inviato da mathis Visualizza messaggio
    Comunque la funzione stripslashes la uso per eliminare eventuali slash :)
    Sì, ma a che pro? All'interno di una mail non comportano problemi di sicurezza.

  21. #21
    Guest

    Predefinito

    Codice PHP:
    if (!$connect->query("INSERT into Utenti (Usurname) VALUES ('$usurname')")) {
    printf("Error: %s\n", $connect->sqlstate);
    }

    $usurname= $connect->real_escape_string($usurname);

    if (
    $connect->query("INSERT into Utenti(Usurname) VALUES ('$usurname')")) {
    printf("%d Row inserted.\n", $connect->affected_rows);
    }
    Intendi in questo modo? Scusa ma non sono riuscito a capire tutto

  22. #22
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Più o meno, quando chiami la funzione mysqli_real_escape_string devi passare due parametri: l'identificatore della connessione (che tu non hai, in quanto usi la sintassi ad oggetti) e la stringa di cui fare l'escape. Se uno usa la sintassi ad oggetti deve fare come hai scritto nel tuo ultimo messaggio. La riga diciassette dovrebbe essere quindi così scritta:
    Codice PHP:
    if($connect->query('INSERT into Utenti (mail, usurname, pass) VALUES ("'.$connect->real_escape_string($_POST['mail']).'", "'.$connect->real_escape_string($_POST['usurname']).'", "'.$connect->real_escape_string($_POST['pass']).'")')){
    e quando vai a scrivere Errore, scrivi anche qual'è (almeno adesso che stai ancora scrivendo lo script), così:
    Codice PHP:
    echo 'Errore! '.$connect->error;
    Ultima modifica di karl94 : 07-04-2013 alle ore 21.02.38

  23. #23
    Guest

    Predefinito

    Sono riuscito a far si che si crea un nuovo rigo ma comunque le colonne restano vuote solo l'ID incrementa ma gli altri campi restano vuoti, va bé.. già comunque hai fatto moltissimo per me, quindi ti ringrazio tantissimo... ora ci smanetto su

  24. #24
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Ops... Ho sbagliato la correzione dell'if, riprova con il codice corretto.

  25. #25
    Guest

    Predefinito

    Ecco cosa dimenticavo, avevo dimenticato che dovevo passarlo nel oggetto $connect
    Grazie di tutto, edificherò una statua in tuo onore e anche in onore di Alemoppo che, anche lui, mi ha aiutato in moltissime cose xD

Regole di scrittura

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