Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / натолкнулся на ошибку / 25 сообщений из 33, страница 1 из 2
30.10.2003, 22:32
    #32311109
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Читаю "Букварь по 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?
Может кто подскажет?
...
Рейтинг: 0 / 0
30.10.2003, 23:49
    #32311130
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
это не ошибка, это предупреждение, о том что переменная ID не инициализирована.
Можешь просто подавить сообщение
ini_set("display_errors", "off");
или
error_reporting(0);
а можешь (что имхо более правильно) написать
if (isset($id))
...
Рейтинг: 0 / 0
31.10.2003, 10:54
    #32311387
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Как я понял - id передается в скрипт запросом, а все новые версии php по умолчанию имеют настройку register_globals = Off - и скрипт не видит переменные, которые ему отдаются через GET или POST клиентом.
Что бы он их увидел, надо либо сделать register_globals = ON, либо дополнить скрипт:
$id = $_GET['Id'];
...
Рейтинг: 0 / 0
31.10.2003, 12:52
    #32311642
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
2 Макс М. спасибо :)

2 BigHarry да точно дело в register_globals = Off
проверил :)
...
Рейтинг: 0 / 0
01.11.2003, 23:33
    #32312676
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Проверил еще раз.... дома.

Вариант Макса М. Работает а авриант с 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["что надо"]
Есть ли такой вариант и где можно почитать?
...
Рейтинг: 0 / 0
02.11.2003, 16:21
    #32312785
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
upper
насчет первого ничего сказать не могу, так как не знаю, что ты имеешь ввиду под фразой "не сработал."
насчет второго, если я тебя правильно понял то можно писать
echo "<table><tr><td>".$myrow['что_надо']."</td></tr></table>";

А почитать все это можно на http://phpclub.net/manrus/
...
Рейтинг: 0 / 0
03.11.2003, 00:10
    #32312899
BigHarryy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Помимо $_GET ещо есть $_POST
Каким методом клиент на сервер засылает данные?
Если через POST - то в $_GET, ессно, ничего не будет...
...
Рейтинг: 0 / 0
04.11.2003, 17:59
    #32315225
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
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

Но немогу взять в толк как скретить эти запросы в один.

Как быть?
...
Рейтинг: 0 / 0
04.11.2003, 20:14
    #32315382
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Код: plaintext
SELECT *,  DATE_FORMAT(main.birthday, "%d.%m.%Y" ) FROM spr_special, main where main.special_id = spr_special.id ORDER BY fio
...
Рейтинг: 0 / 0
05.11.2003, 14:58
    #32316221
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Спасибо Макс М. :)

А теперь я столкнулся с тем, что в 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
--------------
...
Рейтинг: 0 / 0
05.11.2003, 19:57
    #32316607
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
В ПХП вроде знак процента, кады он используется как строка, надо предварять косухой - типа так: \%
...
Рейтинг: 0 / 0
05.11.2003, 20:52
    #32316647
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
а может он на кавычку возле знака процента ругается ?
...
Рейтинг: 0 / 0
05.11.2003, 23:52
    #32316700
novns
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
> $id = $_GET['Id'];
А вот так делать нельзя!
Переменную $_GET['Id'] надо сначала проверять на корректность, иначе можно получить 'sql injection', т.е. пользователь сможет модифицировать запрос через параметр id. Чем это грозит, надеюсь, объяснять не надо.
Собственно для борьбы с этим register_globals и выключили по умолчанию.
...
Рейтинг: 0 / 0
06.11.2003, 08:55
    #32316805
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
2 BigHarry да там дело в слеше но я не сразу смог найти причину и документацию. Оказалось нужно делать так:
DATE_FORMAT(main.m_birthday,\"%d.%m.%Y\") AS birthday,

тоесть \"

И еще заметил, что если использовать одинарнйе кавычки то \n которые я использую вываливаются в контент. Чтоб этого небыло нужно "

2 novns тыркни ссылкой где можно почитать :) не хочется, чтобы мое детище завалили кулхацкеры в первый же день :)
...
Рейтинг: 0 / 0
06.11.2003, 10:41
    #32316924
©Felix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
DATE_FORMAT(main.birthday,'%d.%m.%Y')

поставте одинарные кавычки ругаться не будет.. по крайней мере не должен
Felix
...
Рейтинг: 0 / 0
06.11.2003, 13:13
    #32317208
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
>>А вот так делать нельзя!
>>Переменную $_GET['Id'] надо сначала проверять на корректность, иначе
>> можно получить 'sql injection', т.е. пользователь сможет модифицировать
>> запрос через параметр id. Чем это грозит, надеюсь, объяснять не надо.
>> Собственно для борьбы с этим register_globals и выключили по умолчанию.

Нет. register_globals выключен не для этого.
$_GET['Id'] - так как раз и можно. Иначе - как в конце концов узнать - какое значение переменной передается из запроса? Другое дело - что потом надо проверять значения этой переменной на валидность - но это по-любому надо делать, независимо от register_globals.
...
Рейтинг: 0 / 0
06.11.2003, 13:26
    #32317229
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Почему был выключен register_global разжевано тут:
http://faq.phpclub.net/security_changes4.1.txt
Как избавится от проблем с кавычками читать тут:
http://faq.phpclub.net/slashes
...
Рейтинг: 0 / 0
10.11.2003, 16:12
    #32319123
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
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) то база создается.
...
Рейтинг: 0 / 0
10.11.2003, 16:37
    #32319172
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
>>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 - прописаны в таблице как текстовые поля?
...
Рейтинг: 0 / 0
10.11.2003, 16:54
    #32319192
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
>year,special_id,m_birthday - прописаны в таблице как текстовые поля?

YEAR - формат YEAR(4)
special_id - tinyint(5) unsigned
m_birthday - DATE

А в кавычки позаключал ... :) подумал что и неременные тоже нужно :) упс..
...
Рейтинг: 0 / 0
10.11.2003, 18:47
    #32319304
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Сделай так:
=====================================
$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;
=====================================
Что она выдаст на экран?
...
Рейтинг: 0 / 0
11.11.2003, 09:08
    #32319535
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
по
echo $sql

получаю:
INSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) VALUES (1995,1,ФИО,05.03.1975,Тут описание,,,)
...
Рейтинг: 0 / 0
11.11.2003, 10:44
    #32319694
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Должно быть так:
NSERT INTO main (year,special_id,fio,m_birthday,descr,email1,icq,telefon) VALUES (1995,1,'ФИО','1975-03-05',....
...
Рейтинг: 0 / 0
11.11.2003, 16:39
    #32320466
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
2 BigHarry
Смысл понял. Уже заработало :)

Теперь попробую усложнить форму и приспособить ее для редактирования данных. И еще попробую разобраться с $PHP_SELF.
...
Рейтинг: 0 / 0
12.11.2003, 21:21
    #32322204
upper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
натолкнулся на ошибку
Ну вот :( принес скрипты домой и не .......работает.
-------------------------------------------------------------------------
<?
// обработчик данных из Главной формы.
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.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / натолкнулся на ошибку / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]