Autor Zpráva
Jan Žák
Profil
Dobrý den všem,

chtěl bych Vás požádat o radu s tímto problémem, kde si nevím rady. Generuji kalendář a pomocí php a mysql si načtu eventy z db:
  <?php
    $query = "SELECT id, title, start, end, color FROM events"; 
      $result = mysql_query($query) or die(mysql_error());
      $events = mysql_fetch_array($result) or die(mysql_error());
  ?>

po té následuje php vložené v javascriptu:
events: [
<?php foreach($events as $event): 
            
$start = explode(" ", $event['start']);
$end = explode(" ", $event['end']);
if($start[1] == '00:00:00'){
    $start = $start[0];
}else{
    $start = $event['start'];
}
if($end[1] == '00:00:00'){
    $end = $end[0];
}else{
    $end = $event['end'];
}
?>
{
    id: '<?php echo $event['id']; ?>',
    title: '<?php echo $event['title']; ?>',
    start: '<?php echo $start; ?>',
    end: '<?php echo $end; ?>',
    color: '<?php echo $event['color']; ?>',
},
<?php endforeach; ?>
]

toto vyhodí chyby: Illegal string offset 'start', Illegal string offset 'end', Undefined offset: 1, Illegal string offset 'id', Illegal string offset 'title', Illegal string offset 'color'

Nevím si s tím rady, pomohl by někdo? Děkuji moc.
Honza
Fisir
Profil
Reaguji na Jana Žáka:
Funkce mysql_fetch_array() vrací vždy data jednoho řádku. Musíš použít cyklus while, kde při každé jeho iteraci dostaneš další řádek:

events: [
<?php while($event = mysql_fetch_array($result)): 
            
$start = explode(" ", $event['start']);
$end = explode(" ", $event['end']);
if($start[1] == '00:00:00'){
    $start = $start[0];
}else{
    $start = $event['start'];
}
if($end[1] == '00:00:00'){
    $end = $end[0];
}else{
    $end = $event['end'];
}
?>
{
    id: '<?php echo $event['id']; ?>',
    title: '<?php echo $event['title']; ?>',
    start: '<?php echo $start; ?>',
    end: '<?php echo $end; ?>',
    color: '<?php echo $event['color']; ?>',
},
<?php endwhile; ?>
]

Dále připomínám, že funkce mysql_* jsou zastaralé a v PHP 7 už odstraněné.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: