将复选框值插入mysql时出现问题

时间:2013-04-29 06:15:34

标签: php mysql

更新:这是我在执行查询后得到的结果:

NewiTem9,desc,video9.swf,9,0,0,1,0,550,500,item9.jpg,0,swf,prev,0,00,0,2013-04-29 03:23:43,1,0,0,0,newitem9,0

对于HTML,我有以下复选框:

<input type="checkbox" name="starter" value="1" id="starter0">

将其与其他元素一起插入mysql时(其他元素我没有任何问题,插入时没有问题然后正确显示)

mysql_query("
    INSERT INTO datatab (
        name, description, url, category_id, category_parent, width, height,
        image, activado, filetype, instructions, date_added, show_ads, rmode,
        power_id, starter, seo_url, submitter
    )
    VALUES (
        '".escape($_POST['name'])."', '".escape($_POST['description'])."',
        '$url', $_POST[category], $category[parent_id], '$_POST[width]',
        '$_POST[height]', '$img', $_POST[activado], '$ext',
        '".escape($_POST['instructions'])."', '$date', $_POST[show_ads],
        $_POST[rmode], '$_POST[power_id]', '$_POST[starter]', '$seo_url',
        '$_POST[submitter]')
    ") or die ('There was a MySql error when adding the game: '.mysql_error());

然后添加数据但没有提到的复选框值。

数据库表设置:

Name: starter
Type: TinyINT
Lenght/Values: 1
default: As defined : 0

我不知道为什么插入所有其他数据并且工作时没有插入复选框的数据?

有人可以帮我这个吗?

由于

4 个答案:

答案 0 :(得分:1)

如果未选中复选框,则绝对不会向服务器发送任何内容。甚至没有空白值或0.未选中的复选框就好像表单元素不存在一样。

答案 1 :(得分:0)

if (isset($_POST['starter']))
$starter = 1;
else
$starter = 0;

然后在您的数据库中保存$ starter:

mysql_query("INSERT INTO {table name}(..,starter) VALUES (..,'".$starter."');

答案 2 :(得分:0)

您可以使用复选框的一个漂亮技巧是在复选框之前的隐藏输入中提供未选中的值,例如

<input type="hidden" name="starter" value="0">
<input type="checkbox" name="starter" value="1" id="starter0">

这样,如果未选中该复选框,则至少会提交一个键/值对,并与表单一起提交。

对于您的查询,这只是字符串连接和不良清理方法的可怕组合。

这些天你应该使用MySQLi或PDO,例如(PDO)

// Assuming the $pdo variable contains your PDO instance and all $_POST values
// have been verified as existing

$stmt = $pdo->prepare('
    INSERT INTO datatab (
        name, description, url, category_id, category_parent, width, height,
        image, activado, filetype, instructions, date_added, show_ads, rmode,
        power_id, starter, seo_url, submitter
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
');

$stmt->bindParam(1, $_POST['name']);
$stmt->bindParam(2, $_POST['description']);
// etc
$stmt->bindParam(16, $_POST['starter']);
$stmt->bindParam(17, $seo_url);
$stmt->bindParam(18, $_POST['submitted']);

$stmt->execute();

答案 3 :(得分:0)

复选框有点特别。它们只有在被检查时才会被发布。

如果您使用HTML:

<input type="checkbox" name="starter" value="1" id="starter0">

并且用户只选中复选框,然后选中结果 帖子就像

$_POST['starter'] = 1

您必须检查是否已发送复选框,然后执行正确的插入。

如果您已对其进行检查但仍然无法正常工作,即使您没有收到明确错误,也会出现实际查询问题。插入具有“错误”数据类型的东西时,MySQL有点宽容。

<强>更新 你可以试试这个:

if (isset($_POST['starter']) && $_POST['starter'] == 1) {
    $starter = 1;
}
else {
    $starter = 0;
}

mysql_query("
    INSERT INTO datatab (
        name, description, url, category_id, category_parent, width, height,
        image, activado, filetype, instructions, date_added, show_ads, rmode,
        power_id, starter, seo_url, submitter
    )
    VALUES (
        '".escape($_POST['name'])."', '".escape($_POST['description'])."',
        '$url', $_POST[category], $category[parent_id], '$_POST[width]',
        '$_POST[height]', '$img', $_POST[activado], '$ext',
        '".escape($_POST['instructions'])."', '$date', $_POST[show_ads],
        $_POST[rmode], '$_POST[power_id]', $starter, '$seo_url',
        '$_POST[submitter]')
    ") or die ('There was a MySql error when adding the game: '.mysql_error());