2016-03-22 6 views
0

Ich bin ein Anfänger bei PHP und ich versuche, ein Registrierungsformular für ein Projekt zu bauen, habe ich alle Validierungen möglich gemacht, aber ich bin von hier fest, wie es gehen soll, ich will die Formular, um alle folgenden zu validieren dann zu senden, wenn alles wahr ist.Registrierungsformular bei der Datenbank PHP

PHP-Code:

<?php 

//register form v1.0 

error_reporting(0); 

//declares register form 


$formFields = array('reg-username' => 'اسم المستخدم', 
    'reg-email' => 'البريد الإلكتروني', 
    'reg-password' => 'كلمة المرور', 
    'reg-confirmPassword' => 'تأكيد كلمة المرور'); 




function checkBlank(){ 

global $formFields; 


//now I want the browser to check each field if its empty 

foreach($formFields as $fieldName => $fieldRealName){ 
    if(empty($_POST[$fieldName])){ 
     echo '<ul class="ErrorMessage"><li>لم تدخل '. $fieldRealName .' * </li></ul>'; 
     echo '<style>.'. $fieldName .'{ 
      border-color: red; 
     } 
     .'. $fieldName .'::-webkit-input-placeholder { 
    color: red; 
} 
     .'. $fieldName .'-h{ 
      color: red; 
     } 
     #asetrik{ 
      display: none; 
     } 
     </style>'; 
} 
} 

} 



//blank fields have been checked 
function checkPass(){ 

     $regPassword = $_POST['reg-password']; 
     $regConfPassword = $_POST['reg-confirmPassword']; 



    if($regPassword !== $regConfPassword){ 
     echo '<ul class="ErrorMessage"><li>كلمات المرور غير متطابقة *</li></ul>'; 
    } //if the fields are not empty i want it to check if the passwords match 
    } 


    function checkEmail(){ 



     $regEmail = $_POST['reg-email']; 

     if (!filter_var($regEmail, FILTER_VALIDATE_EMAIL)) { 

       echo '<ul class="ErrorMessage"><li>البريد الإلكتروني المدخل غير صحيح *</li></ul>'; 
    } 

    function checkName(){ 
     $regUsername = $_POST['reg-username']; 
if (!preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $regUsername)){ 
    echo '<ul class="ErrorMessage"><li>اسم المستخدم يجب أن يبدأ بحرف *</li></ul>'; 
} 
    } 



function checkExist(){ 

     $regUsername = $_POST['reg-username']; 
     $regEmail = $_POST['reg-email']; 
     $connectToDB = mysql_connect('localhost', 'root', '') or die(mysql_error()); 
     $selectDB = mysql_select_db('supermazad') or die(mysql_error()); 
     $checkIfExist = mysql_query("SELECT * FROM users WHERE username LIKE '".$regUsername."' OR email LIKE '".$regEmail."' "); 


     if(mysql_num_rows($checkIfExist) > 0){ 
     echo '<ul class="ErrorMessage"><li>اسم المستخدم/ البريد الإلكتروني موجود *</li></ul>'; 

} 
} 















?> 
+0

Ich bin mir nicht sicher, was Sie erwarten. Dies ist kein Problem, es fehlt Code. Sie haben Funktionen, daher benötigen Sie eine Schleife mit einem if -hen-else-Block, der mithilfe Ihrer Validierungsfunktionen überprüft, ob das Formular gesendet und validiert wurde. Für die else-Anweisung sollten Sie Ihr Formular zurückgeben, möglicherweise mit Fehlermeldungen versehen. Ihre Validierungsfunktionen sollten die Fehler nicht direkt widerspiegeln, sondern sollten sie stattdessen zu einer Array-Variablen hinzufügen, die in Ihrem Formular verwendet wird, sofern sie existiert. Die Funktionen müssen wahr, wenn validiert und falsch, wenn nicht. – gview

+0

Ihr Code ist anfällig für SQL-Injection. Bitte lesen Sie [Wie kann ich SQL-Injection in PHP verhindern?] (Http://StackOverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) für Informationen, wie man es beheben kann . –

+0

Die 'mysql_ *' - Funktionen in PHP sind veraltet und sollten nicht verwendet werden. Bitte lesen Sie [Warum sollte ich nicht mysql_ * Funktionen in PHP verwenden?] (Http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) für Informationen über warum und was sie ersetzen sollen. –

Antwort

0

meinen Kommentar anzeigen. Es gibt verschiedene Möglichkeiten, mit Submits umzugehen, und oft haben Seiten mehrere Formulare. Nehmen wir an, Ihr Formular hat einen Absenden-Button.

<input type="submit" name="submit-form" value="Done"> 

Pseudo-Code für das wäre so etwas wie dieses:

$formErrors = array(); 
// You would need to add this as a global to all your functions, and as mentioned in my comment, add your errors to this array rather than echoing them out from the functions 

if (($_SERVER['REQUEST_METHOD'] == 'POST') && isset($_POST['submit-form'])) && checkblank() && checkPass() && ...etc) { 
    //form was submitted and is ok 
} else { 
    //You echo out your form. 
} 
0

Ich wusste, dass Sie auf php neu sind, aber man muss im Auge behalten, dass alle Code-Backend gesichert werden. Deshalb müssen Sie viele Überprüfungen durchführen. Wenn Sie mit der Datenbank arbeiten, müssen Sie Ihren Code vor einer Injektion schützen. Jetzt werden Sie einige Leute finden, die Ihnen sagen, es in Javascript zu tun, HÖREN SIE NICHT ZU IHNEN!

Jeder kann Post-Abfragen machen, ohne Ihre js-Code zu verwenden, und so alle Ihre js-Überprüfung wird umgangen werden. Natürlich können Sie vor dem Senden an den Server eine Schicht des Browsers einchecken, aber Sie müssen auch den Server einchecken.

Also, wenn Sie für das Element überprüfen an den Server gesendet, müssen Sie prüfen, ob es (!=null) bestehen, die leicht mit der Funktion gemacht werden können isset:

if (isset($_POST['reg-username'],$_POST['reg-email'],$_POST['reg-password'], $_POST['reg-confirmPassword']){ 
     // Further checks 
    }else{ 
     // call a function that will return an error message 
     error($PARAMETERS_NOT_SET) 
    } 

Die zweite Sache, die Sie im Auge zu tragen haben Überprüfen Sie bei Verwendung von Parametern aus dem Client in Datenbankabfragen, ob eine Injektion vorliegt. Dies kann ein wenig schmerzhaft sein, das ist, warum Sie die prepared queries verwenden müssen:

$statement ="SELECT * FROM users WHERE username LIKE :username OR email LIKE :email "; 
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$sth->execute(array("username"=>$regUsername,"email"=>$regEmail)); 
$resultList= $sth->fetchAll(); 

PS: Das ist sehr cool arabicum in Stackoverflow zu sehen.

Verwandte Themen