Forum Webscript.Ru

Программирование => PHP => Тема начата: Skyer от 20 Февраля 2004, 21:27:33

Название: Добавление в базу.
Отправлено: Skyer от 20 Февраля 2004, 21:27:33
Делаю программку на PHP+MySQL. Сделал форму для добавления данных, написал нужный PHP-код, создал базу и таблицы и т.д.

Тестирую программку у себя дома на системе Денвер(Apache у себя дома, где работает всё как в Вебе).

И вот данные то добавляются, то не добавляются. То выскакивает мною же предусмотренное сообщение "Данные не прошли, попробуйте ещё раз", то всё проходит нормально. Данные при этом совершенно одинаковые.

При этом, если один раз каким-то образом данные прошли, то и в дальнейшем данные будут проходить. Если же один раз что-то не прошло - то и в дальнейшем данные не будут проходить в течение долгого времени.

Всё это я делаю в Internet Explorer.

В чём здесь дело? Как исправить?
Название: Добавление в базу.
Отправлено: AliMamed от 20 Февраля 2004, 21:38:39
выкинуть денвер, поставить все самому, разобраться в конфигах, научиться читать логи и выводить сообщения об ошибках и по ним отлаживать код. еще не помещает научиться нормально формулировать вопросы, а не тратить свое и чужое время на постинги типа: "чтото когда я с утра одеваю штаны они то красные, то желтые. не подскажите в чем может быть дело?"
Название: Добавление в базу.
Отправлено: Skyer от 20 Февраля 2004, 21:47:04
Вопрос сформулирован нормально. Одинаковые данные то передаются то нет. Причина - непонятна. Уверен, что проблема - типичная, и не раз встречавшаяся.

А вот поставить всё самому пожалуй действительно стоит.
Название: Добавление в базу.
Отправлено: Yukko от 20 Февраля 2004, 23:47:17
Цитировать
Skyer:
Вопрос сформулирован нормально.

http://www.ln.ua/~openxs/articles/smart-questions-ru.html почитай на досуге, как правильно задавать вопросы, хорошо?

Включи сначала в конфигах устройство мозг, потом включи в конфигах процесс отладки, выведи все ошибки в браузер. Покажи тот код, где ты говоришь, что данные не прошли, сделай хоть что-нибудь, чтобы тебе помогли.

Сообщение об ошибке должно описывать ошибку, я тоже когда для себя отладку делаю на быструю руку, то пишу вместо: Database connection error единственное слово: F*ck либо Shit, но потом все равно переписываю код как положено, чтобы я знал, какая именно ошибка!
Название: Добавление в базу.
Отправлено: Меняздесьдавнонет от 20 Февраля 2004, 23:59:11
Цитировать
Уверен, что проблема - типичная

ты ошибаешься.
Цитировать
Вопрос сформулирован нормально.

ты ошибаешься.
Проблема описана с точки зрения стороннего наблюдателя, юзера.
"нажал на кнопку - работает"
"нажал на кнопку - не работает"
В таком виде вопросы задавать смысла не имеет. НИКТО не знает, что там внутри твоего скрипта. И знать не может.
В таком виде вопросы на форуме задавать бессмысленно.

Читай http://faq.phpclub.net/debug и попытайся хотя бы примерно определить место где у тебя возникает проблема.
Название: Добавление в базу.
Отправлено: Skyer от 21 Февраля 2004, 19:37:33
Объясните тогда, как сделать так, чтобы все ошибки выводились!

В статье http://faq.phpclub.net/debug написано, что для этого нужно в начало скрипта вставить эти строчки.

ini_set(\'display_errors\',1);
error_reporting(E_ALL ~E_NOTICE);

Так скрипт на сами эти строчки ошибку пишет:

Parse error: parse error, unexpected \'~\' in z:\\home\\localhost\\www\\project\\add_form.php on line 4

Тильду убирал, всякие преобразования делал - всё равно ошибки.

Оставлял просто

error_reporting(E_ALL);

Никаких ошибок не выводится, скрипт работает нормально, но когда данные не передаются, ошибок никаких не пишет.

Привожу код программы с комментариями:


// Для якобы вывода всех ошибок
ini_set(\'display_errors\',1);
error_reporting(E_ALL);

// Проверка заполненности полей.
if (!$date || !$code || !$reason || !$solution)
{
   echo "Vy ne vveli odno iz obyazatel\'nyh polei, poprobuite esche raz";
   exit;
}

// перекодировка символов

$date = addslashes($date);
$code = addslashes($code);
$reason = addslashes($reason);
$solution = addslashes($solution);

// Проверка даты.
$today = date("Y-m-d");

if ($date>$today)
{
   echo "Дата не соответствует действительности";
   exit;
}

// Для отладки - пишет на экран данные из формы. Данные всегда корректны.
echo $date;
echo "

".$code;
echo "

".$reason;
echo "

".$solution."

";

// Соединение с БД
$db = mysql_pconnect();

// Проверка наличия соединения
if (!$db)
{
   echo "Net soedinenija s bazoj dannyh. Povtorite popytku pozzhe";
   exit;
}

// Обращение к БД
mysql_select_db("results");

// Сам запрос. Должен быть корректен, т.к. одни и те же данные то передаются, то не передаются
$query = "insert into results values(\'NULL\', \'".$date."\', \'".$code."\', \'".$reason."\', \'".$solution."\')";

// Выполнение запроса
$res = mysql_query($query);

// Проверка, был ли выполнен запрос
 if ($res)
   echo "Spasibo, dannye byli peredany";
else
   echo "Dannye ne proshli, poprobuite esche raz";

?>

Название: Добавление в базу.
Отправлено: Макс от 22 Февраля 2004, 13:28:54
1. mysql_pconnect замени на mysql_connect
2. на время отладки пиши:

mysql_query($query) or die("Query:
$query
".mysql_error());
Название: Добавление в базу.
Отправлено: Skyer от 22 Февраля 2004, 17:01:54
Макс
Спасибо!!! Проблема решена. Ошибка называлась "No database selected" и находилась здесь:

mysql_select_db("results"); // results - имя таблицы, а не базы данных.

Вот только мне интересно, почему иногда данные всё же проходили?
Название: Добавление в базу.
Отправлено: Меняздесьдавнонет от 22 Февраля 2004, 21:50:43
интересно, в факе написано про mysql_error
однако использовал ее ты только поде того, как макс тебе на это указал. Так тяжело прочесть два экрана текста?
Или там непонятно написано?
Название: Добавление в базу.
Отправлено: Skyer от 25 Февраля 2004, 16:52:35
Я понятия не имел о том, что у меня не все ошибки пишутся. В факе об этом не написано.
Название: Добавление в базу.
Отправлено: Меняздесьдавнонет от 25 Февраля 2004, 16:57:42
в факе не написано, что у тебя не все ошибки пишутся?!
ну и ну...
а текст своей программы ты в факе прочесть не рассчитывал?