Visualizzazione risultati 1 fino 4 di 4

Discussione: Problema Query

  1. #1
    Guest

    Predefinito Problema Query

    Ciao a tutti,
    ho un problema con le query cioè non mi funzionano non capisco dove sbaglio. Ho controllato e ricontrollato ma non trovo errori. Non so se ho dimenticato qualcosa essendo abituato al php prima del 5.5 dove non c'erano le nuove funzioni es. mysqli_query.
    La query di inserimento dei nuovi utenti funziona, invece quella di controllo se il nome utente è già registrato no.
    Vi allego qui sotto un pezzo di codice. Spero che qualcuno posso darmi una mano. Grazie

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    if(isset(
    $_POST["registration"]))
    {
    $dbhost="localhost";
    $dbuser="root";
    $dbpass="";
    $dbname="db_prova";
    $conn = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname) or die("Connection lost!");
    mysqli_select_db($conn,$dbname) or die ("Database connection lost.");


    $nickname=$_REQUEST["nickname"];
    $password=$_REQUEST["password"];
    $password1=$_REQUEST["password1"];
    $email=$_REQUEST["email"];
    $subscrition=$_REQUEST["subscrition"];


    // controllo compilazione campi
    if($nickname=="" || $password=="" || $password1=="" || $email==""){
    echo (
    '<script> alert("Error, Fill in all fields.");</script>');

    }else{
    // verifica se l'utente con questo nome è già stato creato

    $nickexist= @mysqli_query($conn, "SELECT * FROM user WHERE nickname=".$nickname);
    echo(
    $nickexist);
    if(
    $nickexist==NULL){
    // controllo password corrispondenti
    if($password==$password1){
    $queryinsert="INSERT INTO user (nickname,password,email,subscrition,accept) VALUES ('".$nickname."','".$password."','".$email."','".$subscrition."','0')";
    mysqli_query($conn,$queryinsert) or die (mysql_error());
    }else{
    echo(
    '<script> alert("Password is incorrect!");</script>');
    }
    }else{
    echo(
    '<script> alert("The user are already create.");</script>');
    }
    }


    }
    ?>
    Ultima modifica di alemoppo : 17-12-2014 alle ore 23.35.04 Motivo: +[php]

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    • I campi di connessione $dbuser e $dbname non sono corretti. Non so se li hai modificati per nasconderli qui sul forum, comunque qui trovi i parametri corretti.
    • Inutile mettere error_reporting(E_ALL) se poi nelle query usi il simbolo "@", che sopprime eventuali errori/warning
    • $nickexist è il valore tornato da mysqli_query(). Ritrona FALSE in caso di errore durante l'esecuzione della query, o un oggetto mysql_result in caso di query SELECT. Quindi, per verificare se l'utente è già iscritto, più che
      Codice PHP:
      if($nickexist==NULL)
      Io controllerei:
      Codice PHP:
      if(mysqli_num_rows($nickexist) == 0)
      Prima di questo puoi controllare se ci sono stati errori durante l'esecuzione della query con:
      Codice PHP:
      if($nickexist === false)
    • Invece di mysql_error() dovresti usare mysqli_error()
    • Tutti i dati ricevuti da form è buona regola filtrarli prima tramite ad esempio la mysqli_real_escape_string() per evitare sql injection.
    • Invece di $_REQUEST solitamente si usano $_POST o $_GET (ma non è un errore usare $_REQUEST).


    Ciao!
    Ultima modifica di alemoppo : 17-12-2014 alle ore 23.55.54

  3. #3
    Guest

    Predefinito

    Ciao, ho seguito i tuoi consigli e ho provato a modificare ciò che mi avevi detto solamente che cambiando l'if con la funzione mysqli_num_rows($nickexist)==0) mi da questo errore

    mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in ......
    Duplicate entry 'prova' for key 'PRIMARY'

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Citazione Originalmente inviato da minuzzogianluca Visualizza messaggio
    mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in ......
    Da questo, intuisco che la mysqli_query() ritorna false perché si è verificato un errore durante l'esecuzione della query. Quindi usa mysqli_error() anche nella prima chiamata di mysqli_query() (quella della SELECT). Il resto del messaggio immagino che ti stia avvertendo che stai tentando di inserire valori duplicati in un campo PRIMARY.

    Ciao!

Regole di scrittura

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