|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Читаю "Букварь по PHP и MySQL" там есть примеры и вот в одном из них у меня лезет ошибка. Скрипт такой: ----------------------------------- <html> <body> <?php $db = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); if ($id) { if ($submit) { $sql = "UPDATE employees SET first='$first',last='$last',address='$address',position='$position' WHERE id=$id"; $result = mysql_query($sql); echo "Thank you! Information updated.\n"; } else { // query the DB $sql = "SELECT * FROM employees WHERE id=$id"; $result = mysql_query($sql); $myrow = mysql_fetch_array($result); ?> <form method="post" action="<?php echo $PHP_SELF?>"> <input type=hidden name="id" value="<?php echo $myrow["id"] ?>"> First name:<input type="Text" name="first" value="<?php echo $myrow["first"] ?>"><br> Last name:<input type="Text" name="last" value="<?php echo $myrow["last"] ?>"><br> Address:<input type="Text" name="address" value="<?php echo $myrow["address"] ?>"><br> Position:<input type="Text" name="position" value="<?php echo $myrow["position"] ?>"><br> <input type="Submit" name="submit" value="Enter information"> </form> <?php } } else { // display list of employees $result = mysql_query("SELECT * FROM employees",$db); while ($myrow = mysql_fetch_array($result)) { printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"], $myrow["first"], $myrow["last"]); } } ?> </body> </html> --------------------------------------------- Ошибка: Warning: Undefined variable: id in e:\home\localhost\www\test\edit_sql.php on line 6 На строке if ($id) { Почему ему не нравится ID? Может кто подскажет? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 22:32 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
это не ошибка, это предупреждение, о том что переменная ID не инициализирована. Можешь просто подавить сообщение ini_set("display_errors", "off"); или error_reporting(0); а можешь (что имхо более правильно) написать if (isset($id)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 23:49 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Как я понял - id передается в скрипт запросом, а все новые версии php по умолчанию имеют настройку register_globals = Off - и скрипт не видит переменные, которые ему отдаются через GET или POST клиентом. Что бы он их увидел, надо либо сделать register_globals = ON, либо дополнить скрипт: $id = $_GET['Id']; ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 10:54 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
2 Макс М. спасибо :) 2 BigHarry да точно дело в register_globals = Off проверил :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 12:52 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Проверил еще раз.... дома. Вариант Макса М. Работает а авриант с register_globals = ON почему то не сработал. И $id = $_GET['Id']; тоже. Я его добавлял так: ?php $db = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); И $id = $_GET['Id']; if ($id) { --------------------------------- Еще вопрос. Результат запроса можно выводить так: if ($myrow = mysql_fetch_array($result)) printf("<tr><td class=left_tb width=200> <b>Выпуск: </b>%s<br> <b>Ф.И.О: </b>%s<br></td> <td class=right_tb><br>%s<br><br></td>\n", $myrow["year"],$myrow["fio"],$myrow["descr"]); --------------------------------- Но было бы намного удобнее если бы вместо %S можно было бы вставить сразу $myrow["что надо"] Есть ли такой вариант и где можно почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2003, 23:33 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
upper насчет первого ничего сказать не могу, так как не знаю, что ты имеешь ввиду под фразой "не сработал." насчет второго, если я тебя правильно понял то можно писать echo "<table><tr><td>".$myrow['что_надо']."</td></tr></table>"; А почитать все это можно на http://phpclub.net/manrus/ ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2003, 16:21 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Помимо $_GET ещо есть $_POST Каким методом клиент на сервер засылает данные? Если через POST - то в $_GET, ессно, ничего не будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 00:10 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
2 Макс М. спасибо :) с вывоом через echo разобрался. По поводу $id = $_GET['Id']; if (isset($id)) register_globals = ON У меня получаются разные результаты дома и на работе но if (isset($id)) поэтому с этим, я пока разбираться не буду. Теперь я плавно пришел к следующему вопросу :) Даты. У меня есть запрос: SELECT * FROM spr_special, main where main.special_id = spr_special.id ORDER BY fio Конечно же я получаю дату типа 1974-06-19 Чтобы преобразовать в нужное для меня нужно еще это: SELECT DATE_FORMAT(main.birthday,"%d.%m.%Y") FROM main результат то что мне нужно - 19.06.1974 Но немогу взять в толк как скретить эти запросы в один. Как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 17:59 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 20:14 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Спасибо Макс М. :) А теперь я столкнулся с тем, что в PHP это не работает :( ругается на % Хотя в Query все путем. Перелопатил кучу документации вроде все правильно но не работает. Parse error: parse error, unexpected '%' in G:\home\LOCALH~1\www\mgrt\~out.php on line 17 --------------- SELECT *, line 17 -> DATE_FORMAT(main.m_birthday,"%d.%m.%Y") AS birthday, DATE_FORMAT(main.last_info_update,"%H:%i - %d.%m.%Y") AS last_info_upd FROM spr_special, main WHERE main.special_id = spr_special.id_spr ORDER BY fio -------------- ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 14:58 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
В ПХП вроде знак процента, кады он используется как строка, надо предварять косухой - типа так: \% ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 19:57 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
а может он на кавычку возле знака процента ругается ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 20:52 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
> $id = $_GET['Id']; А вот так делать нельзя! Переменную $_GET['Id'] надо сначала проверять на корректность, иначе можно получить 'sql injection', т.е. пользователь сможет модифицировать запрос через параметр id. Чем это грозит, надеюсь, объяснять не надо. Собственно для борьбы с этим register_globals и выключили по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 23:52 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
2 BigHarry да там дело в слеше но я не сразу смог найти причину и документацию. Оказалось нужно делать так: DATE_FORMAT(main.m_birthday,\"%d.%m.%Y\") AS birthday, тоесть \" И еще заметил, что если использовать одинарнйе кавычки то \n которые я использую вываливаются в контент. Чтоб этого небыло нужно " 2 novns тыркни ссылкой где можно почитать :) не хочется, чтобы мое детище завалили кулхацкеры в первый же день :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2003, 08:55 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
DATE_FORMAT(main.birthday,'%d.%m.%Y') поставте одинарные кавычки ругаться не будет.. по крайней мере не должен Felix ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2003, 10:41 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
>>А вот так делать нельзя! >>Переменную $_GET['Id'] надо сначала проверять на корректность, иначе >> можно получить 'sql injection', т.е. пользователь сможет модифицировать >> запрос через параметр id. Чем это грозит, надеюсь, объяснять не надо. >> Собственно для борьбы с этим register_globals и выключили по умолчанию. Нет. register_globals выключен не для этого. $_GET['Id'] - так как раз и можно. Иначе - как в конце концов узнать - какое значение переменной передается из запроса? Другое дело - что потом надо проверять значения этой переменной на валидность - но это по-любому надо делать, независимо от register_globals. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2003, 13:13 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Почему был выключен register_global разжевано тут: http://faq.phpclub.net/security_changes4.1.txt Как избавится от проблем с кавычками читать тут: http://faq.phpclub.net/slashes ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2003, 13:26 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
2 BigHarry http://faq.phpclub.net/security_changes4.1.txt Почитал все понятно но... но что делать непонятно :) http://faq.phpclub.net/slashes - это я даже сам нашел правда ничего что там написано не понял. Понял только что если использовать "/ или ' то все работает на сколько это хорошо лил плохо незнаю. ---------------------------------------------------------------- Сейчас дошел до такого момента. Нужно вносить записи из www в MySQL. Для этого написал форму и обработчик. ФОРМА: <form method="post" action="insert1.php"> Год выпуска: <input type="Text" name="year" size="10"> <font color="#FF0000">*</font> <br> Специальность: <select name="special_id"> <option value="1">Геолог</option> <option value="2">Топограф</option> <option value="3">Гидрогеолог</option> </select> <font color="#FF0000">*</font> <br> ФИО: <input type="Text" name="fio" size="55"> <font color="#FF0000">*</font> <br> День рождения: <input type="Text" name="m_birthday" size="20"> <br> Описание:<br> <textarea name="descr" cols="90" rows="15"></textarea> <br> E-mail: <input type="Text" name="email1"> <br> ICQ: <input type="Text" name="icq"> <br> Телефон: <input type="Text" name="telefon"> <br> <br> <input type="Submit" name="submit" value="Ввод данных в базу"> </form> ОБРАБОТЧИК:(insert1.php) <? // обработчик данных из Главной формы. if (isset($submit)) { $link = mysql_connect("localhost", "root", "root") or die ("Could not connect to server"); mysql_select_db ("mgrt", $link) or die ("Could not select database"); $sql = "INSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) VALUES ('$year','$special_id','$fio','$m_birthday'.'$descr','$email1','$icq','$telefon')"; $result = mysql_query($sql); echo "Спасибо! Ваша информация добавлена.\n"; } else { // display form } // end if ?> Если пытаюсь все свести в кучу, тоесть и форму и обработчик, и передавать данные с формы в обработчик через <? echo '$PHP_SELF' ?> То получаю http://localhost/test/$PHP_SELF :( Если обработчик меняю на while (list($name, $value) = each($HTTP_POST_VARS)).............. То видно, что форма работает нормально. И если использую отдельные файлы для формы и обработчика то получаю собственно - Спасибо! Ваша информация добавлена. Но данных в безе НЕТ. Хотя если выполнить скрипт типа создать базу.... под этим же именем (root) то база создается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 16:12 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
>>INSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) >>VALUES ('$year','$special_id','$fio','$m_birthday'.'$descr','$email1','$icq','$telefon') Значения полей в кавычках - в кавыки надо заключать поля, которые текстовые или дата. year,special_id,m_birthday - прописаны в таблице как текстовые поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 16:37 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
>year,special_id,m_birthday - прописаны в таблице как текстовые поля? YEAR - формат YEAR(4) special_id - tinyint(5) unsigned m_birthday - DATE А в кавычки позаключал ... :) подумал что и неременные тоже нужно :) упс.. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 16:54 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Сделай так: ===================================== $sql = "INSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) VALUES ('$year','$special_id','$fio','$m_birthday'.'$descr','$email1','$icq','$telefon')"; echo $sql; ===================================== Что она выдаст на экран? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 18:47 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
по echo $sql получаю: INSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) VALUES (1995,1,ФИО,05.03.1975,Тут описание,,,) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2003, 09:08 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Должно быть так: NSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) VALUES (1995,1,'ФИО','1975-03-05',.... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2003, 10:44 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
2 BigHarry Смысл понял. Уже заработало :) Теперь попробую усложнить форму и приспособить ее для редактирования данных. И еще попробую разобраться с $PHP_SELF. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2003, 16:39 |
|
натолкнулся на ошибку
|
|||
---|---|---|---|
#18+
Ну вот :( принес скрипты домой и не .......работает. ------------------------------------------------------------------------- <? // обработчик данных из Главной формы. if (isset($submit)) { $link = mysql_connect("localhost", "root", "") or die ("Could not connect to server"); mysql_select_db ("mgrt", $link) or die ("Could not select database"); $sql = "INSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon,vis_data) VALUES ($year,$special_id,'$fio','$m_birthday','$descr',$email1,$icq,$telefon,$vis_data)"; $result = mysql_query($sql) or die ("Сбой записи в базу"); echo "Спасибо! Ваша информация добавлена.\n"; //echo $sql; } else { // display form } // end if ?> -------------------------------------------------------------------- Плучаю Сбой записи в базу. Что за безобразие ? Я пользую Dev-PHP и она не пропускает этот скрипт. # Looking for the parser... -- Parser found. # Writing source file... # Runing parser... -- Parameters: -q -- Execution error. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2003, 21:21 |
|
|
start [/forum/topic.php?fid=47&msg=32312785&tid=1855636]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 184ms |
0 / 0 |