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

Update: This is the result I get after query execution:

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

For the HTML I have the following checkbox:

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

When inserting this into mysql with other elements (with other elements i don't have any problem, they are inserted without a problem and then displaying properly)

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());

Then the data is added but without the mentioned checkbox value.

Database table settings:

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

I don't know why the data of the checkbox is not inserted when all other data are inserted and working?

Could someone help me with this?

Thanks

Checkboxes are somewhat special. They only get posted IF they are checked.

If you have foollowing HTML:

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

and a user only check the checkbox, then result of post would be like

$_POST['starter'] = 1

You have to check whether or not a checkbox is sent and after that do the correct insert.

If you have it checked and it still does not work, it is an issue with actual query even if you don't get an explicit error. MySQL is somewhat forgiving when inserting things with "wrong" datatype.

UPDATE: You can try this:

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());

If a checkbox is unchecked, then absolutely nothing is sent to the server. Not even a value of blank or 0. An unchecked checkbox is as if the form element doesn't exist.

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

then save $starter in your DB :

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

A nifty trick you can use with checkboxes is to provide the unchecked value in a hidden input prior to the checkbox, eg

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

This way, if the checkbox remains unchecked, at least a key / value pair will be submitted with the form.

On to your query, this is just a terrible mix of string concatenation and bad sanitising methods.

You should be using MySQLi or PDO these days, eg (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();