|
|
|
| есть 2 табл.:
1. staff с полями sid, fio и т.д.
2. exp с полями expid, expsid, from, to, post, place, text
имеется вывод резюме в ввиде таблицы в одной из ячеек которой выводится опыт работы, к примеру это несколько строк:
<? $exp = mysql_query ("SELECT * FROM exp WHERE expsid='$cat'",$db);
$ex = mysql_fetch_array ($exp);
do {
printf("<a onClick = window.open('s_expedit.php?expid=%s','','top=200,left=300,width=600,height=300') href=''>ред </a>%s%s <strong>%s</strong> - %s.%s<br>", $ex["expid"], $ex["from"],$ex["to"],$ex["post"],$ex["place"],$ex["text"]);}
while ($ex = mysql_fetch_array($exp));
?>
форма типа:
<?
$expedit = mysql_query("SELECT * FROM exp WHERE expsid='$sid'");
$expe = mysql_fetch_array($expedit);
print <<<HERE
<div style=" text-align:left; padding:10px; line-height:22px;";>
<form name="form1" method="post" action="s_expeditaction.php" class="form_new">
<label><input name="from" type="text" value="$expe[from]" size="5"></label>
<label><input name="to" type="text" value="$expe[to]" size="5"></label><br>
<label><input name="post" type="text" value="$expe[post]" size="60"></label><br>
<label><input name="place" type="text" value="$expe[place]" size="60"></label><br>
<label><textarea name="text" id="text" style="width:500px; height:150px">$expe[text]</textarea></label>
<p><label><input type="submit" name="Submit" id="Submit" value="Сохранить изменения"></label></p>
<label><input name="expsid" type="hidden" value="$expe[expsid]" size="5"></label>
</form></div>
HERE;
?>
и файл обработки:
<? if (isset($from) && isset($to) && isset($post) && isset($place) && isset($text))
{
$result = mysql_query ("UPDATE exp SET from='$from', to='$to', post='$post', place='$place', text='$text' WHERE expsid='$expsid'");
if ($result == 'true') {echo "Сохранено";}
else {echo "Не сохранено!";}
}
else
{echo "<p>не вся инфо вбита</p>";}
?> <br>
никак не могу понять как можно редактировать каждую строку табл. exp | |
|
|
|
|
|
|
|
для: buykz
(24.03.2010 в 13:14)
| | а как код в форуме показывать, Вы можете понять? | |
|
|
|
|
|
|
|
для: Trianon
(24.03.2010 в 20:47)
| | трояну
я новичок, но то что написал понимаю полностью, возможно какому-то новичку тоже поможет
может не правильно сформулировал. мне нужно сделать чтобы по ссылке в резюме отрывалось маленькое окошко с данными строки другой таблицы в данном случае exp | |
|
|
|
|
|
|
|
для: buykz
(25.03.2010 в 12:14)
| | >трояну
так его!:))) | |
|
|
|
|
|
|
|
для: buykz
(25.03.2010 в 12:14)
| | >может не правильно сформулировал....
имелось ввиду оформление кода в сообщении. используйте теги оформления
используя code , получите в сообщении код с подсветкой, тогда будет удобней читать... | |
|
|
|
|
автор: ..... (25.03.2010 в 13:14) |
|
|
для: buykz
(24.03.2010 в 13:14)
| | from и to зарезервированные слова. Такие названия полей таблицы в запросе можно использовать только в обратных кривых кавычках | |
|
|
|
|
|
|
|
для: buykz
(24.03.2010 в 13:14)
| | >никак не могу понять как можно редактировать каждую строку табл. exp
что именно Вы имели ввиду? У Вас не обновляются записи?
исправте эту строку
<?php
if (isset($from) && isset($to) && isset($post) && isset($place) && isset($text))
?>
|
на
<?php
if (isset($_POST['from']) && isset($_POST['to']) && isset($_POST['post']) && isset($_POST['place']) && isset($_POST['text']))
?>
|
если Вы хотите использовать переменные из формы так как Вы это делаете, то для начала надо сделать так
<?php
$from = $_POST['from'];
// и так все переменные
?>
|
по поводу do{...} while().
а если у Вас в таблице не будет записей? будет выдано предупреждение
замените просто на while
оператор <<< применяется для вывода объёмного текста, советуют избегать его использования, так как допустить ошибку легко, а обнаружить нет. | |
|
|
|
|
|
|
|
для: Slo_Nik
(25.03.2010 в 13:58)
| | извиняюсь за скорость понимания, но я тока в этом году узнал что HTML это не хоккейная команда, а тут еще такие страшные слова как CSS, PHP, MySQL, а еще жава, еще и стараюсь понять что делаю
дошел вот да такого, выводится форма каждой строки таблицы:
<? $expedit = mysql_query("SELECT * FROM exp WHERE expsid='$sid' && expid='$expid'"); ?>
|
ставлю <??> чтобы красивее было, это часть содержимого
но вот если тоже самое сделать с файлом UPDATE:
<? $result = mysql_query ("UPDATE exp SET place='$place', post='$post', to_='$to_', from_='$from_', text='$text' WHERE expsid='$expsid' && expid='$expid'");?>
|
не работает, а если убрать && expid='$expid', то обовляются все записи таблицы с expsid='$expsid'
кстати изменил зарезервированные названия типа from на from_, помоему не одно и тоже
GET и POSTы все были просто не включил в код
подскажите на что лучше поменять <<< и если можно пример
а можно на примере как правильнее убрать do{...} while() на просто while | |
|
|
|
|
|
|
|
для: buykz
(27.03.2010 в 10:43)
| | > ставлю <??> чтобы красивее было, это часть содержимого
Правильно делаете, серый текст смотреть тяжело.
Но достаточно ставить открывающую скобу <? . Закрывать не нужно.
Открывающую скобу стоит ставить на отдельную строку, так будет понятнее, что она только для наглядности.
>а можно на примере как правильнее убрать do{...} while() на просто while
Несколько не так.
блок
выражение_очередного_шага;
do
оператор
while(выражение_очередного_шага);
| почти наверняка следует заменять на блок
while(выражение_очередного_шага)
оператор
|
| |
|
|
|
|
|
|
|
для: buykz
(27.03.2010 в 10:43)
| | >дошел вот да такого, выводится форма каждой строки таблицы:
><? $expedit = mysql_query("SELECT * FROM exp WHERE expsid='$sid' && expid='$expid'"); ?>
В sql надо применять ключевое слово AND, а не &&. если Вы измените в своём sql запросе
<?php
$result = mysql_query ("UPDATE exp SET place='$place', post='$post', to_='$to_', from_='$from_', text='$text' WHERE expsid='$expsid' && expid='$expid'");
?>
|
&& на AND, то всё должно работать.
>ставлю <??> чтобы красивее было, это часть содержимого
используйте лучше длинные теги <?php ?>, это может и не так красиво, но зато код php будет всегда обработан. дело в том, что использование коротких тегов <? ?> может быть отключено в конфигурации самого php. за это отвечает директива short_open_tag в конфигурационном файле php.ini. если всётаки хотите использовать короткие теги, то создайте файл .htaccess, впишите туда строку php_value short_open_tag on и положите его в корневую директорию сайта, тогда можно будет использовать короткие теги не смотря на то как они определены в php.ini. через файл .htaccess можно изменять настройки php, но только в том случае, если использование этого файла разрешено на хостинге.
>GET и POSTы все были просто не включил в код
лучше давать код в сообщении такой, какой он у Вас есть, так легче будет Вам помочь, не надо будет гадать почему в Вас что то не работает.
>подскажите на что лучше поменять <<< и если можно пример
а как Вы выводите что то в окно браузера? используете конструкцию echo?
вот так и форму выводите
<?php
echo "<form action='' method=''>
<input type='' name=''>
</form>";
?>
|
при этом не забывайте о чередовании " и '
>а можно на примере как правильнее убрать do{...} while() на просто while
да просто не
<?php
do{
// тут форматируется вывод данных
}
while(/* тут условие */);
?>
|
а пишите
<?php
while(/* условие выполнение цикла */){
// тут форматируете вывод
}
// например
$query = "SELECT * FROM `table`";// сам запрос
$t = mysql_query($query);// получаем дескриптор результатирующей таблицы
if(mysql_num_rows($t) > 0){// если есть хотя бы одна запись в таблице
while($tt = mysql_fetch_array($t)){// получаем массив записей таблицы
print_r($tt);// выводим содержимое массива в браузер
}
}
?>
|
вот вроде и всё пока. писал всё своими словами, за более точной информацией обращайтесь к мануалу :) | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.03.2010 в 12:30)
| | спасибо, за подробную расшифровку, то что надо
однако вопрос не решен еще, сменил в UPDATE файле с && на AND, но обновления к сожалению не происходит, хотя и результат положительный говорит 'сохранено' | |
|
|
|
|
|
|
|
для: buykz
(27.03.2010 в 13:49)
| | в обработчике, в начале файла напишите
<?php
error reporting(E_ALL); // уровень ошибок
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>
|
так Вы увидите, что попадает в массив POST из формы
выведите сам запрос в окно браузера, увидите, что попадает в запрос
<?php
$query = "UPDATE exp SET place='$place', post='$post', to_='$to_', from_='$from_', text='$text' WHERE expsid='$expsid'
AND expid='$expid'";
echo $query;
?>
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(27.03.2010 в 14:07)
| | перечисляет все переменные массива, кроме expid, а на него ругается типа
Notice: Undefined variable: expid in Z:\home\localhost\www\buy\s_expeditaction.php on line 35
а Денвер начинает предлагать свои услуги типа ослабте контроль, это так понимаю к нам не относится
на данный момент: осуществляется вывод на страницу резюме, где главная таблица staff, в ячейки опыт (exp) выводится несколько строк таблицы exp, причем на каждой строке ссылка на открытие формы для редактирования, добился вывода формы необходимой строки таблицы exp...
осталось реализовать UPDATE данной строки exp | |
|
|
|
|
|
|
|
для: buykz
(27.03.2010 в 15:22)
| | >Notice: Undefined variable: expid in Z:\home\localhost\www\buy\s_expeditaction.php on line 35
>а Денвер начинает предлагать свои услуги типа ослабте контроль, это так понимаю к нам не >относится
Вам вывело предупрежнение, что неопределённая переменная на строке 35, значит её надо пределить до 35 строки.
Denwer предлагает ослабить путём добавления в строку выставляющей уровень ошибок ~E_NOTICE
то есть
<?php
eror_reporting(E_ALL & ~E_NOTICE);
?>
|
это даст возможность не выводить в окно браузера таких замечаний, но при отладке скрипта рекомендуют всётаки выводить все ошибки и предупреждения. инициализируйте переменную expid и это исчезнет
я так понимаю, что на 35 строке у Вас сам запрос? если да, то поэтому и не идёт обновление записи в таблице БД | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.03.2010 в 15:32)
| | да все правильно, но не понятно почему же он все таки не идет, запрос, что здесь может быть не правильного: WHERE expsid='$expsid' AND expid='$expid', выбрать все записи для соединенного столбца expsid, которому соответствуют expid, это и был главный вопрос.
если не дописывать AND expid='$expid', то обновляются все записи, имеющие соответствующие значений expsid, а добовляя не реагирует никак | |
|
|
|
|
|
|
|
для: buykz
(27.03.2010 в 15:59)
| | вот потому, что у Вас не инициализированная переменная expid, потому и не идёт обновление.
найдите причину почему у Вас переменная пустая приходит из формы и тогда всё получится. | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.03.2010 в 16:18)
| | Огромное спасибо Slo_Nik!
Где я могу поставить Вам жирный плюс?
Баланс сошелся, бухгалтера выпустили!
Правда не совсем понятно, как. Похоже еще одно правило, но это я уже буду по ходу вникать, вообщем добавил в форму:
<label><input name='expid' type='text' value='$expe[expid]' size='5'></label>
|
т.е. значения id
по ходу, разбрался с do{...} while() на while, && и AND, избавился от опасной <<<, полезная штука eror_reporting, коллеги новички пользуйтесь
.htaccess и php.ini это завтра вечером числа 10-го | |
|
|
|
|
|
|
|
для: buykz
(27.03.2010 в 16:46)
| |
<label><input name='expid' type='text' value='$expe[expid]' size='5'></label>
|
если так, то type установите в hidden, зачем показывать id? ведь это служебная информация
пользователя не будет виден id, но при посылке формы информация будет передаваться. | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.03.2010 в 12:30)
| | > if(mysql_num_rows($t) > 0){// если есть хотя бы одна запись в таблице
Эта проверка - здесь - лишняя. | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2010 в 21:54)
| | Вы имеете ввиду, что если выводить дамп массива? | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.03.2010 в 21:57)
| | я имею в виду, что mysql_fetch на первом обращении к пустому набору остановит цикл так или иначе | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2010 в 22:46)
| | спасибо, буду знать. | |
|
|
|
|
|
|
|
для: Slo_Nik
(25.03.2010 в 13:58)
| |
<?php
if (isset($_POST['from']) && isset($_POST['to']) && isset($_POST['post']) && isset($_POST['place']) && isset($_POST['text']));
if (isset($_POST['from'] , $_POST['to'], $_POST['post'], $_POST['place'], $_POST['text'] )) ;
|
| |
|
|
|