Problema jQuery validation AJAX (PHP 7)

lorenzocanal24

Nuovo Utente
31 Gen 2019
8
0
1
Buongiorno a tutti,
ho un problema con la validazione dei dati inseriti nel form per la registrazione: ho utilizzato Jquery validation per controllare se i campi ineriti non siano vuoti, e ho utilizzato Ajax per controllare che l'username e la email inseriti non siano già registrati.
Quando utilizzavo Altervista come servizio di hosting non ho avuto problemi, funzionava tutto. Adesso però ho spostato il mio sito su Aruba e la parte di Ajax non ha più funzionato.
Ho cambiato ovviamente i dati del database e alcune righe di codice, perché su altervista si utilizza la versione 5 di PHP se non erro, mentre su Aruba ho la versione 7, quindi ho cambiato ad esempio "mysql_connect" in "mysqli_connect".


controllo_dati2.js
Codice:
$(document).ready(function()

                  {

  // my method for validate username

  $.validator.addMethod("username_regex", function(value, element) {

    return this.optional(element) || /^[a-z0-9\.\-_]{3,30}$/i.test(value);

  }, "Please choise a username with only a-z 0-9.");



  //REGISTRAZIONE

  $("#registration_form").validate(

    {

      rules:{

        'nome':{

          required: true,

        },

        'cognome':{

          required: true,

        },

        'username_reg':{

          required: true,

          minlength: 4,

          username_regex: true,

          remote:{

            url: "../validatorAJAX.php",

            type: "post",
            
            contentType : "application / json; charset = utf-8" ,
            
            dataType : "json" ,

            data: {username:  function(){return $('#username_reg').val()}},

          }

        },

        'email_reg':{

          required: true,

          email: true,

          remote:{

            url: "../validatorAJAX.php",

            type: "post",
            
            contentType : "application / json; charset = utf-8" ,
            
            dataType : "json" ,

            data: {email:  function(){return $('#email_reg').val()}},

          }

        },

        'password_reg':{

          required: true,

          minlength: 8

        },

        'conferma_pass':{

          required: true,

          equalTo: "#password_reg"

        },

        'provincia':{

          required: true,

        },

      
        'condizioni':{

          required: true,

        },

      },

      messages:{

        'nome':{

          required: "Il campo nome è obbligatorio!",

        },

        'cognome':{

          required: "Il campo cognome è obbligatorio!",

        },

        'username_reg':{

          required: "Il campo username è obbligatorio!",

          minlength: "Scegli un username di almeno 4 lettere!",

          username_regex: "Hai utilizzato caratteri non validi. Sono consentiti solo lettere numeri!",

          remote: "L'username è già utilizzato da un altro utente!"

        },

        'email_reg':{

          required: "Il campo email è obbligatorio!",

          email: "Inserisci un valido indirizzo email!",

          remote: "L'indirizzo email è già stato registrato!"

        },

        'password_reg':{

          required: "Il campo password è obbligatorio!",

          minlength: "Inserisci una password di almeno 8 caratteri!"

        },

        'conferma_pass':{

          required: "Compilare questo campo!",

          equalTo: "Le password non corrispondono!"

        },

        'provincia':{

          required: "Scegliere un elemento dall'elenco!",

        },

        'condizioni':{

          required: "Devi accettare le nostre condizioni!",

        },

      }

    });
validatorAJAX.php
PHP:
<?php
include("db_con.php"); // connessione al db

$username=$_POST['username_reg'];
$email=$_POST['email_reg'];


// funzione per verificare l'esistenza dell'username

function isset_username($username){

    $username = trim($username);

    $query = "SELECT COUNT(*) AS num FROM users WHERE Username='" .mysqli_real_escape_string($username). "'";

    $result = mysqli_query($query) or die(mysqli_error());

    $row = mysqli_fetch_array($result);

    if($row['num']>=1){

        return TRUE; // true se utente esiste

        }

    else{

        return FALSE;

        }

    }



// funzione per verificare l'esistenza dell'email

function isset_email($email){

    $email = trim($email);

    $query = "SELECT COUNT(*) AS num FROM users WHERE Email='" .mysqli_real_escape_string($email). "'";

    $result = mysqli_query($query) or die(mysqli_error());

    $row = mysqli_fetch_array($result);

    if($row['num']>=1){

        return TRUE; // true se utente esiste

        }

    else{

        return FALSE;

        }

    }



/*

PROCESSIAMO LA RICHIESTA AJAX

*/

if(isset($username)){

    if(!isset_username($username)){

        echo 'true';

        }

    else{

        echo 'false';

        }

    }

else if(isset($email)){

    if(!isset_email($email)){

        echo 'true';

        }

    else{

        echo 'false';

        }

    }
?>
Riuscite a dirmi dove sbaglio?
grazie in anticipo
 

mr.x

Utente Attivo
9 Apr 2016
250
25
28
Dando una letta veloce ti dico che le query sono errate (non escludo ci siano altri errori).
Per utilizzare le istruzioni mysqli non ti basta solo aggiungere una i a mysql, nelle quueryva a nche richiamata la variabile di connessione al DB.
es. la tua
PHP:
$result = mysql_query($query);
diventa
PHP:
$result = mysqli_query($connessione, $query);
dove $connessione è appunto

PHP:
$connessione = mysqli_connect("locationDB", "userDB", "passDB", "nomeDB");
inoltre se controlli i log vedrai che hai un errore dovuto a parametro mancante nella query
 

lorenzocanal24

Nuovo Utente
31 Gen 2019
8
0
1
Comunque ho provato a fare come hai detto ma niente:
PHP:
<?php
//include("db_con.php"); // connessione al db

$servername = "nome";
$username = "login";
$password = "******";
$dbname = "nomdb";

$conn=mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (mysqli_connect_errno())
  {
  echo "Errore connessione: " . mysqli_connect_error();
  }
 
$username=$_POST['username_reg'];
$email=$_POST['email_reg'];


// funzione per verificare l'esistenza dell'username

function isset_username($username){

    $username = trim($username);

    $query = "SELECT COUNT(*) AS num FROM users WHERE Username='" .mysqli_real_escape_string($username). "'";

    $result = mysqli_query($conn,$query) or die(mysqli_error());

    $row = mysqli_fetch_array($result);

    if($row['num']>=1){

        return TRUE; // true se utente esiste

        }

    else{

        return FALSE;

        }

    }



// funzione per verificare l'esistenza dell'email

function isset_email($email){

    $email = trim($email);

    $query = "SELECT COUNT(*) AS num FROM users WHERE Email='" .mysqli_real_escape_string($email). "'";

    $result = mysqli_query($conn,$query) or die(mysqli_error());

    $row = mysqli_fetch_array($result);

    if($row['num']>=1){

        return TRUE; // true se utente esiste

        }

    else{

        return FALSE;

        }

    }



/*

PROCESSIAMO LA RICHIESTA AJAX

*/

if(isset($username)){

    if(!isset_username($username)){

        echo 'true';

        }

    else{

        echo 'false';

        }

    }

else if(isset($email)){

    if(!isset_email($email)){

        echo 'true';

        }

    else{

        echo 'false';

        }

    }
?>
In più ho controllato i log, ma non risulta nessun tipo di errore
 

macus_adi

Utente Attivo
5 Dic 2017
1.210
77
48
IT/SW
PHP:
$conn=new mysqli($host,$user,$passwd,$database);
$data=$conn->query("SELECT COUNT(*) AS num FROM users WHERE Username='nome'")->fetch_all(MYSQLI_ASSOC);
dd($data);
Prova così!
 

mr.x

Utente Attivo
9 Apr 2016
250
25
28
puoi tranquillamente includere la connessione al DB da file esterno come stavi facendo, ricordando di richiamare la variabile di connessione nelle istruzioni mysqli e nelle funzioni passandola come argomento o cmq rendendola visibile.

la tua funzione corretta

PHP:
function isset_username($username){
global $conn;
    $username = trim($username);
   
    $query = "SELECT COUNT(*) AS num FROM users WHERE Username='" .mysqli_real_escape_string($conn, $username). "'";

    $result = mysqli_query($conn,$query) or die(mysqli_error());

    $row = mysqli_fetch_array($result);

    if($row['num']>=1){

      return TRUE; // true se utente esiste

        }

    else{

      return FALSE;

        }

    }
volendo accorpare le due funzioni che hai

PHP:
function isset_username_mail($username,$email){
    global $conn;

    $username = mysqli_real_escape_string($conn, trim($username));
    $email = mysqli_real_escape_string($conn, trim($email));

    $query = "SELECT Username FROM users WHERE Username='$username' OR Email='$email'";

    $result = mysqli_query($conn,$query) or die(mysqli_error());

if(mysqli_num_rows($result)!=0){
    return TRUE; // true se utente esiste
      }
    else{
    return FALSE;
      }
    }
 

lorenzocanal24

Nuovo Utente
31 Gen 2019
8
0
1
Scusate il ritardo ma ho avuto problemi col PC..
Comunque ho provato tutto quello che mi avete consigliato, ma niente..