2015-08-21 61 views
0

以下是情況。我有一個像form面對逃避反斜槓繼續堆積的情況

<form id="myform"> 
    <input type="text" name="some_column_name"> 
    <input type="text" name="some_other_column_name"> 
</form> 

是,在本質上,在數據庫中更新行。該數據庫是「裝載」到頁面上作爲JSON

<script type="text/javascript"> 
    rows = <?php echo json_encode($allRows); ?>; 
</script> 

和當用戶點擊的形式被填充有從數據庫(MySQL的)相應的信息,其中用戶可以對其進行更新的頁面上的項目並且更新將被提交給數據庫。

問題與撇號和可能的其他字符。被輸入到數據庫就像

下面的文本是一些文本

成爲

這裏\的一些文字

當它被裝回input s在頁面上。

我來添加和更新到數據庫程序

/* Note: Have to break up prepare statement because https://core.trac.wordpress.org/ticket/12819 */ 
$addQuery = $wpdb->prepare("INSERT INTO projs (compname,projname,imageurl,sumsmall,sumfull,results,caseid=" . $caseid . ",hide) VALUES (%s,%s,%s,%s,%s,%s,%d,%d)", 
          array($compname, $projname,$imageurl,$sumsmall,$sumfull,$results,$hide));   
$message .= $wpdb->query($addQuery) 
      ? 'Successfully added project to the database.' 
      : 'Error occurred when trying to add project to database: ' . $wpdb->last_error; 

/* Note: Have to break up prepare statement because https://core.trac.wordpress.org/ticket/12819 */ 
$updateQuery = $wpdb->prepare("UPDATE projs SET compname=%s,projname=%s,imageurl=%s,sumsmall=%s,sumfull=%s,results=%s,caseid=" . $caseid . ",hide=%d WHERE id=%d", 
           array($compname, $projname, $imageurl, $sumsmall, $sumfull, $results, $hide, $id)); 
$message .= $wpdb->query($updateQuery) !== false 
      ? 'Successfully updated project.' 
      : 'Error occurred when trying to update project in database: ' . $wpdb->last_error; 
break; 

,我有一種感覺,WordPress的的$wpdb->prepare被搞砸了的東西或者說我誤用或東西。

+0

您的PHP可能打開了'magic_quotes_gpc'選項,它會爲輸入添加斜線。把它關掉。 – Barmar

回答

0

這裏有兩個可能的問題。您可以使用magic_quotes ON來將\添加到任何可能導致SQL注入的字符,例如'和「,或者您的準備語句正在添加它。 在這種情況下,並且沒有太多可用的額外信息,我很想相信您PREPARE語句被「消毒」的輸入,這就是爲什麼你看到這樣的價值觀。

  1. 檢查魔術引號沒有開啓。
  2. 不要使用準備語句。
  3. 驗證輸出,所以當它會發現一個像'\'從數據庫到前端的數值,它會自動將其剝離。「

我希望這有助於。