|
|
|
|
|
для: confirm
(11.09.2014 в 19:12)
| | Спасибо. Так и есть. Работает. | |
|
|
|
|
|
|
|
для: davidoff_72
(11.09.2014 в 18:29)
| | Для открытия файла CHM в windows уже все есть, иначе бы он вообще не открылся, а был бы запрос приложения.
Скорее всего он у вас заблокирован, поэтому и не видно содержания. Щелкните по нему правой кнопкой мышки, выберите Свойства, если во вкладке Общие будет предупреждение и кнопка Разблокировать, разблокируйте. | |
|
|
|
|
|
|
|
для: confirm
(11.09.2014 в 04:20)
| | Скачал. Но, странное дело - фаил есть, оглавление есть а вот наполнения нету. нажимаю на документ в каталоге и ничего не вижу, нет содержимого. у меня подозрение, что на моём компьютрере не установлена какая то программа для раскрытия данного файла. Или не знаю. | |
|
|
|
|
|
|
|
для: davidoff_72
(11.09.2014 в 03:24)
| | А зачем готовить документ Word для изучения? На официальном сайте есть руководство РНР в формате CHM, русское, скачайте и пользуйтесь. В нем есть и оглавление, и поиск, и примеры, и с подсветкой кода. Уж во всяком случае намного удобнее простого тестового документа. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 14:39)
| | Большое спасибо! всё красиво работает!
Изучаю код: все не понятные мне значения копирую в вордовский фаил и вставляю описание из документации. Работаю как учёный , разбирая экземпляр на детали и изучая их. Изучив данный код, планирую добавить в него ещё несколько сущностей (таблиц) и адаптировать под свои нужды.
Изучаю проектирование баз данных.
Спасибо. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 14:39)
| | Да. нашел! Спасибо!
Прошу прощения, не заметил прикрепелнный фаил. Сажусь разбираться.
Спасибо! | |
|
|
|
|
|
|
|
для: confirm
(03.09.2014 в 19:02)
| | Да. нашел! Спасибо!
прошу прощения, не заметил прикрепелнній фаил. Сажусь разбираться.
Спасибо! | |
|
|
|
|
|
|
|
для: davidoff_72
(06.09.2014 в 14:28)
| | If - это условие (если) и если необходимо проверить что-то по условию, то и пишется. А то, что вложение условий в условиях, так в этом ничего страшного нет.
Я же вам прикрепил целый мини-проект о фирмах и клиентах вместо коров, вы что по ссылке не читали? | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 14:20)
| | Ранее (выше) вы писали. я заметил, что много if в if. Возможно у меня ещё недостаточно знаний.
<?php
//запрос от формы
//извлекаем id буренки, это последний элемент формы - кнопка
//усекая POST массив в конце - array_pop()
//и если приведение к integer будет не равно 0, то запись в базу
if($_POST && $cid = (int)array_pop($_POST)) {
//это ID буренки, которую редактируем
echo $cid.'<br><pre>'; //это просто для визуального контроля, после просмотра удалить
//так выглядит массив полученных данных после извлечения из него поля хранящего ID буренки
//в нем отсутствует поле fld-4
print_r($_POST); //это просто для визуального контроля, после просмотра удалить
//извлекаем из него данные новых назначений
$vet = array_diff(array_map('intval', array_pop($_POST)), array(0));
//теперь полученные POST-данные содержат только то, что надо записать в таблицу cow - поля fld-1 и fld-2
print_r($_POST); //это просто для визуального контроля, после просмотра удалить
//а массив новых назначений (ID лекарств) для записи в таблицу appoint
print_r($vet); //это просто для визуального контроля, после просмотра удалить
echo '</pre>'; //это просто для визуального контроля, после просмотра удалить
//массив имен полей таблицы cow
$fields = array('fld-1'=>'description', 'fld-2'=>'yields');
//получаем имена полей, добавляя имя поля даты осмотра
$fields = array_intersect_key($fields, $_POST)+array('vet_date');
//защита и добавление текущей даты
$_POST = array_map('mysql_real_escape_string', $_POST)+array(date('Y-m-d H:i'));
//обновляем таблицу cow
if(mysql_query('UPDATE cow SET '.implode(',', array_map('set_update_vars', $fields, $_POST)).' WHERE cid='.$cid)) {
//запись новых назначений, если есть для записи действительные - не равные 0
if($vet) {
//сперва удалим старые
if(mysql_query('DELETE FROM appoint WHERE cid='.$cid)) {
//записываем новые назначения
if(!mysql_query('INSERT INTO appoint VALUES ('.$cid.','.implode('),('.$cid.',', $vet).')')) echo 'Ошибка';
} else echo 'Ошибка';
}
} else echo 'Ошибка';
}
//вывод списка
if(!$_GET || $_POST) {
//получаем содержимое таблицы cow,
//а назначения (названия лекарств)
//получаем из таблицы veterinary
//через связанную таблицу appoint
//путем объединения этих трех таблиц в запросе
$q = mysql_query('SELECT *
FROM cow
LEFT JOIN appoint t2
USING(cid)
LEFT JOIN veterinary t3
ON t2.mid=t3.mid');
if($q) {
if(mysql_num_rows($q)) {
?>
<table>
<tr>
<th>№</th>
<th>Имя</th>
<th>Надои<em>, л.</em></th>
<th>Последний осмотр</th>
<th>Назначение</th>
</tr>
<?
//результат запроса может содержать несколько записей, более чем буренок
//ID буренок, имена, их надои и даты осмотра нужно вывести один раз,
//но эти данные присутствуют в каждой записи полученного результата
//поэтому устанавливаем внешнюю по отношению к циклу переменную $cid,
//по которой будем определять один проход для этих данных
$cid = 0;
while($r = mysql_fetch_object($q)) {
//для того чтобы понять почему так организован вывод таблицы
//можно визуально просмотреть что возвращает запрос
//сколько записей и что они содержат
//такой же конструкцией как и при записи
//после просмотра удалив
echo '<pre>';
print_r($r);
echo '</pre>';
//непосредственно вывод таблицы
if($cid != $r->cid) {
$cid = $r->cid; //первый проход цикла для буренки
//добавляем в таблицу все кроме лекарств, предварительно закрывая предыдущую строку таблицы
$tbl .= '</tr><tr><td>'.$cid.'</td><td><a href="edit.php?id='.$cid.'">'.htmlspecialchars($r->name).
'</a></td><td>'.$r->yields.'</td><td>'.date('j.n.Y H:i', strtotime($r->vet_date)).'</td><td>';
}
//вывод в последнюю ячейку строки таблицы всех назначений
$tbl .= htmlspecialchars($r->remedy).'<br>';
}
echo $tbl.'</tr></table>';
} else echo 'В базе записей о буренках нет.';
} else echo 'Ошибка запроса!';
}
//получение формы редактирования
if(!$_POST && $cid = (int)$_GET['id']) {
//если параметр запроса число и не равно нулю, вывод
//получаем все характеристики запрашиваемой буренки
if($q = mysql_query('SELECT * FROM cow WHERE cid='.$cid)) {
if(mysql_num_rows($q)) { //есть такая буренка
//это массив данных о буренке
$r = $mysql_fetch_object($q);
//получаем список лекарств
//и вложенным запросом получаем значение 1 (по условию IF для него), для тех ID лекарств (mid),
//которые есть и в таблице назначений appoint для редактируемой буренки
//если в ней не будет такого ID лекарства, что есть и в таблице veterinary,
//то условие вернет не 1, а 0
//этому возвращаемому значению присвоим псевдоним slc
//и при выводе списка назначений по значению slc
//будем знать, назначено ли на данный момент то или иное лекарство из списка для буренки
if($q = mysql_query('SELECT *, IF((SELECT 1 FROM appoint WHERE cid='.$cid.' AND mid=t1.mid), 1, 0) slc FROM veterinary t1')) {
//вывод формы
$f = '<form method="post">
<label>Имя: '.htmlspecialchars($r->name).'</label>
<label>Приметы: '.htmlspecialchars($r->signs).'</label>
<label>Описание:</label><textarea name="fld-1">'.htmlspecialchars($r->description).'</textarea>
<label>Надои: <input name="fld-2" value="'.$r->yields.'" /> л.</label>
<label>Дата последнего осмотра: '.date('j.n.Y H:i', strtotime($r->vet_date)).'</label>
<label>Лекарства:</label>';
//добавляем в форму список лекарств, а так как они содержат еще и описания,
//то новый выбор для назначений будет осуществляться массивом флажков
while($s = $mysql_fetch_object($q)) $f .= '<label><input type=checkbox name="fld-3[]" value='.$s->mid.($s->slc ? ' checked' : null).' />'.
htmlspecialchars($s->remedy).' <em>'.htmlspecialchars($s->descript).'</em></label>';
echo $f.'<br><br><button name="fld-4" value='.$cid.'>Отправить</button></form>';
} else echo 'Ошибка запроса!';
}
} else echo 'Ошибка запроса!';
}
//формирование строки параметров/значений для обновления
function set_update_vars($k, $v) {
return $k.'="'.$v.'"';
}
?>
|
| |
|
|
|
|
|
|
|
для: davidoff_72
(06.09.2014 в 14:14)
| | В каком коде, в последнем что я оставил? | |
|
|
|
|