• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Jquery Mysql anfrage

EvilBen

New member
Hey Leute,

ich habe mal wieder ein kleines Problemchen.

In einem Registrierungsformular validiere ich die Felder mittels des formvalidation.io Plugins. Nun möchte ich, dass eben bereits registrierte Emails sich nicht noch einmal Anmelden können.
Dazu habe ich folgendes gefunden:
LINK

Mein Code sieht wie folgt aus:

checkUsername.php

Code:
$db = @new mysqli('localhost', '***', '***', '***');
require 'checkUsername.class.php';
 
 
$config = array('DB' => $db, 
                'Table' => 'usr_users',
                'Row' => 'reg_email',
                'Output' => true,
                'Format' => 'JSON');
                 
$usernameChecker = new usernameChecker($config);
 echo $_GET['mail'];
if(isset($_GET['mail']) && strlen($_GET['mail']) > 3) {
    $usernameChecker->check($_GET['mail']);
}

anhand des Echos sehe ich aber, dass die $_GET schonmal richtig ankommt. Weiter...

Die Klasse:

Code:
<?php
class usernameChecker {
    private $db;
    private $table;
    private $row;
    private $output;
    private $format;  
  public function __construct($config) {
        if(!is_array($config)) trigger_error('NO CONFIG');
        $isset = isset($config['DB'], $config['Table'], $config['Row']);
        if(!$isset) trigger_error('CONFIG NOT VALID');
         
        $this->format = (isset($config['Format']) && ($config['Format'] === 'JSON')) ? 'json' : 'default';
        $this->output = (isset($config['Output']) && ($config['Output'] === true)) ? true : false;
         
        $this->db = $config['DB'];
        $this->table = $config['Table'];
        $this->row = $config['Row']; 
    }
	
	 public function check($username) {
        $exist = false;
        $sql = '
                SELECT
                       COUNT(*)
                FROM
                      '.$this->table.'
                WHERE
                      '.$this->row.' = ?';    
        $stmt = $this->db->prepare($sql);
        $stmt->bind_param('s', $username);
        $stmt->execute();
        $stmt->bind_result($exist);
        $stmt->fetch();
        $stmt->close();
        $exist = (bool)$exist;
        if($this->format === 'json') $exist = json_encode($exist);
         
        if($this->output === true) {
            echo $exist;
            return;
        }    
                 
        return $exist;         
    }
// ENDE DER KLASSE
}
	?>

Und zu guter letzt, dass Problem-Kind glaube ich:

Code:
(...)
(window.jQuery));
;(function($){
	$.fn.bootstrapValidator.validators.mailfrei = {
		html5Attributes: {
				message: 'message'
			},
		
		validate: function(validator, $field, option){
			var mail = $field.val();
			//console.log(mail);
			
			console.log(mail.length);
			$.getJSON('script/checkUsername.php', { mail: mail, nocache : Math.random()*Math.random() }, function(data) {
                    if(data) {
						console.log("ja");
								return false;
					} else {
						console.log("mhhh");
								return true;
					}
                });     
			
			
		}
		
		
	}
}
(...)

Der loggt nämlich nichts in der Konsole. Gibt mir aber auch keinen Fehler aus, folglich gehe ich davon aus, dass da gar nix zurück kommt irgendwie ?!

Hoffe ihr könnt mir weiterhelfen.

Bis dahin!

LG
 
ja das ist meine frage miniA4kuser ...
wie soll ich denn das ganze verarbeiten bzw zurück an JS geben ?

Habe jetzt mal ein return vor $usernameChecker->check($_GET['mail']);
gemacht. Das Funktioniert jetzt! Jetzt wird das ganze richtig zurück gegeben, nur sagt gibt er mir immer ein false zurück....
 
Zuletzt bearbeitet:
Ein return macht in PHP keine Ausgabe - du musst da schon mit echo irgendwas ausgeben, damit JS das dann interpretieren kann.
 
Bringt aber auch nicht den gewünschten Effekt kkapsner!
Er empfängt in JS das richtige Ergebnis! Aber die Funktion gibt halt nicht true oder false zurück, ergo kann natürlich auch nicht überprüft werden was Sache ist .. Bzw die Funktion scheint immer False zu sein?!
 
Rückgabewerte in einer asynchronen Funktion sind sinnfrei. Sobald du asynchron arbeitest, kannst du nur noch Callbacks nutzen.
 
Okay...Und wie mache ich das ?! Ich bin wirklich Anfänger...

Muss es dann im Validator natürlich verwenden können:

Code:
email: {
                validators: {
					mailfrei: {
						message: 'Diese E-Mail Adresse ist bereits registriert'
					},
                    notEmpty: {
                        message: 'Gebe bitte eine E-Mail Adresse an'
                    },
                    emailAddress: {
                        message: 'Gebe bitte eine gültige E-Mail Adresse an'
                    } 
					
					
                }
            },

Der Fehler kommt natürlich immer dann, wenn false zurück gegeben wird ?!
 
Also bisher ist es ja so, dass das Plugin als bei nem false return eben den Fehler ausgibt. Wenn das jetzt nicht funktioniert, wie du sagst, kann ich das dann anders lösen? Also per PHP auf die DB zugreifen? oder ist meine Variante die "beste" dafür... ?!
 
wunderbar, ganz easy....Danke Dormilich...

Hier die Lösung:

Code:
email: {
                validators: {
                    notEmpty: {
                        message: 'Gebe bitte eine E-Mail Adresse an'
                    },
                    emailAddress: {
                        message: 'Gebe bitte eine gültige E-Mail Adresse an'
                    },
					remote: {
						message: 'Diese E-Mail Adresse ist bereits registriert',
						url: '/script/.....',
						type: 'POST'
					}
					
					
                }
            },

Code:
$sql = "SELECT * FROM ... WHERE ... = '".$_POST['email']."'";
$result = $db->query($sql);
$anzahl = $result->num_rows;

if($anzahl > 0){
	$isAvailable = false; // or false

}else{
	$isAvailable = true; // or true

}

echo json_encode(array(
    'valid' => $isAvailable,
));
 
Zurück
Oben