|
|
|
| добавляю обьявление с помощью ajax сначала выполнятется проверка введенных данных потом проверяется капча и если все хорошо то объявление добовляется
скрипт вот
<script>
var req = Create(), query, path;
function ge(id)
{
return document.getElementById(id);
}
function Create(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
return req;
}
function Request()
{
req.open('post', path , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);
}
function Refresh()
{
var subm = '';
if( req.readyState == 4 )
subm = req.responseText;
if(subm == 1){
document.getElementById('nb_form2').submit();
}
else
ge('ajax').innerHTML = subm;
if (ge('ajax').innerHTML = subm) {
var el, // Сам элемент
elName, // Имя элемента формы
value, // Значение
type; // Атрибут type для input-ов
// Массив списка ошибок, по дефолту пустой
var errorList = [];
// Хэш с текстом ошибок (ключ - ID ошибки)
var errorText = {
1 : "Не заполнено поле 'Имя'",
2 : "Не заполнено поле 'Заголовок'",
3 : "не выбран город",
8 : "не выбрана категория и подкатегория",
4 : "оставьте тельчик либо мыло для связи с вами",
5 : "введите цену",
7 : "не введен текст объявления",
6 : "решите пример",
9 : "пример решен не верно"
}
// Получаем семейство всех элементов формы
// Проходимся по ним в цикле
for (var i = 0; i < nb_form2.elements.length; i++) {
el = nb_form2.elements[i];
elName = el.nodeName.toLowerCase();
value = el.value;
if (elName == "input") { // INPUT
// Определяем тип input-а
type = el.type.toLowerCase();
// Разбираем все инпуты по типам и обрабатываем содержимое
switch (type) {
case "text" :
if (el.name == "gnl_user" && value == "") errorList.push(1);
if (el.name == "gnl_name" && value == "") errorList.push(2);
if (el.name == "gnl_city" && value == "") errorList.push(3);
if (el.name == "gnl_phone" && el.name == "gnl_email" && value == "") errorList.push(4);
//if ((el.name == "gnl_phone" && el.name == "gnl_email" && value == "")|| (p_gnl_email.indexOf ('@') == -1) || (p_gnl_email.indexOf ('.') == -1)) errorList.push(4);
if (el.name == "gnl_price" && value == "") errorList.push(5);
if (el.name == "code" && value == "" ) errorList.push(6);
break;
default :
// Сюда попадают input-ы, которые не требуют обработки
// type = hidden, submit, button, image
break;
}
} else if (elName == "textarea") { // TEXTAREA
if (value == "") errorList.push(7);
} else if (elName == "select") { // SELECT
if (value == 0) errorList.push(8);
}
else {
// Обнаружен неизвестный элемент ;)
}
}
// Финальная стадия
// Если массив ошибок пуст - возвращаем true
if (!errorList.length)
return true;
// Если есть ошибки - формируем сообщение, выовдим alert
// и возвращаем false
var errorMsg = "При заполнении формы допущены следующие ошибки:\n\n";
for (i = 0; i < errorList.length; i++) {
errorMsg += errorText[errorList[i]] + "\n";
}
alert(errorMsg);
return false;
}
}
function Pusk()
{
path = 'check_captcha.php';
query ='code='+encodeURIComponent(ge('myid').value);
Request();
}
</script>
|
при нажатии на кнопку страница тупо обновляется но не заносит данные в БД неподскажите где допустил ошибку | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 13:39)
| | У вас весь код, который вы привели, выполняется на клиентской стороне.
Для того, чтоб данные заносились в базу, надо сначала подключиться к серверу баз, выбрать нужную базу, сделать к ней запрос на занесение данных и только потом, возможно, ваши данные появятся в БД, | |
|
|
|
|
|
|
|
для: Лена
(02.04.2010 в 13:52)
| | подключение к базе выполняется на другой страничке там где юзер заполняет форму. или необходимо в коде который я привел подключиться?? | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 13:57)
| | просто подскажите можно ли подключиться к базе через аякс и если можно то намикните как | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 14:38)
| | Сперва Вам нужно научиться добавлять записи в БД без аякса.
Тогда проблемы уйдут. | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2010 в 15:11)
| | в том то и дело что без аякса все прекрасно добавляется тупо пишем вместо батона сабмит и все добавляется куда нужно. но стоит задача сделать через аякс вот и мучаюсь | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 15:17)
| | Ajax не занимается подключением к базе, он вообще на сервере ничем не занимается. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 15:53)
| | тогда возникает вопрос как добавить запись с помощью button | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 15:58)
| | С помощью button никак, а вот серверный скрипт, проверив правильность заполнения формы, не обнаружив в ней ошибок, может принять решение на запись принятых данных - button и Ajax для этого ему совсем не нужен. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 16:04)
| | пожалуйста по подробнее. а то я об этом даже и незнал( | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 16:08)
| | >автор: Trianon (02.04.2010 в 15:11) письмо автору
>для: NoCash (02.04.2010 в 14:38)
>Сперва Вам нужно научиться добавлять записи в БД без аякса.
>Тогда проблемы уйдут.
>автор: NoCash (02.04.2010 в 15:17) письмо автору
>для: Trianon (02.04.2010 в 15:11)
>в том то и дело что без аякса все прекрасно добавляется тупо пишем вместо батона сабмит и
>все добавляется куда нужно....
Надо полагать, что что-то все таки знаете, осталось понять, что решение на запись нужно принимать по условию, а не по "честному слову", а условием будет являться заполнение формы без ошибок.
С Ajax, без оного, без разницы - все что вам приходит с клиента (из формы, параметры ссылок), обязательно нужно проверять на сервере. Проверка на клиенте может рассматриваться как сервис для удобства пользователя. Тем более, если применяется Ajax, то вам и карты в руки.
Кнопка (button) она лишь инициализирует запрос клиента к серверу, не более. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 16:15)
| | т.е помимо проверки на аяксе нужноо сделать проверку на сервере. только вот как я понятия не имею натолкните в нужную сторону | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 16:22)
| | Аякс ничего не проверяет, это просто клиент-серверная технология, позволяющая вести "диалог" с сервером без перезагрузки основного контента.
Она имеет две составляющие:
клиентская - отправляет данные серверу и получает ответ от сервера как результат обработки отправленных данных.
серверная - принимает данные, проверяет их (обрабатывает), и выдает результат проверки клиенту.
Провека полей посредством JS-сценария в вашем коде к Аякс ни какого отношения не имеет. Вы ее можете безболезненно выкинуть, и анализировать только ответы сервера, формируя сообщения об ошибках или успешном приеме данных. Вся проверка на клиенте, это под честное слово, ибо ничего не стоит все проверку переписать на 100% как верную. И если вы будете принимать решение о записи в базу руководствуясь проверкой на клиенте, тогда полный ахтунг!
Если ваша форма, например, имеет три поля, то пока сервер не убедится, что все они заполнены верно, ни какой записи в базу не происходит. Как только все три поля будут заполнено верно, с этого момента сервер может отдать последний ответ клиенту - "ОК", и далее, плюнув на клиента вместе с Аякс, начинать запись в базу. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2010 в 16:34)
| | ну в целом картина ясна конечно, но было бы очень замечательно увидеть какой нибудь пример и по изучать его | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 16:53)
| | <div id="shapka">Необновляемый контент</div>
<div id="msg">Перезагружающийся контент, список объявлений</div>
по нажатию на button выполняется js код, отправляющий содержимое формы на сервер файлу обработчику, и если обработчик говорит что "все ok", а сказать он это может только в случае успешно добавленной записи, то (я так делаю и не претендую на лучшее решение) вместо "все ок" вышеприведенный обработчик отдает самостоятельный js код, который обращается (исполняет еще один ajax запрос) к специально заготовленному файлу(php), который в свою очередь выбирает все объявления, дублируя код, изначально выводящий список объявлений на страницу, и перегружает содержимое <div id="msg"></div> результатом, в котором уже содержится добавленное объявление.
пример работы могу на мыло скинуть. | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 16:53)
| | Вы хотите чтобы я сел за изучение вашего JS-сценария, описал вашу форму и написал пример?
Вы лучше забудьте об Аjax пока, создайте простую форму отправляемую кнопкой submit, примите ее, и сделайте запись в базу по условию оговоренному выше. Это и будет для вас примером.
С применением Ajax нужно делать тоже самое, разница лишь только в том, что в этом случае нет необходимости возвращать форму пользователю для исправления ошибок. | |
|
|
|
|
|
|
|
для: NoCash
(02.04.2010 в 15:17)
| | AJAX обеспечивается скриптами двух сторон - клиентской (это то, что на JS) и серверной (это то, что на php)
Вот в скрипт серверной стороны (который обрабатывает асинхронный запрос) и нужно поместить операторы установления соединения, выбора БД, и добавления строк в таблицу БД. | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2010 в 17:55)
| | Автор поста все это понимает.
Ему нужен пример, как передать с клиента на сервер. Он не знает как это изобразить. | |
|
|
|
|
|
|
|
для: vorobey
(02.04.2010 в 18:29)
| | Это форум php.
"Как передать с клиента на сервер" относится к клиенту, и практически не относится к серверу (поскольку принимается на сервере всё единым образом почти всегда) и уж совершенно никоим боком не относится к базам данных.
О чем автору и объясняют.
Примеры серверной стороны у него все есть, уж коль скоро он без аякса всё делать умеет.
Пример клиентской стороны автор вроде как сам и привел.
Хотя стиль там такой... чтоб автору всегда так примеры приводили. | |
|
|
|
|
|
|
|
для: vorobey
(02.04.2010 в 18:29)
| | так это в другом разделе сайта надо спрашивать. где спросишь, такой ответ и получишь | |
|
|
|