#php #mysql
#php #mysql
Вопрос:
—ОТРЕДАКТИРОВАНО, ЧТОБЫ ЛУЧШЕ ОПИСАТЬ СЦЕНАРИЙ—
У меня есть база данных MySQL, содержащая 2 таблицы: technicians и work_orders. В таблице technicians есть столбцы techID, tech_surname, tech_firstname и tech_userlogin. В таблице work_orders, среди прочего, есть столбцы JobID (PK), wtechID, wtech_surname, wtech_firstname и wtech_userlogin.
У меня есть страница с повторяющимся регионом, в котором перечислены отправленные заказы на выполнение работ, дата заказа на выполнение работ — это ссылка, которая передает идентификатор задания в URL-адресе на страницу, содержащую форму обновления. Форма заполняется данными, взятыми из таблицы work_orders, в частности, идентификатором задания (имя клиента, адрес, оборудование для ремонта, проблема и т. Д.). В форме находится выпадающий список, заполненный из таблицы technicians. В этом выпадающем списке перечислены tech_userlogin технических специалистов. Я включил скрытые поля на страницу формы, wtech_userlogin и wtechID. Когда я просматриваю источник страницы, он показывает значения из таблицы work_orders, но я не знаю, как использовать его в запросе для достижения желаемых результатов.
Когда форма публикует, она обновляет таблицу work_orders. Все это работает. Чего я надеюсь добиться, так это того, чтобы значение wtech_userlogin (из таблицы work_orders) для конкретного заказа на работу стало значением по умолчанию в выпадающем меню, если техник уже выбран. Если ранее из выпадающего меню не было сделано никакого выбора, я бы хотел, чтобы по умолчанию в выпадающем списке было «—Выберите техника —«. Я пробовал несколько вещей, но пока ничего не работает.
Вот код для выпадающего списка:
<select name="tech_userlogin" id="tech_userlogin">
<?php
$sql="SELECT techID, tech_userlogin FROM technicians";
$result=mysql_query($sql);
$options="";
while ($row=mysql_fetch_array($result)) {
$techID=$row["techID"];
$tech_userlogin=$row["tech_userlogin"];
$options.="<option value="$tech_userlogin">$tech_userlogin</option>";
}
if(empty($tech_userlogin)) {
die ('You must select a Technician');
}
?>
<option value='<?php echo $options; ?>' selected='selected'>""<?php echo $options; ?>
</select>
Кто-нибудь может мне помочь с этой проблемой? Любая помощь будет оценена. Я новичок в PHP и MySQL. Я прохожу курс веб-дизайна, и мы используем Dreamweaver. Я хочу оторваться от Dreamweaver и узнать, как это сделать без мастеров. Я смог заставить свои формы публиковать, и все мои функции вставки, обновления и удаления работают на основе того, что я смог собрать из Интернета, но это действительно ставит меня в тупик.
Приветствия.
Комментарии:
1. Почему вы используете заглавные буквы для некоторых элементов и атрибутов, а не для других? Это действительно раздражает.
2. Я принял ваше предложение, но нашел вашу доставку немного едкой.
Ответ №1:
Что-то вроде этого — это то, что вы хотите:
<select name="tech_userlogin" id="tech_userlogin">
<?php
$sql="SELECT techID, tech_userlogin FROM technicians";
$result=mysql_query($sql);
while ($row=mysql_fetch_array($result))
{
$techID = $row['techID'];
$tech_userlogin=$row['tech_userlogin'];
// Here - check if the tech id in the query matches the logged in tech's id
$selected = ($techID == $_SESSION['techID']) ? 'selected="selected"' : '';
echo '<option value="' . $tech_userlogin . '" ' . $selected . '>' . $tech_userlogin . '</option>' . "n";
}
?>
</select>
Комментарии:
1. Спасибо за ваш ответ. Что я хочу сделать, это передать значение ранее выбранного tech_userlogin . Например, для задания был назначен технический специалист, но детали задания необходимо изменить. Поэтому, когда страница обновления заполняется, она заполняет выпадающий список этим ранее выбранным значением (tech_userlogin уже выбран). Если технический специалист не был назначен, я хочу, чтобы значение по умолчанию в выпадающем списке было пустым или — Выберите Tech — или что-то в этом роде.
2. Вы могли бы изменить
$techID == $_SESSION['techID']
на$tech_userlogin == $_GET['tech_userlogin']
3. Привет. Это все еще не работает. Когда форма обновления публикуется, она обновляет таблицу work_orders. Значение из выпадающего меню сохраняется как wtech_userlogin в work_orders. techID является скрытым полем в форме и обновляет таблицу work_orders как wtechID. Значение, которое я пытаюсь отобразить в выпадающем поле, — это wtech_userlogin из таблицы work_orders . Нужно ли включать таблицу work_orders в запрос? Если да, то как мне это сделать. Спасибо за вашу помощь. Приветствия.
4. используете ли вы
method="post"
в своей форме? Если да, используйте$_POST['tech_userlogin']
вместо$_GET['tech_userlogin']
. Вы пропустили много данных 🙂5. Я очень новичок в этом. Ситуация такова. У меня есть повторяющийся регион, в котором перечислены все рабочие задания. Когда я нажимаю на рабочий заказ, я перенаправляюсь на страницу обновления с формой. Идентификатор задания (PK таблицы work_orders) передается как URL. Форма обновления заполняется данными, которые соответствуют этому конкретному идентификатору задания. На странице обновления находится выпадающее меню, которое заполняется из другой таблицы в базе данных, технические специалисты. Записи формы и результаты хранятся в таблице work_orders . Я хочу, чтобы выпадающее значение по умолчанию было заполнено значением из таблицы work_orders, wtech_userlogin.
Ответ №2:
Ну, у вашего кода много проблем. Начнем с того, что я не вижу, где вы указываете выбор. Вы должны отправить его в скрипт через post. Затем вы объединяете теги параметров в строку, а затем добавляете эту строку в качестве значения в другой параметр. И, наконец, ваша переменная $tech_userlogin — это значение столбца tech_userlogin последней строки в таблице базы данных technicians.
РЕДАКТИРОВАТЬ 1: пожалуйста, прокомментируйте.
Давайте попробуем это исправить:
<?php
// first thing: check if a post was sent
if($_POST)
{
if(!empty($_POST['technician']))
{
@session_start();
$_SESSION['tech'] = $tech;
}
}
if(!empty($_SESSION['tech']))
{
$tech = $_SESSION['tech'];
}
echo '<form action="" method="post">
$sql = "SELECT `techID`,`tech_userlogin` FROM `technicians`";
$sql = mysql_query($sql);
if(!mysql_num_rows($sql))
{
echo 'There is no technician in the database'; // or use die for radical thinking
}
$options = '';
$technicians = array();
echo '<select name="tech_userlogin" id="tech_userlogin">';
if(empty($tech))
{
echo '<option value="">-- Select technician --</option>';
}
while($row = mysql_fetch_array($sql))
{
$technicians[] = $row;
$options .= '<OPTION VALUE="'.$tech_userlogin.'" '.((!empty($tech) amp;amp; $tech == $tech_userlogin)) ? 'selected="selected"' : '').'>'.$tech_userlogin.'</option>';
}
echo $options;
echo '</select>';
echo '<input type="submit" value="Please submit you selection" />';
echo '</form>';
?>
Надеюсь, это поможет :).
Комментарии:
1. Спасибо, что перезвонили мне. Я думаю, возможно, я не совсем понял, что я хотел бы сделать. tech_userlogin поступает из таблицы technicians . Когда tech_userlogin выбирается из выпадающего списка, это значение затем отправляется в таблицу work_orders, где оно сохраняется как wtech_userlogin вместе с другими деталями конкретного задания. Поэтому, если рабочий заказ редактируется после назначения технологии, я хочу, чтобы значение по умолчанию в раскрывающемся списке было заполнено tech_userlogin, которое соответствует wtech_userlogin из таблицы work_orders для этой конкретной работы. Дайте мне знать, если это понятно. Приветствия
2. Ну, теперь я понял … это потребует немного больше кода. И еще один select или join в инструкции sql. Не могли бы вы немного подробнее объяснить, как выглядит таблица work_orders, я имею в виду, вы могли бы сделать что-то вроде этого: $query = ‘SELECT * FROM
works_order
wherewtech_userlogin
= «‘.$tech_userlogin.'»‘; НО, как вы видите, в этой таблице может быть более одного специалиста. Пожалуйста, предоставьте более подробную информацию.3. Привет, в таблице work_orders есть поле wtech_login, его значение берется из поля таблицы technicians tech_userlogin. Итак, когда tech_userlogin выбирается из выпадающего списка, это значение разносится и сохраняется в таблице work_orders . Я согласен с запросом, но не знаю, как объединить таблицы. techID хранится в work_orders (для конкретного задания) как wtechID, а tech_userlogin как wtech_userlogin. Это то, что вы имеете в виду?