2010-10-05 6 views
0

J'utilise une table MySQL avec la structure suivante:Vérifiez la valeur de la boîte ne sont pas transmises à la base de données

`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`) 
) 

J'ai plusieurs champs que l'utilisateur peut remplir lors de l'enregistrement. Ils fonctionnent tous très bien (l'information est transmise à la base de données). J'ai également une case à cocher pour un utilisateur à sélectionner lors de l'inscription. Cependant, lorsqu'un utilisateur sélectionne la case à cocher, la valeur "1" n'est pas transmise à la base de données. La case à cocher porte le nom de "subcheckr" dans le code ci-dessous et dans la base de données.

Une idée de la raison pour laquelle la case à cocher ne fonctionne pas?

Merci à l'avance,

John

Lorsqu'un utilisateur enregistre, je suis en utilisant le code suivant:

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>'; 

} 

Le code suivant est sur la page 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(); 
} 

Voici la nouvelle fonction d'enregistrement:

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

Comme indiqué précédemment, vous ne spécifiez pas la 'valeur' de la case à cocher. La valeur par défaut si vous ne le spécifiez pas est 'on'. –

Répondre

2

remplacer cette ligne:

<INPUT TYPE=CHECKBOX NAME="subcheckr"> 

avec:

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

Cependant, lorsqu'un utilisateur sélectionne la case à cocher, la valeur « 1 » ne sont pas transmises à la base de données

Votre case n'a pas value attribut, le fait?

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

est plutôt que tirer la valeur La chose la plus facile que je fais avec cases à cocher Je vérifie simplement si elles ont été fixées et mettre une valeur en conséquence:

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

Fonctionne toujours pour moi.

0

Il ne semble pas que vous ayez spécifié une valeur pour la case à cocher subcheckr dans votre code HTML.

Je pense que les cases à cocher HTML retournent "on" ou "off" si vous ne spécifiez pas de valeur. Vous devez remplacer cette ligne par:

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