简体   繁体   中英

How to submit just one button from a set of buttons that are displayed using a php while-loop

I am coding a website for an online university portal where I have a programs/courses page in which I am displaying the programs/courses on the page using data from the database in a PHP while-loop I have the enroll buttons also being displayed in that same while loop. but I'm having a bit of difficulty submitting the enroll buttons as when I click one of them all of them get submitted. can anyone please let me know what I'm doing wrong here or if I have to use any javascript in this case!

<?php
session_start();
$con = mysqli_connect('localhost', 'root', '');

mysqli_select_db($con, 'htdatabase');
if ($con->connect_error) {
    die("Connection failed: " . $con->connect_error);
}

$id = $_SESSION['userID'];
$sql = "SELECT * FROM programs";
$result = $con->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $i = '';
        $progID = $row["progID"];
        $name = $row["progName"];
        $halfTime = $row["halfTDuration"];
        $fullTime = $row["fullTDuration"];
        $fee = $row["fee"];
        $descrip = $row["description"];
        $stringname = strval($name);
        $spaceRemoved = str_replace(' ', '', $stringname);

        ?>
        <div class="card-header" id="headingOne">
            <h5 class="mb-0">
                <?php echo "<button class='btn btn-link' type='button' data-toggle='collapse' data-target='#$spaceRemoved' aria-expanded='false' aria-controls='$spaceRemoved'> $name </button>"; ?>
            </h5>
        </div>

        <?php echo "<div id='$spaceRemoved' class='collapse' aria-labelledby='headingOne' data-parent='#accordionExample'>"; ?>
        <div>
            <div class="ccard-body col-md-9">
                <h6><?php echo $descrip; ?></h6>
                <hr>
                <h5>Duration:</h5>
                <h6>Full time: <?php echo $fullTime; ?></h6>
                <h6>Half time: <?php echo $halfTime; echo $i; ?></h6>
                <hr>
                <h5 style="display: inline-block;">Estimated fees: $</h5><h5 style="display: inline-block;"><?php echo $fee ?></h5>
            </div>
            <form action="programs.php" method="post">
                <div id="enroll" class="col-md-3">
                    <?php
                    $sql1 = "SELECT * FROM userprograms WHERE userID = '$id' AND progID = '$progID'";
                    $result1 = $con->query($sql1);

                    if ($result1->num_rows > 0) {
                        echo '<div id="enrolled" name="enrolled">ENROLLED</div>';
                    } else {
                        if (isset($_POST["enroll"])) {
                            $enrollqry = "insert into userprograms (userID, progID) values ('$id' , '$progID')";
                            mysqli_query($con, $enrollqry);
                        }
                        echo "<button name='enroll'type='submit'>ENROLL</button>";
                    }
                    ?>
                </div>
            </form>
        </div>
        </div>
        <?php
    }
} ?>

You can specify a value for the button. like

<button name='enroll' value="<?php echo $program_id?>" type='submit'>ENROLL</button>

Then when checking for $_POST['enroll'] check the value and also validate it before entry to db.

After clicking the submit button a browser will send a POST request to programs.php with a form data , that includes values of input & button tags.

<input type="submit" name="course1" value="42">Subscribe</input>
<input type="text" name="first_name" placeholder="Your name"/>

Will send

course1=42
first_name=...

So you should either give a unique name to each submit button to be able to distinguish them on the server-side, or set up distinct values, as @mohamed-jailam mentioned above.

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