2016-03-22 57 views
0

私はPHPの初心者です。プロジェクトの登録フォームを作成しようとしていますが、すべての検証を可能にしましたが、ここからどこに行かなければならないのでしょうか?フォームをすべて検証し、すべてが真であれば送信します。データベースに登録する登録フォームPHP

PHPコード:

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

私はあなたが何を期待しているのか分かりません。これは問題ではなく、コードがありません。関数があるので、検証関数を使ってフォームが送信され、検証されたかどうかを調べるif -then-elseブロックを持つループが必要です。 else文の場合は、エラーメッセージとともに注釈をつけたフォームを返すべきです。検証関数は、エラーを直接エコーするのではなく、フォームに存在する配列変数にそれらを追加する必要があります。検証する場合は関数をtrueに、そうでない場合はfalseを返す必要があります。 – gview

+0

あなたのコードはSQLインジェクションに対して脆弱です。 PHPを修正する方法については、[PHPでのSQLインジェクションを防ぐには?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)をお読みください。 。 –

+0

PHPの 'mysql_ *'関数は廃止予定ですので、使用しないでください。なぜPHPのmysql_ *関数を使うべきではないのですか?](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)を読んでください。それらを何に置き換えるか。 –

答えて

0

は、私のコメントを参照してください。送信を処理するにはさまざまな方法があり、多くの場合、ページには複数のフォームがあります。フォームに送信ボタンがあるとします。

$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

はなぜjqueryのバリデータのプラグインを使用していない。このため

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

擬似コードは次のようなものになるだろうか?それは非常に良い選択です。

はこれを確認してください:http://jqueryvalidation.org/

0

を私はあなたがPHPに新しいですが、あなたはすべてのバックエンドのコードが確保されなければならないことを心に留めておく必要があることを知っていました。そういうわけで、たくさんの小切手をする必要があります。さらに、データベースを扱うときは、コードをインジェクションから保護する必要があります。今では、あなたにjavascriptでそれをやろうと言っている人がいるかもしれません。それらに耳を傾けないでください!

誰でもjsコードを使用せずに投稿照会を行うことができます。したがって、すべてのjs照合はバイパスされます。もちろん、サーバーに送信する前にブラウザーでレイヤーを確認することもできますが、サーバーでもチェックを行う必要があります。

サーバーにsendedではときに、要素をチェックするので、あなたはそれが簡単に機能issetで行うことができ(!=null)存在するかどうかを確認する必要があります。

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) 
    } 

あなたは心の中で負担する必要があり第二のものをデータベースクエリでクライアントからのパラメータを使用する場合は、注入があるかどうかを確認します。これは少しpainfullすることができ、あなたがprepared queriesを使用する必要が理由です:

$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:それはstackoverflowの中でアラビア見ることは非常にクールです。