2016-05-31 170 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>'; 
    } 
}