обновление данных

V1taliy

Новичок
обновление данных

Здравствуйте!
возникла проблема такого характера
пишу форму для обновление данных в бд

PHP:
$query = "SELECT *  FROM models  
JOIN firm ON models.codfirm =  firm.codfirm
JOIN korpus ON models.codkorpus = korpus.codkorpus";
$res = mysql_query( $query );
echo '<table align="center" cellpadding="3" CELLSPACING="0" width="90%"  border="3" bordercolor="#66CCCC">';
echo '<tr>';
echo '<td align="center" <FONT size="4" color="100088"><strong>Мод</td>';
echo '<td align="center" <FONT size="4" color="100088"><strong>Фирма</td>';
echo '</tr>';

while($pole = mysql_fetch_array( $res ))
{
echo '<tr>';
echo '<td align="center" <FONT size="3" color="100088">'.$pole['mod'].'</td>';
echo '<td align="center" <FONT size="3" color="100088">'.$pole['firm'].'</td>';
echo '<td align="center" <FONT size="3" color="100088"><a href="'.$_SERVER['PHP_SELF'].'?action=form&id='.$pole['id'].'">Редактировать</a></td>';
echo '</tr>';
вот сама форма
PHP:
$query = "SELECT *  FROM models
JOIN firm ON models.codfirm =  firm.codfirm
JOIN korpus ON models.codkorpus = korpus.codkorpus
  WHERE id=".$_GET['id'];

$res = mysql_query( $query );
$pole = mysql_fetch_array( $res );
echo '<form name="form" action="'.$_SERVER['PHP_SELF'].'?action=update&id='.$_GET['id'].'" method="POST">';
echo '<table width="40%" BORDER=3 CELLPADDING=0 bgcolor="#F5FFFA" CELLSPACING=0  BORDERCOLOR="#66CCCC" >';
echo '<br>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Мод</strong></td>';
echo '<td><input type="text" name="model" size="20" value="'.$pole['mod'].'"></td></tr>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Фирма</strong></td>';
echo '<td width="30%">
<SELECT name="firm">
<OPTION value="">
<OPTION value="1">a
<OPTION value="2">b
<OPTION value="3">c
<OPTION value="4">d
<OPTION value="5">i
<OPTION value="6">f
<OPTION value="7">g
</SELECT></td></tr>';
как мне прописать условие что бы при выводе формы в поле <SELECT > выбиралось запись из таблицы которую я редактирую а не пустая строка?
 

Фанат

oncle terrible
Команда форума
Не в такой форме, но в чем-то предыдущий оратор был прав.
Напиши HTML (Не РНР, а HTML) код селекта (только селекта и ничего больше), того, который есть сейчас, и того, который хочешь получить после выбора

-~{}~ 14.04.10 15:27:

надо заметить, что к mysql проблема не имеет отношения, поскольку и при отсутствии базы данных вовсе, вопрос был бы тот же самый.
вся задача сводится к
а) проектированию желаемого HTML
б) выводу спроектированного HTML кода средствами РНР
 

V1taliy

Новичок
*****

значит смысл в чем
Код:
<SELECT name="firm">
<OPTION value="">
<OPTION value="1">a
<OPTION value="2">b
<OPTION value="3">c
<OPTION value="4">d
<OPTION value="5">i
<OPTION value="6">f
<OPTION value="7">g
</SELECT>
по умолчанию он выводит пустое поле

когда я нажимаю кнопку отредактировать мне нужно что бы запись из строки (например фирма "b") автоматически была вместо пустого поля в форме для редактирования тоесть
Код:
<SELECT name="firm">
<OPTION value="">
<OPTION value="1">a
<OPTION value="2" SELECTED>b
<OPTION value="3">c
<OPTION value="4">d
<OPTION value="5">i
<OPTION value="6">f
<OPTION value="7">g
</SELECT>
вот в чем суть вопроса

большое спасибо модератору за чистку ненужного флуда!!
 

zerkms

TDD infected
Команда форума
V1taliy
раздели задачу на 3 подзадачи:

1. нажатие кнопки и обработка входных данных
2. получение данных из базы на основе данных п.1
3. формирование вывода на основе данных п.2

решай задачи по очереди
 

V1taliy

Новичок
zerkms

пункт 1 и2 я выполнил просто суда не вписал по причине отсутствия необходимости это писать, вот как раз насчет пункта 3 и возник вопрос поэтому и создал эту тему
 

Фанат

oncle terrible
Команда форума
V1taliy
очень хорошо.
теперь у тебя есть задача.
есть переменная
есть две строки, <OPTION value="2">b и <OPTION value="2" SELECTED>b
нужно в зависимости от значения переменной вывести ту или иную строку.

затем повторить для всех остальных опций
что в этом сложного?
 

zerkms

TDD infected
Команда форума
V1taliy

условия делаются через if
вывод делается через echo

в чём конкретно у тебя проблемы?

если пункты 1 и 2 уже решены, тогда зачем нас запутывать ненужными деталями?
 

V1taliy

Новичок
zerkms
детали выдал для лучшего понимания сути

Код:
$k=$pole['firm'];
if($k==1){
echo'<SELECT name="korpus">
<OPTION value="1">Классический</option>
<OPTION value="2">Слайдер</option>
<OPTION value="3">Раскладной</option>
</SELECT>';
}
elseif($k==2){
echo'<SELECT name="korpus">
<OPTION value="1" SELECTED>Классический</option>
<OPTION value="2">Слайдер</option>
<OPTION value="3">Раскладной</option>
</SELECT>';
}
я предпологаю что можно сделать вот так но я уверен что есть менее громоздкий вариант для записи

-~{}~ 14.04.10 16:37:

извеняюсь при if($k==1){ забыл указать SELECTED>слайдер</option>
 

zerkms

TDD infected
Команда форума
я предпологаю что можно сделать вот так но я уверен что есть менее громоздкий вариант для записи
с этого своего варианта и нужно было начинать :)

а теперь - выдели option'ы в массив вида

$options = array(1 => 'Классический', 'Слайдер', 'Раскладной');

И с помощью foreach сделай такой же вывод, но в цикле. Для начала без selected. Резльтат - сюда, если не догадаешься, как сделать.
 

Фанат

oncle terrible
Команда форума
все правильно полагаешь
и что можно сделать так, и что можно сделать менее громоздко.

заметь, весь текст у тебя остается неизменным, а меняется только слово SELECTED
может быть, только его выводить по условию?
для этого, разумеется, придется выводить HTML не единственным оператором echo. А по отдельности.
Но учитывая, что HTML, вообще-то, встраивается прямо в PHP, то и выводить ничего не надо.
берешь и пишешь

?>
<SELECT name="firm">
<OPTION value="">
<OPTION value="1">a
<OPTION value="2">b
<OPTION value="3">c
<OPTION value="4">d
<OPTION value="5">i
<OPTION value="6">f
<OPTION value="7">g
</SELECT></td></tr>
<?
и теперь добавляешь РНР код только там, где он нужен
 

V1taliy

Новичок
zerkms и
*****

большое вам спасибо! сяду разбираться с циклом и вечером представлю результат! еще раз огромное спасибо

-~{}~ 14.04.10 18:24:

я предполагаю что заменой для
Код:
echo'<SELECT name="korpus">
<OPTION value="1">Классический</option>
<OPTION value="2">Слайдер</option>
<OPTION value="3">Раскладной</option>
</SELECT>';
может служить
Код:
<?php
$options = array(1 =>  'Классический',2 =>  'Слайдер', 3 => 'Раскладной');
echo'<SELECT name="firm">';
foreach ($options as $key => $value)
{
echo "<OPTION value=$key>$value</option>";
}
echo'</SELECT>';
?>
поправьте пожалуйста если я не правильно сделал , а если правильно как теперь мне реализовать условие для SELECTED>Классический

-~{}~ 14.04.10 18:47:

да нашел недочет можно прописать только
$options = array(1 => 'Классический','Слайдер', 'Раскладной');
а дальше он сам будет нумеровать индекс этого элемента

-~{}~ 14.04.10 19:11:

да! классная вещь! так можно и таблицу на экран выводить не каждую строчку писать а в цикле вывести
 

zerkms

TDD infected
Команда форума
поправьте пожалуйста если я не правильно сделал , а если правильно как теперь мне реализовать условие для SELECTED>Классический
всё ок.
а теперь напиши if с условием что $key равен необходимому и если так - выводи selected="selected"
 

V1taliy

Новичок
zerkms

с условием все ясно
Код:
if($key==1)
{
}
а вот про вывод selected="selected" я не совсем понимаю как мне это реализовать
 

zerkms

TDD infected
Команда форума
PHP:
echo '<OPTION value=' . $key;

if ($key == 1)
{
    echo ' selected="selected"';
}

echo '>' . $value . '</option>';
тебе уже стыдно? :)
 

V1taliy

Новичок
да да)) понял спасибо

последний вопрос по этой теме

какая разница между выводом таблицы через foreach

Код:
$query = "SELECT *,DATE_FORMAT(date,'%d.%m.%Y')  as dategood  FROM models JOIN firm ON models.codfirm =  firm.codfirm JOIN korpus ON models.codkorpus = korpus.codkorpus";
$res = mysql_query( $query );
echo '<table align="center" cellpadding="3" CELLSPACING="0" width="90%"  border="3" bordercolor="#66CCCC">';
$head = array('Модель','Фирма','Тип корпуса','Дата выхода');
echo '<tr>';
foreach ($head as $value)
{
echo '<td align="center" <FONT size="4" color="100088"><strong>'.$value.'</td>';
}
echo '</tr>';
и просто прописывая каждое поле
Код:
$query = "SELECT * FROM models
JOIN firm ON models.codfirm =  firm.codfirm
JOIN korpus ON models.codkorpus = korpus.codkorpus";
$res = mysql_query( $query );
echo '<table align="center" cellpadding="3" CELLSPACING="0" width="90%"  border="3" bordercolor="#66CCCC">';
echo '<tr>';
echo '<td align="center" <FONT size="4" color="100088"><strong>Модель</td>';
echo '<td align="center" <FONT size="4" color="100088"><strong>Фирма</td>';
echo '<td align="center" <FONT size="4" color="100088"><strong>Тип корпуса</td>';
echo '<td align="center" <FONT size="4" color="100088"><strong>Дата выхода</td>';
echo '</tr>';
просто мне черех foreach удобнее, но везде где я читал выводили просто через таблицу прописывая каждое поле, какой способ лучше использовать?
 

zerkms

TDD infected
Команда форума
разницы никакой. как удобнее - так и делай.
 

Фанат

oncle terrible
Команда форума
разумеется, что там, где нужен просто HTML, и надо использовать HTML. безо всякого PHP.
 

V1taliy

Новичок
***** да я понимаю что надо отделать html формы от php просто в моем случая я вывожу форму в таблицу куда заношу вывод из php

Код:
<?
function form()// Функция формирует форму для редактирования записи в таблице БД
{
$query = "SELECT * ,DATE_FORMAT(date,'%d.%m.%Y')  as dategood FROM models
JOIN firm ON models.codfirm =  firm.codfirm
JOIN korpus ON models.codkorpus = korpus.codkorpus
  WHERE id=".$_GET['id'];

$res = mysql_query( $query );
$pole = mysql_fetch_array( $res );
echo '<form name="form" action="'.$_SERVER['PHP_SELF'].'?action=update&id='.$_GET['id'].'" method="POST">';
echo '<table width="40%" BORDER=3 CELLPADDING=0 bgcolor="#F5FFFA" CELLSPACING=0  BORDERCOLOR="#66CCCC" >';
echo '<br>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Модель</strong></td>';
echo '<td><input type="text" name="model" size="20" value="'.$pole['model'].'"></td></tr>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Тип корпуса</strong></td>';
echo '<td>';
$k=$pole['codkorpus'];
$options = array('ошибочка','Классический','Слайдер','Раскладной');
echo'<SELECT name="korpus">';
foreach ($options as $key => $value)
{
echo '<OPTION value=' . $key;

if ($key == $k)
{
    echo ' selected="selected"';
}
echo '>' . $value . '</option>';
}
echo'</SELECT>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Дата выхода (дд.мм.гггг)</strong></td>';
echo '<td><input type="text" size="10" maxlength="10" name="date" value="'.$pole['dategood'].'"</td></tr>';
echo '<tr><td  <FONT size="3" color="100088"><strong>EDGE</strong></td>';
echo '</td></tr>
</table>
?>
-~{}~ 15.04.10 22:05:

так что пришлось скрестить php и html . а вообще большое вам всем спасибо за помощь! при много благодарен
 

dimagolov

Новичок
PHP:
echo '<form name="form" action="'.$_SERVER['PHP_SELF'].'?action=update&id='.$_GET['id'].'" method="POST">';
echo '<table width="40%" BORDER=3 CELLPADDING=0 bgcolor="#F5FFFA" CELLSPACING=0  BORDERCOLOR="#66CCCC" >';
echo '<br>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Модель</strong></td>';
echo '<td><input type="text" name="model" size="20" value="'.$pole['model'].'"></td></tr>';
echo '<tr><td  <FONT size="3" color="100088"><strong>Тип корпуса</strong></td>';
echo '<td>';
сравни с:
PHP:
?>
<form name="form" action="<?= $_SERVER['PHP_SELF']; ?>?action=update&id=<?= htmlspecialchars(urlencode($_GET['id'])); ?>" method="POST">
<table width="40%" BORDER=3 CELLPADDING=0 bgcolor="#F5FFFA" CELLSPACING=0  BORDERCOLOR="#66CCCC" >
<br>
<tr><td  <FONT size="3" color="100088"><strong>Модель</strong></td>
<td><input type="text" name="model" size="20" value="<?= htmlspecialchars($pole['model']); ?>"></td></tr>
<tr><td  <FONT size="3" color="100088"><strong>Тип корпуса</strong></td>
<td>
<?
что читабельней и где меньше головняка с кавычками? кроме того, что я корректно заэскейпил выводимые значения
 
Сверху