2013-04-15 61 views
1

我的PHP驗證數據有問題。 這是我到目前爲止的代碼PHP驗證數據錯誤

$cek_saldo=mysql_query 
("SELECT * FROM t_balance"); 

     while ($data_cek = mysql_fetch_array($cek_saldo)); 
     { 
      $b_id = $data_cek['badge_id']; 
      $mon = $data_cek['month']; 
      $bal = $data_cek['balance_type']; 
     } 

     if ($b_id == '$badge_id' AND $mon == '$date_month' AND $b_type == '$jns_saldo') 
     { 
      echo "<div class='emp_err warn'>Balance for this month has been added before.</div>"; 
     } 

     else 
     { 
      if($_POST) 
      { 
       $query = "INSERT INTO t_balance(badge_id, balance_amount, month, balance_type, date_transaction) 
         VALUES ('$badge_id', '$saldo', '$bulan', '$jns_saldo', '$date_transaction') 
       "; 
       $hasil = mysql_query($query); 

       if($hasil) 
       { 

        echo "<div class='emp_err success'>Balance transaction successfully added.</div>"; 
       } 
       else 
       { 

        echo "<div class='emp'>Gagal menambahkan saldo.</div>"; 
       } 
      } 
     } 

的規則是:
Tabungan Wajib可以提交每月1次。所以如果兩次,它會給出錯誤:「本月的餘額已經添加過。」

Tabungan Tambahan可以每月提交超過1次。所以如果提交超過一次,它將被保存。

任何人都有建議嗎?

+0

是否有錯誤輸出?你正在經歷的行爲是什麼?你在期待什麼?請澄清一些問題。 –

+0

邁克爾,我必須做的是防止提交數據兩次,如果有與badge_id,月份和餘額類型相同的數據。它僅用於Tabungan wajib規則。對於Tabungan tambahan,可以多次提交 –

+0

[**請勿在新代碼**中使用'mysql_ *'函數](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果選擇PDO,[這裏是一個很好的教程(http://www.brightmeup.info/article.php?a_id=2)。 –

回答

0
if ($b_id == "$badge_id" AND $mon == "$date_month" AND $b_type == "$jns_saldo") 
     { 
      echo "<div class='emp_err warn'>Balance for this month has been added before.</div>"; 
     } 

代碼中使用的變量努力學習單,雙引號中的字符串之間的區別在PHP

+0

我想要做的是防止用平衡類型保存相同的數據:tabungan wajib。如果tabungan tambahan它將被允許多次保存 –

0

這審定會沒有工作 之所以被您選擇多行失敗,原因是在比較了單引號從數據庫和唯一的分配最後的E要$b_id .. $mon

和你正在使用single quotes比較

解決方案基於一些ID

  1. 選擇數據,如果你能

    $cek_saldo=mysql_query("SELECT * FROM t_balance where id = 'someid'"); 
    
    while ($data_cek = mysql_fetch_array($cek_saldo)); 
    { 
        $b_id = $data_cek['badge_id']; 
        $mon = $data_cek['month']; 
        $bal = $data_cek['balance_type']; 
    } 
    
  2. 設置錯誤標誌

    $error = false; 
    
    while ($data_cek = mysql_fetch_array($cek_saldo)); 
    { 
        $b_id = $data_cek['badge_id']; 
        $mon = $data_cek['month']; 
        $bal = $data_cek['balance_type']; 
        if($b_id == $badge_id AND $mon == $date_month AND $b_type == $jns_saldo) 
        { 
         $error = true; 
         break 
        } 
    } 
    if($error) 
    { 
        echo "<div class='emp_err warn'>Balance for this month has been added before.</div>"; 
    
    } 
    

希望它可以幫助

0

你不需要quote.I假設$badge_id$date_month$jns_saldo來自您的形式$ _ POST

if ($b_id == $badge_id AND $mon == $date_month AND $b_type == $jns_saldo) 
0

使用此。

$cek_saldo= mysql_query("SELECT * FROM t_balance"); 

    while ($data_cek = mysql_fetch_array($cek_saldo)); 
    { 
     $b_id = $data_cek['badge_id']; 
     $mon = $data_cek['month']; 
     $bal = $data_cek['balance_type']; 

     if ($b_id == "$badge_id" && $mon == "$date_month" && $b_type == "$jns_saldo") 
     { 
      echo "<div class='emp_err warn'>Balance for this month has been added before.</div>"; 
     } 
     else 
     { 
      if($_POST) 
      { 
       $query = "INSERT INTO t_balance(badge_id, balance_amount, month, balance_type, date_transaction) 
         VALUES ('".$badge_id."', '".$saldo."', '".$bulan."', '".$jns_saldo."', '".$date_transaction."')"; 
       $hasil = mysql_query($query); 

       if($hasil) 
       { 

        echo "<div class='emp_err success'>Balance transaction successfully added.</div>"; 
       } 
       else 
       { 

        echo "<div class='emp'>Gagal menambahkan saldo.</div>"; 
       } 
      } 
     } 
    }