Значение флажка не передается в базу данных

0

Я использую таблицу MySQL со следующей структурой:

`login` (
  `loginid` int(11) unsigned NOT NULL auto_increment,
  `username` varchar(30) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(255) NOT NULL,
  `actcode` varchar(45) NOT NULL,
  `disabled` tinyint(1) NOT NULL default '0',
  `activated` tinyint(1) NOT NULL default '0',
  `created` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `points` bigint(9) NOT NULL,
  `website` varchar(1000) NOT NULL,
  `location` varchar(1000) NOT NULL,
  `age` varchar(1000) NOT NULL,
  `gender` varchar(1000) NOT NULL,
  `subcheckr` tinyint(1) NOT NULL,
  PRIMARY KEY  (`loginid`)
)

У меня есть несколько полей, которые пользователь может заполнить при регистрации. Все они работают нормально (информация передается в базу данных). У меня также есть флажок для выбора пользователем при регистрации. Однако, когда пользователь выбирает этот флажок, значение "1" не передается в базу данных. Флажок имеет имя "subcheckr" как в коде ниже, так и в базе данных.

Любая идея, почему флажок не работает?

Спасибо заранее,

Джон

Когда пользователь регистрируется, я использую следующий код:

function show_registration_form(){

    echo '<form action="http://www...com/.../register.php" method="post">  

    <div class="register"><label for="username">Select Username:</label></div> 
    <div class="registerform"><input name="username" type="text" id="username" maxlength="30"></div>

    <div class="passwordregister"><label for="password">Select Password:</label></div> 
    <div class="passwordregisterform"><input name="password" type="password" id="password" maxlength="15"></div>

    <div class="passwordregister2"><label for="password2">Re-type password:</label></div> 
    <div class="passwordregister2form"><input name="password2" type="password" id="password2" maxlength="15"></div>

    <div class="emailregister"><label for="email">Your Email (required):</label></div> 
    <div class="emailregisterform"><input name="email" type="text" id="email" maxlength="255"></div> 


    <div class="websiteregister"><label for="website">Your Website (optional):</label></div> 
    <div class="websiteregisterform"><input name="website" type="text" id="website" maxlength="255"></div> 

    <div class="locationregister"><label for="website">Your Location (optional):</label></div> 
    <div class="locationregisterform"><input name="location" type="text" id="location" maxlength="255"></div>

    <div class="ageregister"><label for="website">Your Age (optional):</label></div> 
    <div class="ageregisterform"><input name="age" type="text" id="age" maxlength="255"></div>

    <div class="genderregister"><label for="website">Your Gender (optional):</label></div> 
    <div class="genderregisterform"><input name="gender" type="text" id="gender" maxlength="255"></div>

    <div class="subcheckr"><INPUT TYPE=CHECKBOX NAME="subcheckr">Click here to receive updates via email (optional).<P></div>

    <p class="registerbutton"> 
    <input name="register" type="submit" value="Register"> 
    </p> 

    </form>';

}

Следующий код находится на странице register.php:

if (isset($_POST['register'])){

    if (registerNewUser($_POST['username'], $_POST['password'], $_POST['password2'], $_POST['email'], $_POST['website'], $_POST['location'], $_POST['age'], $_POST['gender'], $_POST['subcheckr'])){


        echo '<div class="submittitle">Thank you for registering, an email has been sent to your inbox, Please activate your account.</div>';


    }else {

        echo '<div class="submittitler">There was a problem with your registration.  Perhaps the username or email you picked was already in use.  Please try again.</div>';
        show_registration_form();

    }

} else {
// has not pressed the register button
    show_registration_form();   
}

Вот новая функция регистрации:

function registerNewUser($username, $password, $password2, $email, $website, $location, $age, $gender, $subcheckr)
{

    global $seed;

    if (!valid_username($username) || !valid_password($password) || 
            !valid_email($email) || $password != $password2 || user_exists($username) || email_exists($email))
    {
        return false;
    }


    $code = generate_code(20);
    $sql = sprintf("insert into login (username,password,email,actcode, website, location, age, gender, subcheckr) value ('%s','%s','%s','%s','%s','%s','%s','%s','%s')",
        mysql_real_escape_string($username), mysql_real_escape_string(sha1($password . $seed))
        , mysql_real_escape_string($email), mysql_real_escape_string($code), mysql_real_escape_string($website), mysql_real_escape_string($location),               mysql_real_escape_string($age), mysql_real_escape_string($gender), mysql_real_escape_string($subcheckr));


    if (mysql_query($sql))
    {
        $id = mysql_insert_id();

        if (sendActivationEmail($username, $password, $id, $email, $code))
        {

            return true;
        } else
        {
            return false;
        }

    } else
    {
        return false;
    }
    return false;

}
  • 0
    Как уже отмечалось, вы не указываете value флажка. Значение по умолчанию , если не указать это on .
Теги:

4 ответа

2
Лучший ответ

замените эту строку:

<INPUT TYPE=CHECKBOX NAME="subcheckr">

с:

<INPUT TYPE=CHECKBOX NAME="subcheckr" value="1">
1

Простейшая вещь, которую я делаю с флажками, вместо того, чтобы вытащить значение, я просто проверяю, были ли они установлены, а затем поместили значение соответственно:

$checkboxDatabaseValue = (isset($_POST["checkboxname"]) ? 1 : 0);

Работает всегда для меня.

0

Не похоже, что вы указали значение для элемента subcheckr в своем HTML.

Я думаю, что флажки HTML возвращают "on" или "off", если вы не укажете значение. Вы должны изменить эту строку на:

<INPUT TYPE=CHECKBOX NAME="subcheckr" value="1">
0

Однако, когда пользователь выбирает флажок, значение "1" не передается в базу данных

У вашего флажка нет атрибута value, не так ли?

<INPUT TYPE=CHECKBOX NAME="subcheckr">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню