Извлечение JSON значений в PHP - PullRequest
1 голос
/ 02 февраля 2020

Здесь я храню doctor schedule в HTML table со следующим JSON форматом. Он успешно хранит в базе данных следующее:

[{"monday_start":"09.00 A.M","monday_end":"10.00 A.M"},{"tuesday_start":"10.00 A.M","tuesday_end":"11.00 A.M"},{"wednesday_start":"Select Date","wednesday_end":"Select Date"},{"thursday_start":"Select Date","thursday_end":"Select Date"},{"friday_start":"Select Date","friday_end":"Select Date"},{"saturday_start":"Select Date","saturday_end":"Select Date"},{"sunday_start":"Select Date","sunday_end":"Select Date"}]

Вот код HTML:

<table class="table table-striped mb-0">
            <thead>
                <tr>
                    <th>Days</th>
                    <th>Time (From)</th>
                    <th>Time (To)</th>
                </tr>
            </thead>
            <tbody id="rows">
                <tr>
                    <td>MonDay</td>
                    <td>
                            <div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="mon_start" name="mon_start">
                                   <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div>
                   </td>
                    <td>      <div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="mon_end" name="mon_end">
                                    <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div>
                    </td>
                </tr>
                <tr>
                        <td>TuesDay</td>
                        <td>     
                               <div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="tues_start" name="tues_start">
                                   <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div>
                    </td>
                     <td>      
                           <div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="tues_end" name="tues_end">
                                    <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div>
                   </td>
                    </tr>
                    <tr>
                        <td>WednesDay</td>
                                 <td> 
                             <div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="wed_start" name="wed_start">
                                 <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div>
                        </td>
                        <td>     
                              <div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="wed_end" name="wed_end">
                                   <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div>
                            </td>
                    </tr>
                   <tr>
                                            <td>ThursDay</td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="thur_start" name="thur_start">
                                   <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="thur_end" name="thur_end">
                                     <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                        </tr>
                                        <tr>
                                            <td>FriDay</td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="fri_start" name="fri_start">
                                   <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="fri_end" name="fri_end">
                                       <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                        </tr>
                                        <tr>
                                            <td>SaturDay</td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="sat_start" name="sat_start">
                                  <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="sat_end" name="sat_end">
                                       <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                        </tr>
                                        <tr>
                                            <td>SunDay</td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="sun_start" name="sun_start">
                                      <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                            <td><div class="col-md-12">
                                <div class="form-group"> 
                                    <select class="select" id="sun_end" name="sun_end">
                                        <option value="Select Date">Select</option>  
                                        <option value="09.00 A.M">09.00 A.M</option> 
                                        <option value="10.00 A.M">10.00 A.M</option>  
                                        <option value="11.00 A.M">11.00 A.M</option>
                                        <option value="12.00 P.M">12.00 P.M</option>                          
                                        <option value="Not Available">Not Available</option>

                                    </select>
                                </div>
                            </div></td>
                                        </tr>
                                    </tbody>
                                </table>

Здесь Ajax call для отправки данных на addschedule.php страницу:

<script>

      // save comment to database
            $(document).on('click', '#schedule', function () {

                var modess = $('#rows tr').map(function() {
                let $tr = $(this);

                return [ { 

               "monday_start": $(this).find('#mon_start').val(),
               "monday_end": $(this).find('#mon_end').val(),
               "tuesday_start":$(this).find('#tues_start').val(),
               "tuesday_end":$(this).find('#tues_end').val(),
               "wednesday_start":$(this).find('#wed_start').val(),
               "wednesday_end":$(this).find('#wed_end').val(),
               "thursday_start": $(this).find('#thur_start').val(),
               "thursday_end": $(this).find('#thur_end').val(),
               "friday_start": $(this).find('#fri_start').val(),
               "friday_end": $(this).find('#fri_end').val(),
               "saturday_start": $(this).find('#sat_start').val(),
               "saturday_end": $(this).find('#sat_end').val(),
               "sunday_start": $(this).find('#sun_start').val(),
               "sunday_end": $(this).find('#sun_end').val(),
                 } ]
                 console.log(modess);
                       });

              var timetable = JSON.stringify( $.makeArray(modess) );
                    $.ajax({
                        url: "adminquery/addschedule.php", // Url to which the request is send
                        method: "POST",             // Type of request to be send, called as method
                        data:{ index1: timetable, 
                       },            
                    cache: false,

                        success: function (response) {
                            $('#success_mes').fadeIn().html(response);

                            $("success_mes").fadeIn().html(response);
                            setTimeout(function () {
                                $('#success_mes').fadeOut("Slow");
                            }, 2000);

                        }

                    });

});

</script>

На моей странице извлечения я закодировал так, чтобы получить данные:

    <table class="table table-hover mb-0">
                                        <thead>
                                            <tr>
                                                <th>Day</th>
                                                <th>Time (From)</th>
                                                <th>Time (To)</th>
                                            </tr>
                                        </thead>
                                        <tbody>

                                        <?php 

                     $stmt = $conn->prepare("SELECT * FROM schedule WHERE user_id=? ");
                     $stmt->bind_param("s", $_GET['userid']);
                     $stmt->execute();
                     $result = $stmt->get_result();
                     if($result->num_rows === 0)  exit('No rows');
                     while($row = $result->fetch_assoc()) {

                     $times = json_decode($row['available_days'],true);
                     if (is_array($times) || is_object($times)) {

                     foreach($times as $key => $object) {

                           ?>


                                            <tr>
                                                <td>Monday</td>
                                                <td><?php echo   $object['monday_start']; ?></td>
                                                <td><?php echo  $object['monday_end']; ?></td>
                                            </tr>

                                            <tr>
                                                <td>tuesday</td>
                                                <td><?php echo   $object['tuesday_start']; ?></td>
                                                <td><?php echo  $object['tuesday_end']; ?></td>
                                            </tr>
                                            <tr>
                                                <td>wednesday</td>
                                                <td><?php echo   $object['wednesday_start']; ?></td>
                                                <td><?php echo  $object['wednesday_end']; ?></td>
                                            </tr>
                                            <tr>
                                                <td>thursday</td>
                                                <td><?php echo   $object['thursday_start']; ?></td>
                                                <td><?php echo  $object['thursday_end']; ?></td>
                                            </tr>
                                            <tr>
                                                <td>friday</td>
                                                <td><?php echo   $object['friday_start']; ?></td>
                                                <td><?php echo  $object['friday_end']; ?></td>
                                            </tr>
                                            <tr>
                                                <td>saturday</td>
                                                <td><?php echo   $object['saturday_start']; ?></td>
                                                <td><?php echo  $object['saturday_end']; ?></td>
                                            </tr>
                                            <tr>
                                                <td>sunday</td>
                                                <td><?php echo   $object['sunday_start']; ?></td>
                                                <td><?php echo  $object['sunday_end']; ?></td>
                                            </tr>



                                            <?php  } }   }

                                            ?>
                                        </tbody>



                                    </table>

Только первая строка показывает значение, другие показывают ошибку, показывая как это: Notice: Undefined index: tuesday_start in C:\xampp\htdocs\Hospital\adminpanel\show_schedule.php on line 260Notice: Undefined index: tuesday_end in C:\xampp\htdocs\Hospital\adminpanel\show_schedule.php on line 261 для каждой следующей строки.

enter image description here

Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 02 февраля 2020

Проблема здесь: foreach($times as $key => $object), вы зацикливаетесь каждый день, но внутри l oop вы пытаетесь отобразить данные за все дни.

Вот возможное решение:

<?php 
$days = array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'); // define all days to be displayed
foreach($days as $day)
{
   // retrieve current day data only
   // this will return the item that has a DAY_start key in it
   $dayData  = array_values(array_filter($times, function($d) use($day){return array_key_exists($day . '_start', $d);}))[0] ;
?>
<tr>
    <td><?php echo ucfirst($day); /* display the name of the day */?></td>
    <td><?php echo $dayData[$day . '_start']; /* display the current day start */?></td>
    <td><?php echo $dayData[$day . '_end']; /* display the current day end */?></td>
</tr>
<?php
}
?>    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...