【问题标题】:php mysql UPDATE tinyint set chosen 1 and rest 0php mysql UPDATE tinyint 设置选择 1 和休息 0
【发布时间】:2013-07-24 12:58:22
【问题描述】:

我的 php mysql-code 很奇怪。

这有时会起作用,有时当我执行这行代码时它会将所有值设置为 0。

$tid = htmlentities(mysql_real_escape_string($_POST['themes']));
$sql = ("UPDATE ai_themes 
         SET chosen = IF(tid!='$tid', '0','1')");

mysql_query($sql);

有时一夜之间所有的值都是 0。 还没有看过枚举类型,只是好奇为什么会这样......

主题表:

tid = int, PK, NOT NULL, AUTO_INCREMENT
name = varchar(30)
chosen = tinyint(1)

[编辑]

嗯,我似乎没有从选择表单中获得有效值:

<form action="my_form_handler.php?c=3" method="post" data-transition="slideup">
    <div data-role="fieldcontain">
        <label for="themes" class="select">Select theme:</label>
        <select name="themes" id="select-theme">
        <option value="1">Red</option>
        <option value="2">Green</option>
        <option value="3">Orange</option>
            <option value="4">Blue</option>
        </select>
    </div>
    <div data-role="fieldcontain" class="ui-hide-label">
        <button type="submit" data-theme="a" name="submit" value="submit-value">Change theme</button>
    </div>
</form>

看不到任何错误...

【问题讨论】:

  • htmlentities - 那里需要吗? & $_POST['themes'] 中的值是多少;
  • 不,但是,一个人永远不能太贪吃......

标签: php mysql enums sql-update


【解决方案1】:

你错过了这里的 WHERE 部分...没有它匹配你表中的所有行

【讨论】:

  • 这就是他想要做的?他想将所选主题更新为 1,因此所有其他主题都必须设置为 0..
  • 在不知道其余代码的情况下,有很大的错误空间......主题值与当前的任何tid 不匹配将导致表中所有行上的chosen=0。 ..这正是他所描述的。
  • 目前 'tid' 被硬编码在 html 端的 select 语句中。
  • 这意味着什么......来自用户端的任何东西都是安全的......没有什么是你可以依赖的。你检查$_POST['themes']是否包含“有效”值?
  • 似乎我现在没有得到任何价值,但我知道它之前已经工作过......将在我的问题中发布代码......
猜你喜欢
  • 1970-01-01
  • 2015-07-11
  • 2012-10-18
  • 2012-12-01
  • 1970-01-01
  • 2013-08-09
  • 2016-06-24
  • 1970-01-01
  • 2019-05-30
相关资源
最近更新 更多