2012-03-18 6 views
0

私はユーザーがクラブに登録するためのスクリプトを書こうとしています。それが重複をチェックするはずの部分に達するまでうまく動作します。私は何がうまくいかないのか分かりません。助けてください!!! は、スクリプトの中で意味がありません。かなりの数のものが1に対して複数のクエリがあります私のPHPスクリプトはmysqlから最初の行だけを読み込み、残りの行は一致するかどうかを確認しません

<?php 
    mysql_connect ("sqlhost", "username", "password") or die(mysql_error()); 

    mysql_select_db ("databasename") or die(mysql_error()); 

    $errormsgdb = ""; 
    $errordb = "Sorry but that "; 
    $error1db = "Name"; 
    $error2db = "email"; 
    $error3db = "mobile number"; 
    $errordbe = " is already registered"; 
    $pass1db = "No Matching Name"; 
    $pass2db = "No Matching Email"; 
    $pass3db = "No Matching Mobile"; 
    $errorcount = 0; 
    $qResult = mysql_query ("SELECT * FROM table"); 
    $nRows = mysql_num_rows($qResult); 
    for ($i=1; $i< $nRows+1; $i++){ 

$result = mysql_query("SELECT id,fname,lname,dob,email,mobile,agree,code,joindate FROM table WHERE fname = '$ffname"); 
if ($result > 0) { 
$errorcount = $errorcount++; 
$passdb = 0; 
$errormsgdb = $error1db; 
echo "<div class=\"box red\">$errordb $errormsgdb 
} else { 
$pass = 1; 
$errormsgdb = $pass1db; 
echo "<div class=\"box green\">$errormsgdb</div><br />"; 
} 



    //--------------- Check if DB checks returned errors ------------------------------------> 
     if($errorcount <= 0){ 
     $dobp = $_REQUEST['day'].'/'.$_REQUEST['month'].'/'.$_REQUEST['year']; 
     $dob = $_REQUEST['year'].$_REQUEST['month'].$_REQUEST['day']; 
     //header('Location: thankyou.php?ffname='.$ffname.'&flname='.$flname.'&dob='.$dob.'&femail='.$femail.'&fmobile='.$fmobile.'&agree='.$agree.'&code='.$code.'&dobp='.$dobp); 
     echo "<div class='box green'>Form completed! Error Count = $errorcount</div>"; 
     } else { 
     echo "<div class='box red'>There was an Error! Error Count = $errorcount</div>"; 
      } 
    } 
    ?> 
+0

:)ありがとうございましたそして、あなたは手段を「は動作しません」何を指定することができますか? – GolezTrol

+0

最初の行だけを読み込み、エラーボックスをエコーし​​ます。そのため、最初の行と同じではない名前や電子メールなどを入力しようとすると、パスします(データベースに重複するレコードが追加されます) – RobertH

答えて

1

、事前にありがとうございます!データを照会するだけではなく、一致するかどうかを確認するのはなぜですか?各ユーザーをループしてチェックするのではなく、 ...しかし、私は、あなたは動作しません

$errorcount = $errorcount++; 

これを行うあなたの主な問題は

$errorcount = " "; 

だと思う...あなたはそれが動作しませんインクリメント文字列として$errorcountを作成しました。あなたは数としてそれを初期化する必要があります

$errorcount = 0; 

が、その後インクリメントする:あなたは奇妙な方法でデータベースを使用している

$errorcount++; 

Example of it not working and then working here

+0

もともとは$ errorcount = 0でしたが、私は2日間スクリプトをテストしていましたが、残念ですが、どちらの方法でも動作しませんでした。あなたの話し方でどのようにデータをクエリできますか?ありがとうございます – RobertH

+0

@RobertHは、探している値が存在するかどうかを調べるためにクエリを実行します。つまり、 'SELECT * FROM table where fname = $ fname'のようなもので、返される結果の数が0より大きい場合は一致します。大文字小文字を連結して変更するのに役立つ[mysqlにたくさんの文字列関数](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html)があります。 – ManseUK

+0

照会を使ってチェックすることができますSELECT * FROM table WHERE fname = $ fname && lname = $ lnameのように複数の変数を同時に使用できますか? – RobertH

1

最初は、テーブル内のすべてのデータを照会しています。

そしてループの中で、テーブル内のすべての行を再度照会していますが、この行は行です。これはすべて非常に非効率的です。

何をやるべきことはすべての重複

+0

どうすればいいですか、ありがとう – RobertH

+0

は、名前 'robert'が既にデータベースに入っているかどうかを確認したいとします。 SELECT * FROM table WHERE fname = 'robert'のようにデータベースをクエリします。結果が得られれば、重複していることになります。 – Toad

+0

ありがとうございました – RobertH

2

を求めるために、直接データベースに照会され、あなたの答えinvaluble特にManseUKすべてのあなたの助けのManseUKとヒキガエルをありがとうございました。私が解決した解決策は、だれかがより良い、あるいはより効率的な解決策を持っていれば腹を立てることです。

<?php 
mysql_connect ("mysqlhost", "username", "password") or die(mysql_error()); 

mysql_select_db ("database") or die(mysql_error()); 

$errormsgdb = ""; 
$errordb = "Sorry but that "; 
$error1db = "Name"; 
$error2db = "email"; 
$error3db = "mobile number"; 
$errordbe = " is already registered"; 
$pass1db = "No Matching Name"; 
$pass2db = "No Matching Email"; 
$pass3db = "No Matching Mobile"; 

// Formulate Name Query 
$queryname = sprintf("SELECT * FROM table 
WHERE fname='%s' AND mname='%s' AND lname='%s'", 
mysql_real_escape_string($ffname), 
mysql_real_escape_string($fmname), 
mysql_real_escape_string($flname)); 

// Perform Name Query 
$resultname = mysql_query($queryname); 

// Check result 
if (!$resultname) { 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $queryname; 
    die($message); 
} 

// Use result 
while ($row = mysql_fetch_assoc($resultname)) { 
    $dbfullname = strtoupper($row['fname'].$row['mname'].$row['lname']); 
    $fullname = strtoupper($ffname.$fmname.$flname); 
    if ($dbfullname == $fullname){ 
     $passdb = 0; 
     $errormsgdb = $error1db; 
     echo "<div class=\"box red\">$errordb $errormsgdb $errordbe</div><br />"; 
    } else { 
     $pass = 1; 
     $errormsgdb = $pass1db; 
     echo "<div class=\"box green\">$errormsgdb</div><br />"; 
    } 
} 

// Formulate Email Query 
$queryemail = sprintf("SELECT * FROM table 
WHERE email='%s'", 
mysql_real_escape_string($femail)); 

// Perform Email Query 
$resultemail = mysql_query($queryemail); 

// Check result 
if (!$resultemail) { 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $queryemail; 
    die($message); 
} 

// Use result 
while ($row = mysql_fetch_assoc($resultemail)) { 
    $cemail = strtoupper($femail); 
    $dbemail = strtoupper($row['email']); 
    if ($cemail != $dbemail) { 
     $passdb = 1; 
     $errormsgdb = $pass2db ; 
     echo "<div class=\"box green\">$errormsgdb</div><br />"; 
    } else { 
     $passdb = 0; 
     $errormsgdb = $error2db; 
     echo "<div class=\"box red\">$errordb $errormsgdb $errordbe</div>"; 
    } 
} 

// Formulate Mobile Query 
$querymobile = sprintf("SELECT * FROM table 
WHERE mobile='%s'", 
mysql_real_escape_string($fmobile)); 

// Perform Mobile Query 
$resultmobile = mysql_query($querymobile); 

// Check result 
if (!$resultmobile) { 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $queryemail; 
    die($message); 
} 

// Use result 
while ($row = mysql_fetch_assoc($resultmobile)) { 
$cmobile = ereg_replace("[^0-9]", "", $fmobile); 
    if ($cmobile != $row['mobile']) { 
     $passdb = 1; 
     $errormsgdb = $pass3; 
     echo "<div class=\"box green\">$errormsgdb</div><br />"; 
    } else { 
     $passdb = 0; 
     $errormsgdb = $error3db; 
     echo "<div class=\"box red\">$errordb $errormsgdb $errordbe</div>"; 
    } 
} 
?> 

+1

1つのクエリで3つのクエリをすべて実行できます。 WHERE句でOR演算子を使用して3つのクエリを結合します。したがって:WHERE(fname = '%s' AND mname = '%s' AND lname = '%s')または電子メール= '%s' ORモバイル= '%s'。その後、回答を繰り返して、どの句が適用されるかを確認します。 – Toad

関連する問題