2017-08-15 437 views
-2

我正在爲我的音樂網站編寫代碼。這是註冊階段的一部分。我希望代碼檢查數據庫中是否存在任何現有的電子郵件地址,如果發現,print「email(」email address「)已經存在,但如果找不到,則將該信息插入到數據庫中。解決類似於從HTML表單提交的一個被發現,但如果沒有找到的電子郵件,該系統後停止,什麼都不做。有人可以幫我找出我哪裏錯了。避免數據冗餘

if ($_POST['submit2']){ 
$fname = $_POST['Fname']; 
$sname = $_POST['Sname']; 
$email = $_POST['Emailaddress']; 
$pass = $_POST['newpassword']; 

$sql= "select * from cust_information where email = '$email';"; 
$results = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
$row = mysqli_fetch_array($results) or die(mysqli_error($conn)); 

    if (count($row) < 0) 
    { 
     $sql2 = "insert into cust_information (firstName, lastName, email, password) values(`$fname`, `$sname`, `$email`, `$pass`)"; 
     $results2 = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
     if (!$results2){ 
     echo "successfully uploaded cust"; 
     } 
    }else{ 
     echo "email <strong>".$row["email"]. " </strong> already Exist"; 
    } 
} 
+0

此代碼對SQL注入開放,但爲了修復您的錯誤,請嘗試使用''$ fname''引號,backtics用於引用表和字段名稱,而不是字符串。 – xander

+0

@Banelegumata你正在檢查'count'是否返回一個小於零的整數。這是不可能的,內部的代碼將永遠不會執行。 – Daedalus

+0

does not work ...這些字段不會添加到數據庫。儘快完成解決這個問題的工作。 –

回答

2

你是檢查返回的結果數是否小於0.數組的長度(以及找到的結果數)不能小於0. manual顯示如果未找到結果,則mysqli_fetch_array返回null,因此您要檢查爲$row === null

但是,我將藉此機會指出,將變量連接成SQL查詢字符串會讓您對一個稱爲SQL Injection的嚴重安全問題敞開開放。由於代碼當前已設置,表單的用戶將能夠在您的數據庫上運行他們喜歡的任何查詢,這絕對不是您想要的。我建議您閱讀prepared statements以緩解此問題。