checkbox filled with php database data

Asked

Viewed 110 times

1

I have this code that creates the calendar and checkbox:

<?php

# PHP Calendar (version 2.3), written by Keith Devens

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
    $first_of_month = gmmktime(0,0,0,$month,1,$year);

    #remember that mktime will automatically correct if invalid dates are entered
    # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
    # this provides a built in "rounding" feature to generate_calendar()

    $day_names = array(); #generate all the day names according to the current locale
    for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
        $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name

        $mes_pt = array('', 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');

    list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
    $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
    //$title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

    $title   = htmlentities(ucfirst($mes_pt[(int)$month])).'&nbsp;'.$year;

    #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
    if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
    if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
    $calendar = '<table class="calendar">'."\n".
        '<caption class="calendar-month"><h1><center><strong>'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</strong></center></h1></caption>\n<tr>";

    if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
        #if day_name_length is >3, the full name of the day will be printed
        //foreach($day_names as $d)
            //$calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';

            $calendar .= "<th bgcolor='silver' align='center'>Domingo</th>";
            $calendar .= "<th bgcolor='silver' align='center'>Segunda</th>";
            $calendar .= "<th bgcolor='silver' align='center'>Terça</th>";
            $calendar .=  "<th bgcolor='silver' align='center'>Quarta</th>";
            $calendar .= "<th bgcolor='silver' align='center'>Quinta</th>";
            $calendar .= "<th bgcolor='silver' align='center'>Sexta</th>";
            $calendar .=  "<th bgcolor='silver' align='center'>Sábado</th>";

        $calendar .= "</tr>\n<tr>";
    }

    if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
    for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
        if($weekday == 7){
            $weekday   = 0; #start a new week
            $calendar .= "</tr>\n<tr>";

        }
        if(isset($days[$day]) and is_array($days[$day])){
            @list($link, $classes, $content) = $days[$day];
            if(is_null($content))  $content  = $day;
            $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
        }
        else 

        $calendar .= "<td bgcolor='#F5F5F5' align='center' data-semana=''><center><font size='2px'/>
        <input type='checkbox' name='DataRegisto[]' value='$year-$month-$day'> $year-$month-$day  <br />
        <input type='checkbox' name='Pequeno[]' value='Peq. Almoço'> Peq. Almoço <br />
        <input type='checkbox' name='Almoco[]' value='Almoço'> Almoço <br />
        <input type='checkbox' name='Dieta[]' value='Almoço Dieta'> Almoço (Dieta)<br />
        <input type='checkbox' name='Lanche[]' value='Lanche'> Lanche<br />
        <input type='checkbox' name='Jantar[]' value='Jantar'> Jantar<br />
        <input type='checkbox' name='JantarDie[]' value='Jantar Dieta'> Jantar (Dieta)</font></center></td>";

    }
    if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;

    </td>'; #remaining "empty" days

    return $calendar."</tr>\n</table>\n";
}

    date_default_timezone_set('Europe/Lisbon');

    $dates = date('Y/m/d');
    $hoje = getdate(strtotime($dates)); 


    //Monta o calendário
    if(isset($_POST["data"])){
?>    
        <form name="form2" id="mainForm2" method="post" enctype="multipart/form-data" action="">    
            <?php
                list($dia, $mes, $ano) = explode('/', $_POST["data"]);
                echo generate_calendar($ano,$mes,$dia);
            ?>
            <input type="submit" name="registar" value="Marcar">
        </form>

    <?php } else { ?>

        <form name="form3" id="mainForm3" method="post"  action="">
            <?php  echo generate_calendar($hoje["year"], $hoje["mon"], $hoje["mday"]); ?>

            <input type="submit" name="registar" value="Marcar">
        </form>
    <?php } ?>

I use this code to enter into the database:

<?php 
if(isset($_POST['registar']))
{
for ($i=0;$i<count($_POST["DataRegisto"]);$i++) {
    $data = $_POST['DataRegisto'][$i];
    $pequeno = $_POST['Pequeno'][$i];
    $almoco = $_POST['Almoco'][$i];
    $dieta = $_POST['Dieta'][$i];
    $lanche = $_POST['Lanche'][$i];
    $jantar = $_POST['Jantar'][$i];
    $jantardie = $_POST['JantarDie'][$i];



        $sql="INSERT INTO testeteste (DataRegisto,Pequeno,Almoco,Dieta,Lanche,Jantar,JantarDie) VALUES ('$data','$pequeno','$almoco','$dieta','$lanche','$jantar','$jantardie')";

        $r = mysqli_query($conn,$sql);
}
}

?>

Now I want the checkbox to be selected according to the database table data and for that I am using this code:

<?php 

$result_cursos = "SELECT DataRegisto,
       Pequeno,
       Almoco,
       Dieta,
       Lanche,
       Jantar,
       JantarDie

FROM centrodb.testeteste";
    $resultado_cursos = mysqli_query($conn, $result_cursos);

     foreach ($resultado_cursos as $row) {
          $data = $row['DataRegisto'];
          $pequeno = $row['Pequeno'];
          $almoco = $row['Almoco'];
          $dieta = $row['Dieta'];
          $lanche = $row['Lanche'];
          $jantar = $row['Jantar'];
          $jantardie = $row['JantarDie'];

          $marcado = '';
          if(in_array($data, $pequeno, $almoco, $dieta, $lanche, $jantar, $jantardie))
                $marcado = 'checked';    

          $option.='<label class="checkbox-inline"><input type="checkbox" name="DataRegisto[]" value="'.$data.'" ></label>';
      $option.='<label class="checkbox-inline"><input type="checkbox" name="Pequeno[]" value="'.$pequeno.'" ></label>';
      $option.='<label class="checkbox-inline"><input type="checkbox" name="Almoco[]" value="'.$almoco.'" ></label>';
      $option.='<label class="checkbox-inline"><input type="checkbox" name="Dieta[]" value="'.$dieta.'" ></label>';
      $option.='<label class="checkbox-inline"><input type="checkbox" name="Lanche[]" value="'.$lanche.'" ></label>';
      $option.='<label class="checkbox-inline"><input type="checkbox" name="Jantar[]" value="'.$jantar.'" ></label>';
      $option.='<label class="checkbox-inline"><input type="checkbox" name="JantarDie[]" value="'.$jantardie.'" ></label>';
    }
?>

But the code to show selected checkbox is not working.

  • You wanna know about data exists in any of these variables? $pequeno, $almoco, $dieta, $lanche, $jantar, $jantardie

  • I put up an image with my calendar and checkbox. I intend that after registering the meals in the database, when I open the calendar again appear the checkbox already selected with the appointments I have already registered. What I want is what you said in your comment above

  • In the $option.='<label class="checkbox-inline"><input type="checkbox" name="DataRegisto[]" value="'.$data.'" ></label>'; only has the checkbox of DataRegisto[]... and the others?

  • The others are $almoco, $dieta, $lanche, $jantar, $jantardie and I have the same way that I have this $option.='<label class="checkbox-inline"><input type="checkbox" name="Pequeno[]" value="'.$pequeno.'" ></label>';, $option.='<label class="checkbox-inline"><input type="checkbox" name="Pequeno[]" value="'.$pequeno.'" ></label>'; and so on. I will edit the question and put all.

  • I understood the following: you are creating the options by pulling the values of the Bank. Until then quiet. But to mark the boxes, you need to buy with something, and that’s what I don’t understand. Where will you get the valuables to make this comparison?

  • I give the initial value to each of the checkboxes, which are DataRegisto, Pequeno, Almoço, Dieta, Lanche, Jantar e JantarDie and then I have to compare with the database table, if on that date there is that value in the table then it puts the selected checkbox.

  • @dvd, can we continue this discussion in chat? I needed to take some questions with you

Show 3 more comments

1 answer

1


You need to create a variable $marcado for each checkbox, and check on in_array separately:

$marcado_pequeno = in_array("Peq. Almoço",$dados2) ? 'checked' : ''; 
$marcado_almoco = in_array("Almoço",$dados2) ? 'checked' : ''; 
$marcado_dieta = in_array("Almoço Dieta",$dados2) ? 'checked' : ''; 
$marcado_lanche = in_array("Lanche",$dados2) ? 'checked' : ''; 
$marcado_jantar = in_array("Jantar",$dados2) ? 'checked' : ''; 
$marcado_jantardie = in_array("Jantar Dieta",$dados2) ? 'checked' : '';


$calendar .= "<td bgcolor='#F5F5F5' align='center' data-semana=''><center><font size='2px'/> 
<input type='checkbox' name='arrachar[$year, $month, $day][dia]' value='$year-$month-$day' $marcado_data> $year-$month-$day <br /> 
<input type='checkbox' name='arrachar[$year, $month, $day][OpcaoA]' value='Peq. Almoço' $marcado_pequeno> Peq. Almoço <br /> 
<input type='checkbox' name='arrachar[$year, $month, $day][opcaoB]' value='Almoço' $marcado_almoco> Almoço <br /> 
<input type='checkbox' name='arrachar[$year, $month, $day][opcaoC]' value='Almoço Dieta' $marcado_dieta> Almoço (Dieta)<br /> 
<input type='checkbox' name='arrachar[$year, $month, $day][opcaoD]' value='Lanche' $marcado_lanche> Lanche<br /> 
<input type='checkbox' name='arrachar[$year, $month, $day][opcaoE]' value='Jantar' $marcado_jantar> Jantar<br /> 
<input type='checkbox' name='arrachar[$year, $month, $day][opcaoF]' value='Jantar Dieta' $marcado_jantardie> Jantar (Dieta)</font></center></td>";

Where $dados2 is the array where you will check the data.

  • I made this change but still do not appear the checkboxes selected according to the database table data

Browser other questions tagged

You are not signed in. Login or sign up in order to post.