Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: добавить обьявления
 
 автор: NoCash   (02.04.2010 в 13:39)   письмо автору
 
 

добавляю обьявление с помощью 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>

при нажатии на кнопку страница тупо обновляется но не заносит данные в БД неподскажите где допустил ошибку

  Ответить  
 
 автор: Лена   (02.04.2010 в 13:52)   письмо автору
 
   для: NoCash   (02.04.2010 в 13:39)
 

У вас весь код, который вы привели, выполняется на клиентской стороне.
Для того, чтоб данные заносились в базу, надо сначала подключиться к серверу баз, выбрать нужную базу, сделать к ней запрос на занесение данных и только потом, возможно, ваши данные появятся в БД,

  Ответить  
 
 автор: NoCash   (02.04.2010 в 13:57)   письмо автору
 
   для: Лена   (02.04.2010 в 13:52)
 

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

  Ответить  
 
 автор: NoCash   (02.04.2010 в 14:38)   письмо автору
 
   для: NoCash   (02.04.2010 в 13:57)
 

просто подскажите можно ли подключиться к базе через аякс и если можно то намикните как

  Ответить  
 
 автор: Trianon   (02.04.2010 в 15:11)   письмо автору
 
   для: NoCash   (02.04.2010 в 14:38)
 

Сперва Вам нужно научиться добавлять записи в БД без аякса.
Тогда проблемы уйдут.

  Ответить  
 
 автор: NoCash   (02.04.2010 в 15:17)   письмо автору
 
   для: Trianon   (02.04.2010 в 15:11)
 

в том то и дело что без аякса все прекрасно добавляется тупо пишем вместо батона сабмит и все добавляется куда нужно. но стоит задача сделать через аякс вот и мучаюсь

  Ответить  
 
 автор: sim5   (02.04.2010 в 15:53)   письмо автору
 
   для: NoCash   (02.04.2010 в 15:17)
 

Ajax не занимается подключением к базе, он вообще на сервере ничем не занимается.

  Ответить  
 
 автор: NoCash   (02.04.2010 в 15:58)   письмо автору
 
   для: sim5   (02.04.2010 в 15:53)
 

тогда возникает вопрос как добавить запись с помощью button

  Ответить  
 
 автор: sim5   (02.04.2010 в 16:04)   письмо автору
 
   для: NoCash   (02.04.2010 в 15:58)
 

С помощью button никак, а вот серверный скрипт, проверив правильность заполнения формы, не обнаружив в ней ошибок, может принять решение на запись принятых данных - button и Ajax для этого ему совсем не нужен.

  Ответить  
 
 автор: NoCash   (02.04.2010 в 16:08)   письмо автору
 
   для: sim5   (02.04.2010 в 16:04)
 

пожалуйста по подробнее. а то я об этом даже и незнал(

  Ответить  
 
 автор: sim5   (02.04.2010 в 16:15)   письмо автору
 
   для: 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) она лишь инициализирует запрос клиента к серверу, не более.

  Ответить  
 
 автор: NoCash   (02.04.2010 в 16:22)   письмо автору
 
   для: sim5   (02.04.2010 в 16:15)
 

т.е помимо проверки на аяксе нужноо сделать проверку на сервере. только вот как я понятия не имею натолкните в нужную сторону

  Ответить  
 
 автор: sim5   (02.04.2010 в 16:34)   письмо автору
 
   для: NoCash   (02.04.2010 в 16:22)
 

Аякс ничего не проверяет, это просто клиент-серверная технология, позволяющая вести "диалог" с сервером без перезагрузки основного контента.
Она имеет две составляющие:
клиентская - отправляет данные серверу и получает ответ от сервера как результат обработки отправленных данных.
серверная - принимает данные, проверяет их (обрабатывает), и выдает результат проверки клиенту.

Провека полей посредством JS-сценария в вашем коде к Аякс ни какого отношения не имеет. Вы ее можете безболезненно выкинуть, и анализировать только ответы сервера, формируя сообщения об ошибках или успешном приеме данных. Вся проверка на клиенте, это под честное слово, ибо ничего не стоит все проверку переписать на 100% как верную. И если вы будете принимать решение о записи в базу руководствуясь проверкой на клиенте, тогда полный ахтунг!

Если ваша форма, например, имеет три поля, то пока сервер не убедится, что все они заполнены верно, ни какой записи в базу не происходит. Как только все три поля будут заполнено верно, с этого момента сервер может отдать последний ответ клиенту - "ОК", и далее, плюнув на клиента вместе с Аякс, начинать запись в базу.

  Ответить  
 
 автор: NoCash   (02.04.2010 в 16:53)   письмо автору
 
   для: sim5   (02.04.2010 в 16:34)
 

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

  Ответить  
 
 автор: Рома   (02.04.2010 в 17:09)   письмо автору
 
   для: NoCash   (02.04.2010 в 16:53)
 

<div id="shapka">Необновляемый контент</div>
<div id="msg">Перезагружающийся контент, список объявлений</div>

по нажатию на button выполняется js код, отправляющий содержимое формы на сервер файлу обработчику, и если обработчик говорит что "все ok", а сказать он это может только в случае успешно добавленной записи, то (я так делаю и не претендую на лучшее решение) вместо "все ок" вышеприведенный обработчик отдает самостоятельный js код, который обращается (исполняет еще один ajax запрос) к специально заготовленному файлу(php), который в свою очередь выбирает все объявления, дублируя код, изначально выводящий список объявлений на страницу, и перегружает содержимое <div id="msg"></div> результатом, в котором уже содержится добавленное объявление.

пример работы могу на мыло скинуть.

  Ответить  
 
 автор: sim5   (02.04.2010 в 17:11)   письмо автору
 
   для: NoCash   (02.04.2010 в 16:53)
 

Вы хотите чтобы я сел за изучение вашего JS-сценария, описал вашу форму и написал пример?
Вы лучше забудьте об Аjax пока, создайте простую форму отправляемую кнопкой submit, примите ее, и сделайте запись в базу по условию оговоренному выше. Это и будет для вас примером.
С применением Ajax нужно делать тоже самое, разница лишь только в том, что в этом случае нет необходимости возвращать форму пользователю для исправления ошибок.

  Ответить  
 
 автор: Trianon   (02.04.2010 в 17:55)   письмо автору
 
   для: NoCash   (02.04.2010 в 15:17)
 

AJAX обеспечивается скриптами двух сторон - клиентской (это то, что на JS) и серверной (это то, что на php)
Вот в скрипт серверной стороны (который обрабатывает асинхронный запрос) и нужно поместить операторы установления соединения, выбора БД, и добавления строк в таблицу БД.

  Ответить  
 
 автор: vorobey   (02.04.2010 в 18:29)   письмо автору
 
   для: Trianon   (02.04.2010 в 17:55)
 

Автор поста все это понимает.
Ему нужен пример, как передать с клиента на сервер. Он не знает как это изобразить.

  Ответить  
 
 автор: Trianon   (02.04.2010 в 18:45)   письмо автору
 
   для: vorobey   (02.04.2010 в 18:29)
 

Это форум php.

"Как передать с клиента на сервер" относится к клиенту, и практически не относится к серверу (поскольку принимается на сервере всё единым образом почти всегда) и уж совершенно никоим боком не относится к базам данных.
О чем автору и объясняют.
Примеры серверной стороны у него все есть, уж коль скоро он без аякса всё делать умеет.

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

  Ответить  
 
 автор: Рома   (02.04.2010 в 18:47)   письмо автору
 
   для: vorobey   (02.04.2010 в 18:29)
 

так это в другом разделе сайта надо спрашивать. где спросишь, такой ответ и получишь

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования