Вопрос по php & mysql

vlad00777
На сайте с 24.12.2009
Offline
119
617

Добрый вечер всем!

Написал скрипт который берет из полей информацию (которую ввел пользователь), вносит в базу данных и отправляет на почту.

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

В Php не мастер, поэтому грешу или на сам скрипт или на своего хостера.

Вот сам скрипт:

<?php

mysql_connect("localhost", "имя базы", "пароль базы") or die(mysql_error());
mysql_select_db("имя базы") or die(mysql_error());
mysql_query("SET NAMES cp1251");
error_reporting(E_ALL & ~E_NOTICE);
function checkEmail($email)
{
if(eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email))
{
return FALSE;
}
list ($Username, $Domain) = split ("@",$email);
if (getmxrr ($Domain, $MXHost))
{
return TRUE;
}
else
{
if (fsockopen ($Domain, 25, $errno, $errstr, 30))
{
return TRUE;
}
else
{
return FALSE;
}
}
}
$to= "почта1" . ", " ;
//$to .= "почта2";
$subject = "Заявка";
$nma = $_POST['nma'];
$podkom = $_POST['podkom'];
$chisl = $_POST['chisl'];
$kol = $_POST['kol'];
$obl = $_POST['obl'];
$mob = $_POST['mob'];
$mail = $_POST['mail'];
$fio = $_POST['fio'];
$message= "Название матча: $nma
Поддержать команду: $podkom
Число: $chisl
Количество людей: $kol
Область, город: $obl
Мобильный: $mob
Почта: $mail
Дополнительные люди: $fio";
$from = "от кого адрес почты";
$headers = "From: $from";
if (empty($nma)) {die ("Вы не заполнили название матча!");}
if (empty($podkom)) {die ("Вы не заполнили какую команду поддерживаете!");}
if (empty($chisl)) {die ("Вы не заполнили дату матча!");}
if (empty($kol)) {die ("Вы не заполнили количество людей для поездки!");}
if (empty($mob)) {die ("Вы не заполнили мобильный телефон!");}
if (empty($mail)) {die ("Вы не заполнили адрес почты!");}
$otpravleno=mail($to,$subject,$message,$headers);
sleep (1);
if ($otpravleno)
{
$to1 = $_POST['mail'];
$subject1 = "Ваша заявка принята";
$message1 = "Ваша заявка на матч $nma, который состоится $chisl принята. Наш менеджер свяжется с Вами как только появится подробная информация.
Контакты: контакты. Это сообщение было сформированно автоматически, отвечать на него не нужно.";
$sql="INSERT INTO ludi (math, pod, date, kol, city, mob, email, narod)
VALUES
('$_POST[nma]', '$_POST[podkom]', '$_POST[chisl]', '$_POST[kol]', '$_POST[obl]', '$_POST[mob]', '$_POST[mail]', '$_POST[fio]')";
if (!mysql_query($sql)) {die('Error: ' . mysql_error());}
echo "Заявка отправлена!
<a href='http://сайт/'>Перейти на главную страницу</a>";
mail($to1,$subject1,$message1,$headers);
}
else
{
echo "Заявка НЕ отправлена!
<a href='http://сайт/'>Попробуйте еще раз!</a>";
}

?>
Верстка. Качественно! Адаптивная, резиновая, с параллаксом и прочими плюшками. В ЛС.
Sodi
На сайте с 30.04.2012
Offline
10
#1

Какие-то ошибки выдает или заявка просто не добавляется? Можете привести пример заявки, которая "не доехала"?

vlad00777
На сайте с 24.12.2009
Offline
119
#2
Sodi:
Какие-то ошибки выдает или заявка просто не добавляется? Можете привести пример заявки, которая "не доехала"?

Ошибок никаких не выдает.

Я просто другим скриптом в csv преобразую базу и смотрю что некоторых записей не хватает.

Иду в phpmyadmin там их тоже нет.

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

DP
На сайте с 24.04.2012
Offline
16
#3

В чем ошибка не знаю, но так с базой не работают. Данные формы как минимум нужно пропускать через mysql_real_escape_string для текста и intval для чисел.

SA
На сайте с 20.08.2010
Offline
23
#4

По коду получается что первый маил не всегда тру, хотя почту тебе отправил. Соответственно раз скрипт ошибочно считает что почта не отправлена и не пишет в базу и клиенту не шлет почту, выдавая клиенту информацию об ошибке. Разбирайся скорее всего с этим куском кода.

Хотя по логике я сначала бы писал в базу, а потом бы рассылал письма.

Sodi
На сайте с 30.04.2012
Offline
10
#5
developer_php:
В чем ошибка не знаю, но так с базой не работают. Данные формы как минимум нужно пропускать через mysql_real_escape_string для текста и intval для чисел.

Если говорить про код, то еще не могу не добавить, что функция eregi уже давно носит статус deprecated (устарела). Обратите внимание на http://ru2.php.net/manual/en/function.preg-match.php

vlad00777
На сайте с 24.12.2009
Offline
119
#6
sl_an:
Хотя по логике я сначала бы писал в базу, а потом бы рассылал письма.

Уже тоже думал так переделать.

developer_php:
Данные формы как минимум нужно пропускать через mysql_real_escape_string для текста и intval для чисел.

Спасибо. Не знал.

T
На сайте с 01.10.2004
Offline
73
#7
vlad00777:
Спасибо. Не знал.

Это на самом деле очень серьезно. Сейчас с помощью этой дыры в вашем скрипте можно исполнить любой SQL-запрос на вашем сервере, с поправкой на права.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий