Randiria
5.05.2014 - 11:31
Есть у меня файл для редактирования статуса заявок. не могу сообразить как передать номер заявки функции обработки.
$result=mysql_query("SELECT
holiday.id,
holiday.Status AS Status
FROM holiday
INNER JOIN employee
ON holiday.Personnel_Number = employee.Personnel_Number
WHERE holiday.Status = 'Ожидает'",$db);
$myrow=mysql_fetch_array($result);
do
{
echo "<tr><th>".$myrow['id']."</th>";
echo "<th>".$myrow['Status']."</th>";
echo "<th><form action='redact_holiday.php' align='center' method='post'><input type='submit' name='prinyato' value='Принято'/></form></th>";
echo "<th><form action='redact_holiday.php' align='center' method='post'><input type='submit' name='otkazano' value='Отказано'/></form></th>";
echo "</tr>";
}
while($myrow=mysql_fetch_array($result));
функция обновления статуса, ее нужно вызвать через форму.
FUNCTION database1.change_pr(id INT)
RETURNS int(11)
BEGIN
UPDATE holiday set Status='Принято' WHERE holiday.id=id;
RETURN 1;
END
так у тебя есть же id
передай его либо через _GET в гкд формы добавь ?id=...
либо через _POST в форме скрытый
<input type="hidden" name="id" value"..." />
Randiria
5.05.2014 - 11:50
а если мне обработчик формы вынести в отдельную страницу, как мне на нее послать этот параметр?
а какая разница куда ты вынесешь, хоть на другой домен, ты то туда передаешь параметры, а они придут либо в заголовке запроса либо в теле зависит от того как отправишь
Randiria
5.05.2014 - 12:27
в форму добавила <input type='hidden' name='id' value='$_POST[$myrow['id']]' /> в итоге пишет что запрос на обновление пуст. я неправильно передаю?
конечно
ты передаешь в id текст $_POST[$myrow['id']], а не значение или что-то еще
а тебе надо передать id
Игорь_Vasinsky
5.05.2014 - 13:15
в данном случае - совершенно не зачем писать функции SQL, достаточно простых запросов для update
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
На примере
http://sql-info.de/mysql/examples/create-f...n-examples.htmlif(isset($_POST['prinyato']) && !empty($_POST['id'])){
$id = mysql_real_escape_string($_POST['id']);
mysql_query('SELECT change_pr('.$id.')');
}
Игорь_Vasinsky
5.05.2014 - 13:19
Цитата |
$id = mysql_real_escape_string($_POST['id']); |
id то integer )
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
5.05.2014 - 13:26
Алярм! "Попов детектед"!!!
Вот от этой структуры необходимо срочно избавляться, перепиши по-нормальному:
Цитата (Randiria @ 5.05.2014 - 11:31) |
$myrow=mysql_fetch_array($result);
do { .... } while($myrow=mysql_fetch_array($result)); |
Как лучше - тут описано
http://phpforum.ru/index.php?showtopic=21916И переношу тему в раздел "PHP +SQL", т.к. к администрированию БД она не имеет никакого отношения.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Точно, как же быть тогда, может (int)$id .
Хотя SQL одинаково принимает 1 и '1' как integer.
Игорь_Vasinsky
5.05.2014 - 13:46
OleKh
быть всегда нужно проще, если число - приводить к типу, если строка - то эскейптировать.
так то можно и сковородкой брюки гладить.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Randiria
5.05.2014 - 13:50
Цитата (bestxp @ 5.05.2014 - 13:12) |
конечно
ты передаешь в id текст $_POST[$myrow['id']], а не значение или что-то еще
а тебе надо передать id |
епт, а откуда я его откопаю без какой либо ссылки?
т.е. случай, что в $_POST['id'] может быть передана SQL-инъекция не допускается?
Лучше проверять на тип перед тем как экранировать, тут без вопросов.
if(is_integer($_POST['id'])) $id = $_POST['id'];
sergeiss
5.05.2014 - 14:06
Цитата (OleKh @ 5.05.2014 - 13:52) |
Лучше проверять на тип перед тем как экранировать |
Зачем проверять тип, если заранее известно, что в айди допустимы только числа? Приводим сразу к целому числу. Если там нечего "приводить", то просто получим ноль.
Да, операция непродолжительная, что ты предложил. Но из таких ненужных "мелочей" можно набрать очень много лишнего, в т.ч. и по времени выполнения скрипта.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.