#php #mysql #loops
#php #mysql #циклы
Вопрос:
У меня есть скрипт для печати встреч из базы данных mysql, есть 2 цикла foreach, один для печати даты, а другой для печати встреч, связанных с этой датой. Однако второй цикл foreach выводит только первый элемент из каждой даты.
<?php
error_reporting(0);
session_start();
require('sessions.inc.php');
Include('config.inc.php');
if(!isLoggedIn())
{
echo("not logged in");
}
else
{
//form
echo(' <html>
<center><h1>Add new Appontment</h1></center>
<form name="login" action="diary.php" method="post">
Date (YYYY-MM-DD): <input type="text" name="date"/><br>
Time (HH-MM-SS):<input type="text" name="time"/><br>
Description:<input type="descrip" name="descrip"/><br>
Place:<input type="place" name="place"/><br>
<input type="submit" value="sumbit"/>
</form>
</html>
');
//Connect to DB
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
//Get Data from DB
$query = "SELECT id,title,date,time,place FROM tbl_diary GROUP BY date;";
$result = mysql_query($query) or die(mysql_error());
//Get Data from form
$date = mysql_real_escape_string($_POST['date']);
$time = mysql_real_escape_string($_POST['time']);
$descrip = mysql_real_escape_string($_POST['descrip']);
$place = mysql_real_escape_string($_POST['place']);
//insert into DB
if (isset($_POST['date'],$_POST['time'],$_POST['descrip'],$_POST['place']))
{
$insert = "INSERT INTO tbl_diary (date,time,title,place) VALUES ('$date','$time','$descrip','$place')";
if (!mysql_query($insert))
{
die('Error: ' . mysql_error());
}
echo ('New appontment at'.$_POST['place'].'added, On'.$_POST['date'].".<br>");
echo ('<a href="./index.php?page=diary">Please click to reload page</a>');
}
//Intizlize array
$array = array();
//Display appontments
while($input = mysql_fetch_array($result))
{
if (!isset($array[$input['date']]))
{
$array[$input['date']] = array();
}
//put to end of array
$array[$input['date']] []= $input;
}
//The first for each prints each date, The second prints the times.
foreach ($array as $TheDate => $items)
{
$therealdate = date("d-m-Y", strtotime($TheDate));
//welcome to europe MySql
echo '<h1>'.$therealdate.'</h1>';
echo "<ul>";
foreach ($items as $item)
{
echo "<li>{$item['time']}: {$item['title']} "."@ {$item['place']}</li>";
}
echo "</ul>";
}
//exit
echo ('<a href="./main.php">Return to main</a>');
}
?>
Комментарии:
1. На самом деле это только что исправлено, это была добавленная ГРУППА ПО дате в SQL-запросе, хотя не могу понять, как это удалить…
2. под вопросом должна быть ссылка на удаление, если, возможно, она не отключена для n00bz 🙂
3. @Andrew, этот код не помешало бы немного почистить. echo не является функцией, include / require следует использовать как функции. пожимает плечами
4. Спасибо, я это исправил, есть еще отзывы?
5. также под моим вопросом у меня есть флаг редактирования ссылки
Ответ №1:
Проблема в вашей строке запроса mysql.
SELECT id,title,date,time,place FROM tbl_diary GROUP BY date;
Этот запрос захватывает только строку, если даты совпадают.
Попробуйте это:
SELECT id,title,date,time,place FROM tbl_diary;