user247326
user247326

Reputation: 151

php collect dates between 2 dates and create entry for each

I have been searching for a while now, but I cannot put together enough information in order to resolve this problem.

I created an event calendar with a field that allows the user to enter a range for booking an event. I already have the start date configured for the date selected. When a user enters the end date, the information in the fields will be duplicated for each date in the range.

            $requester = $_POST['txtrequester'];
            $title = $_POST['txttitle'];
            $detail = $_POST['txtdetail'];
            $startTime = $_POST['txtstarttime'];
            $endTime = $_POST['txtendtime'];
            $endDate = $_POST['txtenddate']; //end date of range request
            $eventdate = $month."/".$day."/".$year;
            $today_dt = $year."-".$month."-".$day;
            $startDate_dt = strtotime("$year."-".$month."-".$day");
            $endDate_dt = strtotime($endDate);
            $endDate_dt = $endDate_dt->modify('+1 day');
            $interval = DateInterval::createFromDateString('1 day');
            $period = new DatePeriod($today_dt, $interval, $endDate_dt);

Can someone help me figure this out? Thanks in advance

--Edit--

Code inserting event form data into mysql

        $sqlinsert = "INSERT INTO conferenceevents (Requester,Title,Detail,eventDate,dateAdded,startTime,endTime,endRange) values ('$requester','$title','$detail','$eventdate',now(),'$startTime','$endTime','$endDate')";
        $resultinsert = $connection->query($sqlinsert); 


        if($resultinsert){
            echo "<h4>Event was Successfully Added</h4><br>";
        }else{
            echo "<h4>Event Failed to be Added</h4><br>" . $sqlinsert;
        }
    }

Event form html

<form name='eventform' method='POST' action="<?php $_SERVER['PHP_SELF']; ?>?month=<?php echo $month;?>&day=<?php echo $day;?>&year=<?php echo $year;?>&v=true&add=true">

    <div class="form-group">
    <label for="requester">Requester</label>
    <select class="form-control" name='txtrequester'>
      <option name='txtrequester'>Melissa</option>
      <option name='txtrequester'>Greg</option>
      <option name='txtrequester'>Matt</option>
      <option name='txtrequester'>Michael</option>
      <option name='txtrequester'>Ben</option>
      <option name='txtrequester'>Pat</option>
      <option name='txtrequester'>Maria</option>
    </select>
    </div>
    <div class="form-group">
    <label for="eventTitle">Event Title</label>
    <input type="text" class="form-control" id="eventTitle" placeholder="Event Title" name='txttitle'>
    </div>
    <div class="form-group">
    <label for="eventStartTime">Event Start Time</label>
    <input type="time" class="form-control" id="eventStartTime" value="12:00" name='txtstarttime'>
    </div>
    <div class="form-group">
    <label for="eventEndTime">Event End Time</label>
    <input type="time" class="form-control" id="eventEndTime"  value="13:00" name='txtendtime'>
    </div>
    <a href class="option"><h4>Click here to enter date range (optional)</h4></a>
    <div class="form-group range" style="display: none;">
    <label for="eventStartDate">Event Start Date</label>
    <input type="text" class="form-control" id="disabledInput" name='txtstartdate' disabled value="<?php echo $month . "/" . $day . "/" . $year; ?>">
    </div>
    <div class="form-group range" style="display: none;">
    <label for="eventEndDate">Event End Date</label>
    <input type="date" value="<?php echo $year . "-" . $month . "-" . $day; ?>" class="form-control" id="eventEndDate" name='txtenddate'>
    </div>
    <div class="form-group">
    <label for="eventDetail">Event Detail</label>
    <input type="text" id="eventDetail" type="text" class="form-control" placeholder="Event Detail" name='txtdetail'>
    </div>
    <button type="submit" class="btn btn-default" name='btnadd'>Add Event</button>

</form>

Upvotes: 0

Views: 2133

Answers (1)

Indra Kumar S
Indra Kumar S

Reputation: 2934

It seems you are trying to insert a row in to your data base for each and every date in given date range... Please try it like this

$startTime = strtotime( '2015-01-11' );
$endTime = strtotime( '2015-01-20' );

// Loop between timestamps, 24 hours at a time
for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
            $given_date =  date( 'Y-m-d', $i )."<br>";          
            // You can put your database insert query here
              echo "Data for $given_date is inserted";
}

More efficient way of inserting multiple rows is as follows..

$startTime = strtotime( '2015-01-11' );
$endTime = strtotime( '2015-01-20' );


 $sqlinsert = "INSERT INTO conferenceevents (Requester,Title,Detail,eventDate,dateAdded,startTime,endTime,endRange) values ";
 // Loop between timestamps, 24 hours at a time
    for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
            $eventdate =date('Y-m-d', $i ); 
          // Constructing the insert query
         $sqlinsert .= " ('$requester','$title','$detail','$eventdate',now(),'$startTime','$endTime','$endDate'),";
}

 $bulk_insert_query = rtrim($sqlinsert, ","); // to remove last comma
 $resultinsert = $connection->query($bulk_insert_query); 

To get more understanding about bulk insert query Try to echo $bulk_insert_query and see how it was constructed and how you want to improve..

Upvotes: 1

Related Questions