2016-05-31 205 views
1

我試圖做一個目錄,其中u可以通過輸入代碼的短信自己添加預防。輸入正確的代碼短信後,它會檢查數據庫中是否存在代碼,然後從數據庫中刪除輸入的代碼並從表單中添加數據。現在我有一個問題,因爲我不知道如何防止添加數據到數據庫中,當給定的代碼是不正確的。 目前,它看起來像這樣:從數據添加到數據庫

if ($sum != $val1+$val2) { //simple captcha 
      echo '<div id="message_position_capreg"><p class="error_form"><font color="red">Incorrect. Try again</font></p></div>'; 
     } 
     else { 
      if ($_POST['code']){ 
    $code=$_POST['code']; 

    global $wpdb; 
    $sql = $wpdb->prepare("SELECT id FROM code_sms WHERE code = %s", $cd); 
    $check_code = $wpdb->get_results($sql); 

    if ($check_code>0) { 

    $wpdb->delete('code_sms', array('code' => $code)); 


    if (isset($_POST["submit_formm"]) && $_POST["company_nip"] && $_POST["company_name"] != ""){ 
       $company_nip = strip_tags($_POST["company_nip"], ""); 
       $company_name = strip_tags($_POST["company_name"], ""); 
    $result = $wpdb->insert( 
        'test', 
        array( 
         'company_nip' => $company_nip, 'company_name' => $company_name) 
       ); 

    if (!$result) { 
      echo '<div> 
    ERROR</div>'; 
      } 
      else { 

      echo '<div> 
    Succes</div>'; 
      } 
     } 
     } 
} 
    } 

編輯: 我editted我的代碼,就像@thephatp說,和它現在的工作:)

+0

見下面我更新的答案。您必須檢查行數而不是僅針對結果集進行測試。 – thephatp

回答

0

你基本上選中「如果數據庫中存在sms_code」,然後「刪除代碼;插入表單數據」。

但是,您要關閉if語句之前的以添加表單數據。移動你的},關閉if語句,如下所示。這樣,如果sms_code不正確,則在插入語句&時不處理表單數據。

此外,您$check_code變量不是行數,而是一個結果集。如果查詢導致錯誤,則此結果集僅爲FALSE。 爲get_result看到這裏的文檔: mysqli_stmt_get_result

返回一個結果爲成功的SELECT查詢,或FALSE其他 DML查詢或失敗。可以使用mysqli_errno()函數來區分這兩種類型的故障。

您需要檢查針對行數的結果集,並根據if語句中的結果集進行測試。下面的代碼已更新。

if ($sum != $val1+$val2) { //simple captcha 
      echo '<div id="message_position_capreg"><p class="error_form"><font color="red">Incorrect. Try again</font></p></div>'; 
     } 
     else { 
      if ($_POST['code']){ 
    $code=$_POST['code']; 

    global $wpdb; 
    $sql = $wpdb->prepare("SELECT id FROM code_sms WHERE code = %s", $cd); 

    $result = $wpdb->get_results($sql); 

    /* Get the number of rows */ 
    $num_of_rows = $result->num_rows; 

    if ($num_of_rows>0) { 

     $wpdb->delete('code_sms', array('code' => $code)); 

     if (isset($_POST["submit_formm"]) && $_POST["company_nip"] && $_POST["company_name"] != ""){ 
        $company_nip = strip_tags($_POST["company_nip"], ""); 
        $company_name = strip_tags($_POST["company_name"], ""); 
      $result = $wpdb->insert( 
         'test', 
         array( 
          'company_nip' => $company_nip, 'company_name' => $company_name) 
        ); 

      if (!$result) { 
       echo '<div> 
       ERROR</div>'; 
      } 
      else { 

       echo '<div> 
       Succes</div>'; 
      } 
     } 
    } 
+0

我沒有像你說的,但其仍然以某種方式添加這些數據,並給出「Succes」。 – ZYWIEC

+0

@ZYWIEC,更新了上面的代碼。第一次我沒有仔細觀察 - 您的$ check_code變量是一個結果集,它將是'TRUE'只要查詢不會導致錯誤。這是從_not_結果集返回的行數。更新上面的代碼。看看是否能工程。 – thephatp

+0

呃!現在,它的工作!謝謝! – ZYWIEC

0

您必須包括增加數據的代碼到if條件,其中短信代碼已被驗證真實數據庫裏面 - if ($check_code>0) { - 只是追加後立即代碼的短信刪除。

if ($sum != $val1+$val2) { //simple captcha 
     echo '<div id="message_position_capreg"><p class="error_form"><font color="red">Incorrect. Try again</font></p></div>'; 
    } 
    else { 
     if ($_POST['code']){ 
$code=$_POST['code']; 

global $wpdb; 
$sql = $wpdb->prepare("SELECT id FROM code_sms WHERE code = %s", $cd); 
$check_code = $wpdb->get_results($sql); 

if ($check_code>0) { 

$wpdb->delete('code_sms', array('code' => $code)); 

// Removed closing braces here 

if (isset($_POST["submit_formm"]) && $_POST["company_nip"] && $_POST["company_name"] != ""){ 
      $company_nip = strip_tags($_POST["company_nip"], ""); 
      $company_name = strip_tags($_POST["company_name"], ""); 
$result = $wpdb->insert( 
       'test', 
       array( 
        'company_nip' => $company_nip, 'company_name' => $company_name) 
      ); 

if (!$result) { 
     echo '<div> 
ERROR</div>'; 
     } 
     else { 

     echo '<div> 
Succes</div>'; 
     } 
    } 
    } 
} 

} // Added closing braces here 
+0

好吧,我這樣做,但它仍然加入:( – ZYWIEC

+0

'$ check_code'是一個結果不是行數退還。你要拉從結果第一行的數量。 – thephatp

0
if ($sum != $val1+$val2) { //simple captcha 
     echo '<div id="message_position_capreg"><p class="error_form"><font color="red">Incorrect. Try again</font></p></div>'; 
    } 
    else { 
     if ($_POST['code']){ 
$code=$_POST['code']; 

global $wpdb; 
$sql = $wpdb->prepare("SELECT id FROM code_sms WHERE code = %s", $cd); 
$check_code = $wpdb->get_results($sql); 

if ($check_code>0) { 

$wpdb->delete('code_sms', array('code' => $code)); 


    if (isset($_POST["submit_formm"]) && $_POST["company_nip"] && $_POST["company_name"] != ""){ 
      $company_nip = strip_tags($_POST["company_nip"], ""); 
      $company_name = strip_tags($_POST["company_name"], ""); 
    $result = $wpdb->insert( 
       'test', 
       array( 
        'company_nip' => $company_nip, 'company_name' => $company_name) 
      ); 

    if (!$result) { 
     echo '<div> 
    ERROR</div>'; 
     } 
     else { 

     echo '<div> 
    Succes</div>'; 
      } 
     } 
    } 
    } 
    else 
    { 
     echo '<div> 
    ERROR WRONG CODE</div>'; 
    } 
}