2012-03-18 48 views
0

我正在嘗試爲用戶註冊一個俱樂部編寫腳本,它正確地完成了所有的驗證工作,直到它到達應該檢查重複部分的部分時效果很好。我不確定發生了什麼問題。請幫助!!! 謝謝你在前進,我的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 2012-03-18 21:42:49

+0

它只讀取第一行,然後回顯出錯框,所以如果你嘗試放入與第一行不相同的名稱和電子郵件等,它會讓它通過(這會在數據庫中添加重複記錄) – RobertH 2012-03-18 21:55:30

回答

1

有相當多的東西,沒有意義在你的腳本,一個多查詢!爲什麼不只是查詢數據,看看你是否得到一個匹配 - 而不是循環每個用戶並檢查它? ...但我認爲你的主要問題是

$errorcount = " "; 

然後你做

$errorcount = $errorcount++; 

這是不行的......你創造$errorcount作爲一個字符串,以便增加它不會工作。你應該初始化它作爲一個數量:

$errorcount = 0; 

然後遞增:

$errorcount++; 

Example of it not working and then working here

+0

原來它是$ errorcount = 0,但我已經測試了幾天的腳本,對此感到抱歉,沒有任何方法。我如何以你談論的方式查詢數據?謝謝 – RobertH 2012-03-18 21:58:21

+0

@RobertH運行一個查詢來檢查你正在查找的值是否存在 - 所以像'SELECT * FROM table where fname = $ fname'這樣的東西,那麼如果返回的結果數大於0,你就有一個匹配。在[mysql中有很多字符串函數](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html)來幫助你連接並改變大小寫 – ManseUK 2012-03-18 22:07:10

+0

可以使用查詢來檢查多個變量同時像SELECT * FROM table WHERE fname = $ fname && lname = $ lname? – RobertH 2012-03-18 22:50:04

1

你是在一個陌生的方式使用該數據庫。

首先你要查詢表中的所有數據。

然後在一個循環中,您再次查詢表中的所有行,但是此行爲行。這一切都非常低效。

你應該做的是直接查詢數據庫,要求任何重複

+0

請問我該怎麼做,謝謝 – RobertH 2012-03-18 21:58:59

+0

說你想檢查名字'robert'是否已經在數據庫中。你會像這樣查詢數據庫:SELECT * FROM table WHERE fname ='robert'。如果你得到結果,那麼你有一個副本。 – Toad 2012-03-18 22:07:50

+0

謝謝你的工作 – RobertH 2012-03-18 23:37:38

2

謝謝你的所有幫助ManseUK和蟾蜍你的答案在那裏invaluble特別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')或email ='%s'或mobile ='%s'。然後循環查看哪些條款適用。 – Toad 2012-03-19 19:20:27

相關問題