Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Списки с перечнем данных
 
 автор: romu4-   (28.04.2009 в 02:18)   письмо автору
61.4 Кб
 
 

Грамотные люди, помогите пожалуйста!
В базе данных имеется две связных таблицы (тип таблиц InnoDB MySQL)
1) orgs:
* id_org (a_inc)
name_org
adress
.....
2) users:
*id_user (a_inc)
fio_user
.....
id_org

orgs.id_org* является внешним ключом для users.id_org

Необходимо чтобы в разрабатываемой форме ввода данных "users" при вводе информации поле id_org выводилось в виде раскрывающегося списка с перечнем организаций (name_org), а не первичных ключей *id_org. При этом в таблицу users должны вноситься только id_org.

Посмотрите приложенное изображение, там яснее будет.
Посоветуйте способ реализации новичку.

  Ответить  
 
 автор: Trianon   (28.04.2009 в 07:59)   письмо автору
 
   для: romu4-   (28.04.2009 в 02:18)
 

Вот ведь нравятся мне такие формулировки.
Вы напишите код, который строит этот раскрывающийся список пусть даже с перечнем первичных ключей.
Уверяю Вас, чтобы исправить его на перечень наименований организаций, нужно будет в одном месте заменить id_org на name_org и ничего больше.

  Ответить  
 
 автор: romu4-   (28.04.2009 в 11:01)   письмо автору
 
   для: Trianon   (28.04.2009 в 07:59)
 



<?php

//"Защита от хостингов не поддерживающих прямую передачу переменных"

if (isset($_POST['fio_user']))
{
$fio_user $_POST['fio_user'];
}

if (isset(
$_POST['contact']))
{
$contact $_POST['contact'];
}

if (isset(
$_POST['id_org']))
{
$id_org $_POST['id_org'];
}

//Соединение с базой даных

require_once ("config.php");

//Посылка запроса и ввод информации

$query "INSERT INTO users ( fio_user, contact, id_org) VALUES
         ( '
$fio_user', '$contact', '$id_org')";

// id_org в таблице orgs является первичным ключом

$result mysql_query ($query$dbcon);

if (
$result == 'true')
{
echo 
"Информация о новом пользователе оборудования успешно добавлена!!!";
}
else 
{
echo 
"Ошибка! Информация о новом пользователе оборудования не добавлена!!!";
}

?>

------------------------------------------------------------------------------------------------------------------------------
А это форма для ввода информации  в таблицу Users

<body>

<form action="/users_insert.php" method="post" name="form">
<p>Ф.И.О. пользователя оборудования<br> <input name="fio_user" type="text" size="50" maxlength="50" /> 
</p>
<p>Контактная информация пользователя оборудования<br> <textarea name="contact" cols="50" rows="5"></textarea> 
</p>
<p>Организация пользователя оборудования<br> <select name="id_org">

// Здесь нужно сформировать динамически строящийся выпадающий список с перечнем названий организаций. При выборе имени организации необходимо чтобы в таблицу user вносилось не имя организации а ее id_org. 

</select> </p>

<p><input name="submit" type="submit" value="Добавить пользователя" /> </p>
</form>

  Ответить  
 
 автор: Trianon   (28.04.2009 в 12:15)   письмо автору
 
   для: romu4-   (28.04.2009 в 11:01)
 

<?php

 $res 
=  mysql_query($sql "SELECT * FROM orgs");
 if(!
$res) exit("Error in $sql : "mysql_error());

 while( 
$row mysql_fetch_assoc($res) )
     echo 
"<option value =\"$row[id_org]\">".htmlspecialchars($row['name_org'])."</option>\r\n";
?>

  Ответить  
 
 автор: romu4-   (28.04.2009 в 14:43)   письмо автору
26 Кб
 
   для: Trianon   (28.04.2009 в 12:15)
 

Спасибо огромное, Trianon, все отлично работает!!!
Все просто оказалось а я там такое понавыдумывал...

<form action="/users_insert.php" method="post" name="form">
<p>Ф.И.О. пользователя оборудования<br> <input name="fio_user" type="text" size="50" maxlength="50" /> 
</p>
<p>Контактная информация пользователя оборудования<br> <textarea name="contact" cols="50" rows="5"></textarea> 
</p>
<p>Организация пользователя оборудования<br>
   <select name="id_org">
   <?php
    
// Соединение с базой даных
    
require_once ("config.php");
    
    
$sql "SELECT * FROM orgs";
    
$res =  mysql_query($sql$dbcon);
    
    if(!
$res) exit("Error in $sql : "mysql_error());
    while( 
$row mysql_fetch_assoc($res) )
    echo 
"<option value =\"$row[id_org]\">".htmlspecialchars($row['name_org'])."</option>\r\n";
    
?> 
    </select> </p>

<p><input name="submit" type="submit" value="Добавить пользователя" /> </p>
</form>

  Ответить  
 
 автор: romu4-   (01.05.2009 в 12:46)   письмо автору
40.8 Кб
 
   для: Trianon   (28.04.2009 в 12:15)
 

Trianon,
подскажите в чем проблема!
Я пытаюсь на форме ввода данных использовать два динамически формирующихся меню SELECT. Использую тот же метод, что вы мне показали ранее, но данные не добавляются в БД. Происходит ошибка. Может быть нельзя дважды применять функцию "mysql_fetch_assoc"? Если это так, то мне наверное следует применять функцию "mysql_fetch_array"?

Привожу два листинга, чтобы Вам было яснее...

Форма для ввода данных:


<body>

<div align="center"><span class="стиль1">Добавление нового зарядного устройства</span></div>

<form action="/charger_insert.php" method="post" name="form">

<p>Инвентарный номер зарядного устройства <br> <input name="num_inv" type="text" size="30" maxlength="30" /> </p>
<p>Модель зарядного устройства <br>
 
   <select name="c_model">
    <?php
    
// Соединение с базой даных
    
require_once ("config.php");
    
    
$sql "SELECT c_model FROM c_models";
    
$res =  mysql_query($sql$dbcon);
    
    if(!
$res) exit("Error in $sql : "mysql_error());
    while( 
$row mysql_fetch_assoc($res) )
    echo 
"<option value =\"$row[c_model]\">".htmlspecialchars($row['c_model'])."</option>\r\n";
    
?> 
    </select> </p>

<p>Дата ввода в эксплуатацию зарядного устройства <br> <input name="date_fu" type="text" size="30" maxlength="30" /> </p>
<p>Дата вывода из эксплуатации зарядного устройства <br> <input name="date_lu" type="text" size="30" maxlength="30" /> </p>
<p>Статус зарядного устройства <br>
  <select name="status">
  <option value="Выдано">Выдано</option>
  <option value="Готово к выдаче">Готово к выдаче</option>
  <option value="Проходит ТО">Проходит ТО</option>
  <option value="Не исправно">Не исправно</option>
  <option value="Списано">Списано</option>
  </select> </p>
<p>Пользователь зарядного устройства <br>
 
   <select name="id_user">
    <?php
    
// Соединение с базой даных
    
require_once ("config.php");
    
    
$sqlu "SELECT id_user, fio_user FROM users";
    
$resu =  mysql_query($sqlu$dbcon);
    
    if(!
$resu) exit("Error in $sqlu : "mysql_error());
    while( 
$rowu mysql_fetch_assoc($resu) )
    echo 
"<option value =\"$rowu[id_user]\">".htmlspecialchars($rowu['fio_user'])."</option>\r\n";
    
?> 
    </select> </p>

 <input name="submit" type="submit" value="Добавить" />

</form>
</body>

 


Файл РНР для записи данных в БД, получает данные из формы. В нем я специально применил вывод полученной информации на экран, чтобы увидеть, что данные до формы доходят. Они до формы доходят! Сделал скриншот, поглядите. Но при выполнении запроса возникает какая-то ошибка и данные не вносятся в БД.



<body>

<?php

//"Защита от хостингов не поддерживающих прямую передачу переменных"

if (isset($_POST['num_inv']))
{
$num_inv $_POST['num_inv'];
}


if (isset(
$_POST['c_model']))
{
$c_model $_POST['c_model'];
}

if (isset(
$_POST['date_fu']))
{
$date_fu $_POST['date_fu'];
}

if (isset(
$_POST['date_lu']))
{
$date_lu $_POST['date_lu'];
}

if (isset(
$_POST['status']))
{
$status $_POST['status'];
}

if (isset(
$_POST['id_user']))
{
$id_user $_POST['id_user'];
}

echo 
$num_inv;
echo 
$c_model;
echo 
$date_fu;
echo 
$date_lu;
echo 
$status;
echo 
$id_user;

//Cоединение с базой даных

require_once("config.php");

//Добавление информации в базу данных

$query "INSERT INTO charger (num_inv, c_model, date_fu, date_lu, status, id_user)
         VALUES('
$num_inv', '$c_model', '$date_fu', '$date_lu', '$status', '$id_user')";

$result mysql_query ($query$dbcon);

if (
$result == 'true')
{
echo 
"Информация о новом зарядном устройстве для радиостанций успешно добавлена!!!";
}
else 
{
echo 
"Ошибка! Информация о новом зарядном устройстве для радиостанций не добавлена!!!";
}

?>

</body>

 

  Ответить  
 
 автор: Trianon   (01.05.2009 в 12:55)   письмо автору
 
   для: romu4-   (01.05.2009 в 12:46)
 

После последнего вызова mysql_query (INSERT) нужно проверять результат запроса точно также, как я показал для запросов (SELECT)

  Ответить  
 
 автор: romu4-   (01.05.2009 в 13:41)   письмо автору
44.1 Кб
 
   для: Trianon   (01.05.2009 в 12:55)
 

Пишет следующую ошибку:
" Incorrect date value: '' for column 'date_lu' at row 1"
Действительно, когда я ввожу дату в поле date_lu запись происходит нормально.
Это странно , ведь. значение данного поля может иметь пустое значение, т.к. при создании таблицы БД я пометил его как NULL (см. фото структуры таблицы)
Может при присвоении нулевого значения переменной $date_lu в нее прописывается пустая строчка не DATE-типа?

  Ответить  
 
 автор: Trianon   (01.05.2009 в 16:13)   письмо автору
 
   для: romu4-   (01.05.2009 в 13:41)
 

пустая строка и неопределенное значение - разные вещи.

вместо фото лучше приклеивать дамп.

  Ответить  
 
 автор: romu4-   (01.05.2009 в 22:27)   письмо автору
 
   для: Trianon   (01.05.2009 в 16:13)
 

А как мне этот дамп увидеть и передать Вам?
Извините за глупый вопрос, но студенты везде одинаковы. ;-)
Знакомлюсь с MySQL и PHP две недели - пишу диплом, поэтому много разных вопросов и недопониманий.

  Ответить  
 
 автор: Arktur   (03.05.2009 в 02:05)   письмо автору
 
   для: romu4-   (01.05.2009 в 22:27)
 

Дамп базы MySQL - это текстовый файл содержащий набор SQL запросов.
В вашем случае INSERT INTO charger VALUES (...);
Я недавно здесь задавал похожий вопрос по проблеме не отправления данных в базу и позволю себе совет.
1) выведите сам SQL запрос, хотя бы print ($query); и посмотрите что вы реально отправляете в базу
2) неплохо бы привести SQL выражение создающее нужную вам таблицу, может проблемы с полями таблицы
3) проверте кодировку таблицы в базе.

  Ответить  
 
 автор: Trianon   (03.05.2009 в 08:17)   письмо автору
 
   для: romu4-   (01.05.2009 в 22:27)
 

Увидеть дамп можно в phpMyAdmin в разделе Экспорт.
В его терминах дамп структуры представляет собой набор операторов CREATE TABLE
Дамп данных - набор операторов INSERT
Полный дамп включает в себя и те и другие операторы.
Архив с дампом можно прикрепить к посту.

  Ответить  
 
 автор: romu4-   (03.05.2009 в 20:51)   письмо автору
 
   для: Trianon   (03.05.2009 в 08:17)
 

Теперь понял, я уже делал прежде экспорт базы данных на второй ПК.
Под дампом в терминологии БД понимается ее структура, я так и подумал изначально, но засомневался в некоторый момент.
Википедия гласит "Термин дамп используется в отношении баз данных для выдачи информации, достаточной для её создания «с нуля» (дамп базы данных)"

При добавлении данных через phpMyAdmin с пустым полем date_lu в запросе передается значение NULL.
Вот так:

INSERT INTO `trunksys`.`charger` (`num_inv`, `c_model`, `date_fu`, `date_lu`, `status`, `id_user`) VALUES ('ацуауц', 'dsf45geh', '2009-05-14', NULL, 'оке', '4');

Нужно сделать чтобы из формы form значение ' ' текстового поля date_lu преобразовывалось к виду NULL, как я понял...

С датами я разобрался (временно) путем ввода значения по-умолчанию 0000-00-00 вместо "NULL" (хотя это далеко не хороший результат), тк появились более важные первоочередные задачи.
Дамп приложу к посту с новым возникшим вопросом.

Спасибо Вам!

  Ответить  
 
 автор: romu4-   (06.05.2009 в 10:59)   письмо автору
5.5 Кб
 
   для: Trianon   (01.05.2009 в 12:55)
 

Здравствуйте, Trianon!
У меня возникла сложность, не могли бы Вы мне снова помочь? Это связано с выпадающим списком select , с которым Вы мне помогли ранее.
Не могу сообразить как сузить набор значений в нем по первоначальным символам. Создавал тему, но там никто серьезный не побывал...
[url]
http://softtime.ru/forum/read.php?id_forum=1&id_theme=64859&page=1
[/url]

Столкнулся с такой сложной для меня задачей.
Помогите, пожалуйста, кто сталкивался с подобным или имеет большой опыт в программировании на PHP.

Есть некоторый динамически формирующийся элемент SELECT. Свое содержимое он берет в связной таблице БД. Предположим, что в некоторый момент элементов списка SELECT стало чрезмерно много, так что выбор элемента стал не удобен. Возникает необходимость сузить существующий огромный список элементов. Это можно сделать , например, осуществив фильтрацию элементов по названию. Т.е. я хочу получить такой список SELECT в котором можно до нажатия стрелочки выбора ввести пару символов, в результате чего в списке будут содержаться только элементы, имеющие в названии такой же порядок символов, что я и ввел.

Встречал подобное в Delphi и C-Builder, а как осуществить в PHP не имею представления ввиду двухнедельного опыта программирования на этом языке.

Привожу код, где хотелось бы получить подобную функцию:



<?php

include ("menu_top.php");

?>

<div align="center" class="StyleForHeader"> <p> <br> </p> <p> Добавление нового пользователя оборудования </p> </div>
     
<form action="/users_insert.php" method="post" name="form">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="11%" align="left" valign="baseline">&nbsp;</td>
    <td width="32%" align="left" valign="baseline">Ф.И.О. пользователя оборудования</td>
    <td width="32%" align="left" valign="baseline"><input name="fio_user" type="text" size="50" maxlength="50" /></td>
    <td width="25%" align="left" valign="baseline">&nbsp;</td>
  </tr>
  <tr>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">&nbsp;</td>
  </tr>
  <tr>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="top">Контактная информация пользователя оборудования</td>
    <td align="left" valign="baseline"><textarea name="contact" cols="50" rows="5"></textarea></td>
    <td align="left" valign="baseline">&nbsp;</td>
  </tr>
  <tr>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">&nbsp;</td>
  </tr>
  <tr>
    <td align="left" valign="baseline">&nbsp;</td>
    <td align="left" valign="baseline">Организация пользователя оборудования</td>
    <td align="left" valign="baseline"><select name="id_org">
      <?php
    
// Соединение с базой даных
    
require_once ("config.php");
    
    
$sql "SELECT * FROM orgs";
    
$res =  mysql_query($sql$dbcon);
    
    if(!
$res) exit("Error in $sql : "mysql_error());
    while( 
$row mysql_fetch_assoc($res) )
    echo 
"<option value =\"$row[id_org]\">".htmlspecialchars($row['name_org'])."</option>\r\n";
    
?>
    </select></td>
    <td align="left" valign="baseline">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="38%" align="center" valign="baseline">&nbsp;</td>
    <td width="24%" align="center" valign="baseline">&nbsp;</td>
    <td width="38%" align="center" valign="baseline">&nbsp;</td>
  </tr>
  <tr>
    <td align="center" valign="baseline">&nbsp;</td>
    <td align="center" valign="baseline"><input name="submit" type="submit" value="Добавить пользователя" /></td>
    <td align="center" valign="baseline">&nbsp;</td>
  </tr>
</table>

</form>

  Ответить  
 
 автор: Trianon   (06.05.2009 в 12:18)   письмо автору
 
   для: romu4-   (06.05.2009 в 10:59)
 

>Есть некоторый динамически формирующийся элемент SELECT. Свое содержимое он берет в связной таблице БД. Предположим, что в некоторый момент элементов списка SELECT стало чрезмерно много, так что выбор элемента стал не удобен. Возникает необходимость сузить существующий огромный список элементов. Это можно сделать , например, осуществив фильтрацию элементов по названию. Т.е. я хочу получить такой список SELECT в котором можно до нажатия стрелочки выбора ввести пару символов, в результате чего в списке будут содержаться только элементы, имеющие в названии такой же порядок символов, что я и ввел.


php не работает ни с какими select'ами , opiion'ами и прочими атрибутами html-страницы. php - серверный язык.
страница отображается браузером. на клиентской машине. Соответствующий язык - JS . Соответствующий раздел форума - правее.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования