php
  • mysql
  • string
  • 2009-07-01 59 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列表)或其他内容,然后在需要显示它们时再构建链接。

    相关问题