简体   繁体   中英

PHP Update for Radio buttons

The radio buttons (gender and level) showing "undefined" when I press submit. I am using jQuery Mobile framework. The other fields that have type=text work fine. How do I insert value in the backend for these radio buttons? Would I need to set the value explicitly in PHP? (ie if$_POST['gender'] == 'male' )

Somehow $_POST['gender'] and $_POST['level'] is not defining the variable. Only when there is only 1 radio button it works.

 <form action="save.php" method="post">
        <label for="name">Name </label>
        <input id="name" type="text" name="name"/>

        <label for="city">City </label>
        <input id="city" type="text" name="city"/>

        <label for="lang_know">Language </label>
        <input id="lang_know" type="text" name="language"/>

        <div data-role="fieldcontain">
            <label for="lang_level">Level</label>
            <fieldset id="lang_level" data-role="controlgroup" data-type="horizontal">
            <label for="okay">Okay</label>
            <input type="radio" id="okay" name="level" value="okay"/>
            <label for="good">Good</label>
            <input type="radio" id="good" name="level" value="good"/>
            <label for="great">Great</label>
            <input type="radio" id="great" name="level" value="great"/>
            </fieldset>
        </div>

        <div data-role="fieldcontain">
            <label for="gender">Gender</label>
            <fieldset id="gender" data-role="controlgroup" data-type="horizontal">
            <label for="male">Male</label>
            <input type="radio" id="male" name="gender" value="male"/>
            <label for="female">Female</label>
            <input type="radio" id="female" name="gender" value="female"/>
            </fieldset>
        </div>

        <label for="age">Age </label>
        <input id="age" type="number" min=18 max=90 name="age"/>
        <input type="submit" value="Update"/>
    </form>

Save.php

<?php
    try{

    $name = $_POST['name'];
    $city = $_POST['city'];
    $language = $_POST['language'];

    $level = $_POST['level'];
    $gender = $_POST['gender'];

    $age = $_POST['age'];
    $email = "lapm@gmail.com";

    $connection = new PDO ('mysql:host=localhost;dbname=tongue', 'web', 'lapming1');
    $connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $connection -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    function save ($query, $email, $connect, $name, $city, $language, $level, $gender, $age) {
        $statement  =  $connect->prepare($query);
        $statement  -> bindParam(':email',$email, PDO::PARAM_STR, 127);
        $statement  -> bindParam(':name', $name, PDO::PARAM_STR, 127);
        $statement  -> bindParam(':city', $city, PDO::PARAM_STR, 127);
        $statement  -> bindParam(':language', $language, PDO::PARAM_STR, 127);
        $statement  -> bindParam(':level', $level, PDO::PARAM_STR, 127);
        $statement  -> bindParam(':gender', $gender, PDO::PARAM_STR, 127);
        $statement  -> bindParam(':age', $age, PDO::PARAM_STR, 127);
        $statement  -> execute();
    }

    $sql = 'UPDATE user
            SET name=:name, city=:city, language=:language, level=:level, gender=:gender, age=:age
            WHERE email=:email';
    $save = save ($sql, $email, $connection, $name, $city, $language, $level, $gender, $age);

    header ('Location:profile.php');

    $connection = null;
    } catch(PDOException $e) {
        echo $e->getMessage();
    };  
?>

Here's the workaround that I wrote.

<fieldset data-role="controlgroup">
<legend>Gender</legend>
<input id="male" type="radio" name="male" value="male"/>
<label for="male">Male</label>
<input id="female" type="radio" name="female" value="female"/>
<label for="female">Female</label>
</fieldset>

save.php

//gender radio buttons
    $male = $_POST['male'];
    $female = $_POST['female'];

    if (isset($male)){
        $gender = 'male';
        };

    if (isset($female)){
        $gender = 'female';
        };

For data to be transmitted properly on form elements you need to set the name attribute.

<input type="text" name="blarg" value="" />

This will come through to PHP as $_GET['blarg'] or $_POST['blarg'], respectively.

You should go through your form elements and add the name attribute to match the value of each ID attribute.

I'm not sure why the radio buttons aren't working, they look right to me.

As for age, are you sure your browser supports input type="number"?

In any case, what does print_r($_POST) show?

Ist try echo $gender = $_POST['gender'];

if its working then echo your query

echo  $sql = 'UPDATE user
            SET name=:name, city=:city, language=:language,
            level=:level, gender=:gender, age=:age
            WHERE email=:email';

I hope this will help you in getting your desired result

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM