简体   繁体   中英

INSERT into database using a dropdown menu

The issue is with doing an INSERT into the dropdown. I was able to populate data from the DB into the drop down. The issue is inserting into a table from the dropdown.

HTML (Generated dropdown from database)

<div class="group">
    <label>Subject</label>
    <input type="text" name="subject">
</div> 
<div class="group">
    <label>Group</label>                    
    <select id="ministry" name="group">                        
        <option style="font-family: century gothic">---Select Ministry---</option>
        <?php // populate dropdown ?>
        <?php foreach($groups as $group): ?>
            <option value="<?= $group['group_id'] ?>"><?= $group['groupname'] ?></option>
        <?php endforeach; ?>
    </select>
</div>

PHP (Code to insert into the database)

<?php

$date = "";
$subject = "";
$group = "";
$message = "";  

$sql= "SELECT * FROM groups";
$stmt = $db->prepare($sql);
$stmt->execute();
$groups = $stmt->fetchAll();

if (isset($_POST['sendSMS'])) {
    $date = (isset($_POST['date']));
    $subject = $_POST['subject'];
    $group = $_POST['group'];
    $message = $_POST['message'];

    $sql = "INSERT INTO message (date, subject, group, message) 
            VALUES 
           (:date, :subject, :group, :message)";

    $stmt->execute(array(
        ':date' => $_POST['date'],
        ':subject' => $_POST['subject'],
        ':group' => $_POST['group'],
        ':message' => $_POST['message']));

    $result = $sql->execute();
    echo "SMS sent successfully";
}

?>

I moved your first query to the top of your page. It looks to me that is what is going to populate your html with the group data.

I cleaned up your html a bit. Well formatted code is much easier to read and much easier to troubleshoot when you have issues. I like to avoid breaking in and out of php.

Your insert query is close, but I made a very clear example for you to follow. This should show you the way going forward. Remember: Prepare, Bind, and Execute.

<?php

//DB select statement  - This should probably go before your select html
$sql= "SELECT * FROM groups";
$stmt = $db->prepare($sql); //Prepare
//Nothing to bind
$stmt->execute(); //Execute
$groups = $stmt->fetchAll();

echo
'<div class="group">
  <label>Subject</label>
  <input type="text" name="subject">
</div> 

<div class="group">

  <label>Group</label>                    

    <select id="ministry" name="group">                        
      <option style="font-family: century gothic">---Select Ministry---</option>';

      foreach($groups as $group){
        echo
        '<option value="' . $group['group_id'] . '">' . $group['groupname'] . '</option>';
      }

   echo 
   '</select>

</div>';

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

  //insert into database 
  $query = "INSERT INTO `message` 
  (
     `date`,
     `subject`,
     `group`,
     `message`
   )

VALUES

  (
    :date,
    :subject,
    :group,
    :message

  )";

  //Remember these three steps.  1.)Prepare, 2.)Bind, 3.)Execute

  $stmt = $db->prepare($query); //Prepare

  //Bind
  $stmt->bindParam(":date",    $_POST['date']);
  $stmt->bindParam(":subject", $_POST['subject']);
  $stmt->bindParam(":group",   $_POST['group']);
  $stmt->bindParam(":message", $_POST['message']);

  //Execute 
  $stmt->execute();


  echo "SMS sent successfully";

}

?>

Here are two sources for you to read on PDO. I highly recommend looking over both of them and bookmark them so you can reference when you need them.

https://phpdelusions.net/pdo

https://websitebeaver.com/php-pdo-prepared-statements-to-prevent-sql-injection

 <?php //---session start--- session_start(); //---variables iniatiated and set to empty--- $date = ""; $subject = ""; $group = ""; $message = ""; //--try begins here--- //---include db connection--- require 'db.php'; $sql= "SELECT * FROM groups"; $stmt = $db->prepare($sql); $stmt->execute(); $groups = $stmt->fetchAll(); if(isset($_POST['sendSMS'])){ //insert into database $query = "INSERT INTO member(date, subject, group, message) VALUES (:date, :subject, :group, :message)"; $stmt = $db->prepare($query); $stmt->bindParam(":date", $_POST['date']); $stmt->bindParam(":subject", $_POST['subject']); $stmt->bindParam(":group", $_POST['group']); $stmt->bindParam(":message", $_POST['message']); $stmt->execute(); echo "SMS sent successfully"; header('location: SMSsent.php'); } //--close connection--- unset($db); 
  <form> <div class="group"> <label>Group</label> <select id="ministry" name="group"> <?php foreach($groups as $group){ echo '<option value="' . $group['group_id'] . '">' . $group['groupname'] . '</option>'; } ?> </select> </div> <div class="group"> <label>Message</label> <textarea style="text-align: left; vertical-align: middle;" cols="25" rows="7" name="message" id="clear"> </textarea> </div> <button type="submit" class="btn" name="sendSMS">Send SMS</button> </div> </form> 

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