Ergebnis 1 bis 13 von 13
  1. #1
    EvilBen ist offline Foren As
    registriert
    30-08-2015
    Beiträge
    90

    Jquery Mysql anfrage

    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

  2. #2
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.218

    AW: Jquery Mysql anfrage

    Nun möchte ich, dass eben bereits registrierte Emails sich nicht noch einmal Anmelden können.
    Die einzig 100%ig sichere Variante ist ein UNIQUE KEY constraint in der Datenbank.

  3. #3
    Avatar von miniA4kuser
    miniA4kuser ist offline Lounge-Member
    registriert
    12-07-2006
    Beiträge
    2.995

    AW: Jquery Mysql anfrage

    Zitat Zitat von EvilBen Beitrag anzeigen
    anhand des Echos sehe ich aber, dass die $_GET schonmal richtig ankommt.
    Ja da kommt was an, aber was soll dennzurück kommen? Du rufst $usernameChecker->check($_GET['mail']); auf, aber verarbeitest den Rückgabewert von check() nicht...
    Hoffe ich konnte helfen

  4. #4
    EvilBen ist offline Foren As
    registriert
    30-08-2015
    Beiträge
    90

    AW: Jquery Mysql anfrage

    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....
    Geändert von EvilBen (24-03-2017 um 18:08 Uhr)

  5. #5
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.380

    AW: Jquery Mysql anfrage

    Ein return macht in PHP keine Ausgabe - du musst da schon mit echo irgendwas ausgeben, damit JS das dann interpretieren kann.

  6. #6
    EvilBen ist offline Foren As
    registriert
    30-08-2015
    Beiträge
    90

    AW: Jquery Mysql anfrage

    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?!

  7. #7
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.218

    AW: Jquery Mysql anfrage

    Rückgabewerte in einer asynchronen Funktion sind sinnfrei. Sobald du asynchron arbeitest, kannst du nur noch Callbacks nutzen.

  8. #8
    EvilBen ist offline Foren As
    registriert
    30-08-2015
    Beiträge
    90

    AW: Jquery Mysql anfrage

    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 ?!

  9. #9
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.218

    AW: Jquery Mysql anfrage

    Zitat Zitat von EvilBen Beitrag anzeigen
    Okay...Und wie mache ich das ?!
    k.A. wie man das mit diesem Plugin macht.

    Die generelle Idee ist, dass wenn der AJAX-Response kommt, eine Funktion ausgeführt wird, die dann das Gewünschte macht.

  10. #10
    EvilBen ist offline Foren As
    registriert
    30-08-2015
    Beiträge
    90

    AW: Jquery Mysql anfrage

    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... ?!

  11. #11
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.218

    AW: Jquery Mysql anfrage

    Laut Doku gibt es einen remote Validator. Den müsstest du nehmen. Perform remote checking via Ajax request - FormValidation

  12. #12
    EvilBen ist offline Foren As
    registriert
    30-08-2015
    Beiträge
    90

    AW: Jquery Mysql anfrage

    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,
    ));

  13. #13
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.218

    AW: Jquery Mysql anfrage

    Da fehlt noch die Fehlermeldung

Ähnliche Themen

  1. [PHP] Login in mit Session - Fehler bei der mysql Anfrage
    Von PhilippKr im Forum Serverseitige Programmierung
    Antworten: 4
    Letzter Beitrag: 18-11-2014, 22:53
  2. Ausgabe einer MySQL Anfrage mit Count, Sum() und GROUP BY
    Von PhilippKr im Forum Serverseitige Programmierung
    Antworten: 3
    Letzter Beitrag: 08-08-2014, 20:15
  3. Antworten: 8
    Letzter Beitrag: 10-03-2014, 08:02
  4. Antworten: 0
    Letzter Beitrag: 11-02-2011, 17:46
  5. jQuery ? “Wer ist Online” Widget mit PHP, MySQL
    Von jswelt bot im Forum Links & Tutorials mit Tipps & Tricks zu JavaScript, CSS, PHP, MySQL
    Antworten: 0
    Letzter Beitrag: 10-03-2010, 06:50

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •