2016-04-11 3 views
0

Zuerst muss ich sagen, dass ich neu bei PHP bin. Ich versuche, ein Anmeldeformular mit dem Plugin jqueryValidation engine zu validieren. Es gelingt mir, einige Teile zu validieren und jetzt bin ich bei der Validierung des Benutzernamens fest (überprüfe, ob der eingegebene Name bereits in der Datenbank ist und wenn ja, zeige 'Benutzername ist bereits vergeben'). Wenn ich den Benutzernamen 'validieren bitte warten' eingeben, wird angezeigt und ich kann das Formular nicht senden. Ich habe bootstrap 3.3.6 verwendet.Ich versuche ein Anmeldeformular zu validieren, indem ich jqueryValidation engine plugin verwende, einige Validierungen funktionieren nicht richtig

Hier ist meine Anmeldeformular

<div class="modal fade" id="signupForm" data-backdrop="false" role="dialog"> 
    <div class="modal-dialog"> 
     <div class="modal-content Popmodal"> 
      <div class="modal-header"> 
       <button type="button" class="close Popclose" data-dismiss="modal" aria-label=""> 
        <span>&times;</span> 
       </button> 
       <h4 class="modal-title Poptit">Sign Up</h4> 
      </div> 

      <div class="modal-body Popbody"> 
       <div id="error"> 
        <!-- error will be showen here ! --> 
       </div> 
       <form class="form-horizontal" method="post" action="registration.php" id="reg-form"> 
        <div class="form-group"><br> 
         <label class="col-md-4 col-md-offset-1">User Name :</label> 
         <div class="col-md-5"> 
          <input type="text" placeholder="A name that you like to use" value = "" class="form-control input-sm popname validate[required,custom[onlyLetterNumber],maxSize[20],ajax[ajaxUserCallPhp]]" name="uname" id="uname" data-errormessage-value-missing="Username is required !" data-prompt-position="bottomLeft:5,4"><br> 

         </div> 
        </div> 

        <div class="form-group"> 
         <label class="col-md-4 col-md-offset-1">Email :</label> 
         <div class="col-md-5"> 
          <input type="email" placeholder="Your email address" class="form-control input-sm popname validate[required,custom[email]]" name="mail" id="mail" data-errormessage-value-missing="Email is required !" data-errormessage-custom-error="Invalid email address !" data-prompt-position="bottomLeft:5,4"><br> 
         </div> 

        </div> 

        <div class="form-group"> 
         <label class="col-md-4 col-md-offset-1">Password :</label> 
         <div class="col-md-5"> 
          <input type="password" maxlength="15" placeholder="Password" class="form-control input-sm popname validate[required]" name="pass" id="pass" data-errormessage-value-missing="Password is required !" data-prompt-position="bottomLeft:5,4"><br> 
         </div> 
        </div> 

        <div class="form-group"> 
         <label class="col-md-4 col-md-offset-1">Confirm Password :</label> 
         <div class="col-md-5"> 
          <input type="password" maxlength="15" placeholder="Confirm password" class="form-control input-sm popname validate[required,equals[pass]]" name="cpass" id="cpass" data-errormessage-value-missing="Confirm password is required !" data-errormessage-pattern-mismatch="Password fields do not match !" data-prompt-position="bottomLeft:5,4"><br> 
         </div> 
        </div> 

        <div class="form-group"> 
         <div class="col-md-2 col-md-offset-8"> 
          <button type="submit" class="btn btn-success sign" value="submit" name="signup">Sign Up</button> 
         </div> 
        </div> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 

Hier ist der js Teil

<script> 
    $(document).ready(function(){ 
    $("#reg-form").validationEngine(); 
    }); 
    </script> //this part is on the index page with signup form 

"ajaxUserCallPhp": { 
       "url": "ajaxValidateFieldUser.php", 
       "extraDataDynamic": ['#uname'], 
       "alertTextOk": "* This username is available", 
       "alertText": "* This user is already taken", 
       "alertTextLoad": "* Validating, please wait" 
      } 
ist

Hier wird der PHP-Code

<?php 

    $validateValue=$_REQUEST['fieldValue']; 
    $validateId=$_REQUEST['uname']; 


    $validateError= "This username is already taken"; 
    $validateSuccess= "This username is available"; 

    $arrayToJs = array(); 
    $arrayToJs[0] = $validateId; 

    require_once('dbconfig.php'); 

    $stmt = $db_con->query('SELECT uname FROM users WHERE uname ='$validateValue''); 
    $stmt->bindValue(':uname', $uname, PDO::PARAM_STR); 
    $stmt->execute(); 
    $res = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    if ($res->fetchColumn() > 0) { 
    $arrayToJs[1] = false; 
    echo json_encode($arrayToJs); // RETURN ARRAY WITH ERROR 

    } else{ 

    $arrayToJs[1] = true; 
    echo json_encode($arrayToJs); // RETURN ARRAY WITH success 
    } 

    ?> 

Antwort

0

ist hier Lassen Sie beginnen:

$stmt = $db_con->query('SELECT uname FROM users WHERE uname = '$validateValue''); 
$stmt->bindValue(':uname', $uname, PDO::PARAM_STR); 
$stmt->execute(); 
$res = $stmt->fetchAll(PDO::FETCH_ASSOC); 

Ihre Anführungszeichen sind vollständig gebrochen, so dass die Datei nicht einmal analysiert wird. Auch wenn das behoben ist, gibt es immer noch viele Probleme.

Hier finden Sie einige documentation für eine grundlegende Abfrage. Kurz gesagt, bereiten Sie vor und führen Sie dann aus. Für einfache SELECT Abfragen ist die Bindung im Allgemeinen nicht erforderlich, und das Aufrufen von PDO::query() macht überhaupt nichts mit vorbereiteten Anweisungen. Versuchen Sie stattdessen:

$stmt = $db_con->prepare('SELECT uname FROM users WHERE uname = :uname'); 
$stmt->execute(["uname"=>$validateValue]); 

Dann PDOStatement::fetchAll() ein Array zurückgibt, aber Sie versuchen PDOStatement::fetchColumn() darauf zu nennen. Wähle das eine oder das andere aus.

Es gibt weitere Probleme, aber Sie sollten sich Code Zeile für Zeile ansehen und verstehen, was jede Zeile macht. Du kannst nicht hoffen, dass du Sachen von einem halben Dutzend Webseiten kopieren und einfügen kannst und es funktioniert.

Verwandte Themen