php
  • mysql
  • string
  • 2009-07-01 82 views 0 likes 
    0

    我想更新一個記錄與來自多個選擇框的信息,我使用INSERT INTO添加新行時工作正常,但現在我試圖將它添加到正在使用的代碼中mysql_real_escape_string()它返回了這篇文章底部的錯誤信息。我認爲它有錯誤的價值,我試圖通過它,但我不知道如何格式化,使PHP快樂!MySQL PHP mysql_real_escape_string() - 這個值不是一個字符串嗎?

    $query = "UPDATE studies 
          SET strategies = '" . mysql_real_escape_string($strategies) . "' WHERE id = '" . mysql_real_escape_string($id) . "'"; 
    
    
    
    while($row = mysql_fetch_array($result)) { 
        $strategylist = $row['name']; 
        $strategyname = htmlspecialchars($row['name']); 
    $pagelink = str_replace(" ","_",$strategylist); 
    
        echo '<option value="<a href=&quot;strategies.php?strategy=' . $pagelink . '&quot;>'.$strategyname.'</a>" >' . $strategyname . '</option>' . '\n'; 
    } 
    

    警告:mysql_real_escape_string()預計參數1是字符串,陣列上線100給出的(也就是上面說的行啓動SET策略='」 .....)

    +2

    您可以發佈分配給$ strategies和$ id的代碼嗎? – 2009-07-01 12:35:36

    回答

    0

    我認爲

    $ id爲不串

    mysql_real_escape_string($id) 
    
    0

    據抱怨$策略/ $ ID是一個數組,應該是一個字符串。

    3

    看起來像$的策略是一個數組而不是一個字符串。既然你有一個多選框,如果他們選擇多個項目,$策略將作爲一個數組返回。

    這涉及到如何在單個數據庫列中存儲多個選擇。如果你只是想的選擇追加連成一個大的字符串,然後使用破滅():

    // Sets strategies to a comma-separated list of selected strategies. 
    $query = "UPDATE studies 
          SET strategies = '" . 
          mysql_real_escape_string(is_array($strategies) ? implode(',', $strategies) : $strategies) . "' 
          WHERE id = '" . mysql_real_escape_string($id) . "'"; 
    

    ETA:

    順便說一句,你在這裏做看起來很嚇人。你有一個選擇框選項的值的HTML鏈接,然後你將其存儲在數據庫中(大概以後再顯示?)。

    這真是讓自己開始了一個微不足道的XSS攻擊,有人用自己的選項提交了一個僞造的表單,其中包含指向攻擊網站的鏈接,您可以將其快速存儲在數據庫中,並稍後顯示在您的網站上。

    在您的數據庫中存儲ID(或您的案例中的ID列表)或其他內容,然後在需要顯示它們時再構建鏈接。

    相關問題