Validare username transmis cu cel actual

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Stefan
Mesaje: 63

Validare username transmis cu cel actual

Salut, cum as putea valida cu jquery si cu php datele dintr-un formular de contact? Am reusit in mare parte dar mai am nevoie de inca ceva.
Cum as putea verifica cu "remote" mai multe conditii pentru un singur input (fara a mai creea reguli noi). Sau daca nu se poate sa verific mai multe lucruri cu un singur remote, cum creez o regula prin care sa verific ceva?

Exemplu:
- Am o pagina de editare a datelor la un anumit cont, si de exemplu pentru input-ul "username" verific cu jquery si php daca username-ul introdus afla in baza de date (cu remote). Asta functioneaza, dar cum as putea verifica daca username-ul introdus este acelasi cu username-ul actual al contului?

edit.php:

Cod: Selectaţi tot

$( document ).ready( function () {
  jQuery.validator.addMethod("special_chars", function(value, element) {
     return this.optional( element ) || /^[a-zA-Z0-9- ]*$/.test( value );
  }, "<span style='color:#EF5350'>Ați introdus caractere interzise!</span>.");
      
  $( "#principal" ).validate( {
    rules: {
      username: {
        required: true,
        minlength: 3,
        maxlength: 15,
        remote: {
          url: "sadmin/actiuni/profil/username.php",
          type: "POST",
          data: { token: $('#token').val() }
        },
        special_chars : true
      }
      messages: {
        username: {
          required  : "<span style='color:#EF5350'>Introduceți username-ul!</span>",
          minlength : "<span style='color:#EF5350'>Username-ul trebuie să conțină minim 3 caractere!</span>",
          maxlength : "<span style='color:#EF5350'>Username-ul trebuie să conțină maxim 15 caractere!</span>",
          remote    : "<span style='color:#EF5350'>Acest username există deja!</span>"
        }
        }
      }
    } );
});
username.php:

Cod: Selectaţi tot

if(!isset($_SESSION)) session_start();
 
if(isset($_SESSION['token']) && isset($_POST['token']) && $_SESSION['token'] == $_POST['token'] && $_SESSION['token']>=(time()-600)){
    include('../../../core/database/connect.php');
    $sql = mysqli_query($con, "SELECT `username` FROM `utilizatori` WHERE `username` = '" . $_POST["username"] . "'");
 
    $exista = mysqli_num_rows($sql);
    if($exista) echo 'false';
    else echo 'true';
}

MarPlo
Depinde cum /unde e retinut username-ul actual.
Daca e in sesiune (cum ar fi indicat), de exemplu $_SESSION['username'], verifici in "username.php" daca numele transmis ($_POST['username']) e acelasi cu cel din sesiune.
Cam asa:

Cod: Selectaţi tot

if(!isset($_SESSION)) session_start();
 
if($_SESSION['username']==$_POST['username'] && isset($_SESSION['token']) && isset($_POST['token']) && $_SESSION['token'] == $_POST['token'] && $_SESSION['token']>=(time()-600)){
  //etc..
}

Stefan
Nu la asta ma refeream, am o pagina de editare a utilizatorilor, cand selectez un utilizator ma trimite la pagina de ediare a contului cu id-ul respectiv: imgur.com/a/R7N1D

Cu jquery vreau sa validez datele, dupa ce se trimite formularul, username-ul vreau sa il verific daca este diferit de cel actual (cel actual fiind "admin").
Am cautat o multime de metode cu jQuery.validator.addMethod() dar nu ma ajuta mai niciuna. Cum as putea crea o regula cu "jQuery.validator.addMethod()" si cu ajax care sa trimita datele la un fisier php (exemplu, username_diferit.php) in care sa verifice daca valoarea introdusa este diferita de username-ul actual, iar daca este adevarat sa nu se intample nimic, iar daca este fals sa se afiseze o eroare.

Am incercat sa fac asa

Cod: Selectaţi tot

$( document ).ready( function () {
	jQuery.validator.addMethod("special_chars", function(value, element) {
		 return this.optional( element ) || /^[a-zA-Z0-9- ]*$/.test( value );
	}, "<span style='color:#EF5350'>Ați introdus caractere interzise!</span>.");
	
	jQuery.validator.addMethod("test", function(value, element) {
		$.ajax({
			type : "POST",
			url : "sadmin/actiuni/profil/username_diferit.php",
			data : {
				token: $('token').val(),
				username: $('username').val(),
				id: $('id').val()
			},
			dataType : "html",
			success : function(msg) {
				if (msg == 'true') return false;
				else return true;
			}
		})
	}, "This username is already taken.");
	
	$( "#principal" ).validate( {
		rules: {
			username: {
				required: true,
				minlength: 3,
				maxlength: 15,
				test: true,
				remote: {
					url: "sadmin/actiuni/profil/username.php",
					type: "POST",
					data: { token: $('#token').val() }
				},
				special_chars : true
			},
			messages: {
					username: {
						required  : "<span style='color:#EF5350'>Introduceți username-ul!</span>",
						minlength : "<span style='color:#EF5350'>Username-ul trebuie să conțină minim 3 caractere!</span>",
						maxlength : "<span style='color:#EF5350'>Username-ul trebuie să conțină maxim 15 caractere!</span>",
						remote    : "<span style='color:#EF5350'>Acest username există deja!</span>"
					},
Dar mereu imi returneaza "false", adica imi afiseaza eroare. Cred ca e de la acel "test: true", dar e ciudat fiindca asa am facut si la "special_chars : true" si acolo functioneaza. Cum as putea face?
M-am uitat si pe: jQuery.validator.addMethod(), dar nu prea am inteles cum sa fac si cu ajax.
Si scuzati, momentan sunt incepator in jquery/ajax si incerc sa invat si sa inteleg cat mai mult

MarPlo
Nu stiu cum functioneaza acel plugin jquery pt. validare date.
In general am folosit propria functie ajax si reguli de validare create direct cu javascript (fara plughin-uri).
Incearca sa scoti cel "test: true" care banuiesti ca ar fi cauza.

- Cred ca metoda jQuery.validator.addMethod() nu merge cu ajax, fiindca ea returneaza un raspuns true/false syncron, dar ajax se executa asyncron. Adica, pana e primit raspunsul de la server, acea metoda nu "asteapta", continua executia restului de cod, cu raspuns neprimi (false).

- Ca idee, ar trebui sa retii dinainte intr-o variabila in javascript username-ul actual, si verifici cu el.
Cam asa:

Cod: Selectaţi tot

var user_valid ='admin';
//your code..
jQuery.validator.addMethod('test', function(value, element) {
  return ($('username').val()==user_valid) ?true :false;
}

Stefan
Chiar nu m-am gandit la asta, multumesc mult!

Subiecte similare