2012-01-13 8 views
-1

このスクリプトは、メールとパスワードの長さをチェックする一連の "if"ステートメントに当たるとハングアップするようです。これらのステートメントを削除すると、データがdbに正しく挿入されます。私のPHP登録スクリプトに問題がある

<?php 

ob_start(); 
session_start(); 

if (!empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['confirmpassword'])) { 

$email = strip_tags($_POST['email']); 
$password = md5(strip_tags($_POST['password'])); 
$confirmpassword = md5(strip_tags($_POST['confirmpassword'])); 

$errors = array(); 

if (strlen($email) < 6) { 
    $errors[] = "Email too short."; 
} 
if (strlen($email) > 25) { 
    $errors[] = "Email too long."; 
} 
if (strlen($password) < 2) { 
    $errors[] = "Password too short."; 
} 
if (strlen($password) > 25) { 
    $errors[] = "Password too short."; 
} 
if ($password !== $confirmpassword) { 
    $errors[] = "Passwords do not match."; 
} 

if (count($errors) == 0) { 
    // Include database config file then connect to database 
    require('db_config.php'); 
    $connection = mysql_connect(DB_HOST,DB_USERNAME,DB_PASSWORD) or die("Database Connection Error"); 
    $database = mysql_select_db(DB_NAME) or die("No Database"); 

    // Create query 
    $query = "INSERT INTO bah_register VALUES ('','$email','$password')"; 

    // Query database and 
    mysql_query($query); 

    // Success message 
    echo "Thanks for signing up!"; 

} else { 
    foreach ($errors as $error) { 
     echo $error . "<br />"; 
    } 
} 
} 

?> 
+0

エラーは何ですか?エラーなしであなたを助けることはできません。 –

+0

正しく動作しません。 – jprofitt

+0

特定のエラーが発生していますか?何が正しく機能していないのですか? – dm03514

答えて

5

あなたの問題は、長さをチェックする前にパスワードをmd5 INGのしていることです。これにより、パスワードが32文字になります。これは制限よりも大きく、エラーが発生します。

+0

:) +1。ええ、ほぼ同じ時間 – a1ex07

+0

@ a1ex07ええ、私たちはわずか4秒離れていたと思います。笑〜 – James

+0

@ジェームス - ありがとう!私の初心者のミス: –

3

私はあなたのコードに問題があるかわからないが、あなたの電子メールのためにあなたは、このようなものを使用して検討するかもしれない:

if(!preg_match('/^[^@][email protected][a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email)){ 
    $errors[] = "Email is not valid."; 
} 

多くの電子メールは、より長いです25文字。

5

あなたはstrlen($password) > 25をチェックすると、パスワードは長い25個のシンボルよりもmd5 hashsumです。おそらく

+0

あなたはほとんど殴られません。 ; P – James

+0

@ a1ex07ありがとう! –

2

エラー配列とforeachのがイースリーコード以下
適切な電子メールの検証がfilter_var機能で行うことができます echo implode('<br />', $errors);

strip_tagsの機能に置き換えることができ、パスワードの元の値をチェックしたいですおそらくパスワードの一部が削除されます。 «<私の>スーパーパスワード»

関連する問題