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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: форма(загрузка файла, проверка данных)

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: Slo_Nik   (29.11.2009 в 02:21)   письмо автору
 
   для: Slo_Nik   (23.11.2009 в 00:52)
 

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

<html> 
<head>
<script type="text/javascript">
function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
</script>
</head>
<body>
<?php
error_reporting
(E_ALL);
if(!empty(
$_POST)){
print_r($_POST);
 if(isset(
$_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
  echo 
"Верный код каптчи.";
 }
 else{
  echo 
"Не верный код каптчи. ".$_POST['keystring'];
 }
}
?>
<script type="text/javascript">
 // проверка каптчи
function test(form){  
  if(form.elements[3].name == "keystring" && form.elements[3].value != ""){
    var ans = getXmlHttp();
    var statElem = document.getElementById('err');
    var param = form.elements[3].value;
    
     ans.onreadystatechange=function(){
      if(ans.readyState == 4){
        /*statElem.innerHTML = ans.statusText;*/
        if(ans.status == 200){
        /*alert('Ответ :'+ans.responseText);*/
        statElem.innerHTML = "Не верный код каптчи.";
        document.getElementById('img').src="kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"+Math.random();
        }
      }
     }      
     ans.open('POST','upfile.php',true);
     ans.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     ans.send(param);
     statElem.innerHTML = "...Идёт загрузка...";
  }
  else{
  document.getElementById('err').innerHTML = "Не заполнено поле антиспамкода.";
  return false;
  }
  return true;
  form.submit();
}
</script>

<!-- Вывод сообщений о незаполненый полях и не верном коде каптчи -->
<div id="err" class="div" style="color:#f00; font-style:italic;"></div>
<form name="mailForm" method="post">
Имя : <input type="text" name="name"><br>
E-mail : <input type="text" name="email"><br>
Текст : <textarea name="text" cols="15" rows="5"></textarea><br>

Спамкод : <input type="text" name="keystring"><br>
<input type="button" onClick="return test(this.form)" value="Отправить">
</form>
</body>
</html>

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

если использовать в input type=submit onSubmit, то асинхронного запроса не получается, при проверке кода перегружается вся форма, а если делать так как я представил выше, то при правильном коде каптчи не идёт отправка на сервер, а всё равно пишет, что код каптчи не верный.
подскажите, пожалуйста, как сделать правильно работоспособный код?
заранее благодарю.

  Ответить  
 
 автор: Slo_Nik   (24.11.2009 в 16:24)   письмо автору
 
   для: sim5   (24.11.2009 в 05:30)
 

зашёл, буду изучать, спасибо.

  Ответить  
 
 автор: sim5   (24.11.2009 в 05:30)   письмо автору
 
   для: Slo_Nik   (24.11.2009 в 05:27)
 

Ну только двух submit мало, нужен механизм :) Зайдите на javascript.ru, очень полезные статьи там, с примерами.

  Ответить  
 
 автор: Slo_Nik   (24.11.2009 в 05:27)   письмо автору
 
   для: sim5   (24.11.2009 в 05:03)
 

конечно же я исходный код страницы посмотрел, увидел там два submit, из этого и исходил.

  Ответить  
 
 автор: sim5   (24.11.2009 в 05:03)   письмо автору
 
   для: Slo_Nik   (24.11.2009 в 04:43)
 

Ах вот что вы делаете. Ну тогда был бы резон посмотреть код майла, там AJAX используется, но коли вы всего три дня....
Можно и фреймом это сделать. На www.javascript.ru есть хорошие статьи подобного обмена клиента с сервером, зайдите, почитайте.

  Ответить  
 
 автор: Slo_Nik   (24.11.2009 в 04:43)   письмо автору
 
   для: sim5   (24.11.2009 в 04:28)
 

>Почему два фрейма?

если честно, то передрал пример и пытался переделать его под свои нужды, получилось пока не очень хорошо, т.к. js учу только третий день, до многого пока в учебнике не дочитал, а начал я его читать сначала :):):) , да и издание старенькое.
так что уж звиняйте если вопросы покажутся Вам глупыми...

>Это ведь можно проверить в одном обработчике? Зачем куча кнопок submit?

пытаюсь сделать подобие как на mail.ru при отправке почты с вложением, там сначала загружается изображение, как я понял.
вот мне и надо, что бы можно было загрузить сначала изображение, а потом уже отправлять информацию с формы, прикрепив изображение.
может я не так понимаю процесс, подскажите как правильно это делается, пожалуйста.

  Ответить  
 
 автор: sim5   (24.11.2009 в 04:28)   письмо автору
 
   для: Slo_Nik   (24.11.2009 в 04:17)
 

Зачем по нескольку раз отправлять каждый пункт формы?
Вы выдаете пользователю форму, в которой есть условие на заполнение обязательных полей. Пользователь заполняет (или не заполняет) и отправляет ее. У формы есть событие onsubmit, в котором и начинаем проверку:
1. Все ли обязательные поля заполнены? Если нет, возврат. Если пользователь подправит скрипт, и все таки отправит ее пустой, то эту же проверку необходимо делать на сервере.
2. Если все поля заполнены, проверяем корректность ввода. Если адрес введен не корректно, возврат. Аналогично, если подправили и отослали, то проверяем адрес и на сервере.
3. Все поля заполнены и корректно. Идет отправка, выдаем сообщение. Сервер проверяет данные, включая загрузку изображения (если оно было).
4. Если есть ошибки возвращаем форму назад, с заполненными данными (исключая поле ввода изображения, если оно удачно загружено, ну, или, либо заставляем опять выбирать его, игнорируя удачную загрузку), для работы над ошибками.

Это ведь можно проверить в одном обработчике? Зачем куча кнопок submit?

getElementById() будет корректно работать во всех браузерах, это и используйте.

  Ответить  
 
 автор: Slo_Nik   (24.11.2009 в 04:17)   письмо автору
 
   для: sim5   (24.11.2009 в 04:02)
 

Проверку каптчи я уже удалил.
по поводу единого обработчика не понял, можно чуть подробней объяснить?

>document.all коллекция только для IE.

Вы имели ввиду вот это
document.all.err.innerHTML = "......"; ?

тогда как будет правильно для остальных браузеров прописать?

  Ответить  
 
 автор: sim5   (24.11.2009 в 04:02)   письмо автору
 
   для: Slo_Nik   (23.11.2009 в 23:00)
 

<form name="mailForm" action="upfile.php" method="post" TARGET="hiddenframe"
enctype="multipart/form-data" ONSUBMIT="здесь можно единым обработчиком все обрабатывать">

Это не для проверки, это для ввода:
<input type="text" name="keystring">

и это к нему, удалить:
// проверка кода каптчи
if(name == "keystring" && value != ""){
  if(ses != "" && ses != value){
    document.all.err.innerHTML = "Введён не верный код.";
    return false;
  }
}

Почему два фрейма?
<iframe id="hiddenframe" name="hiddenframe" style="width:0; height:0; border:0"></iframe>

document.all коллекция только для IE.

  Ответить  
 
 автор: Slo_Nik   (23.11.2009 в 23:00)   письмо автору
 
   для: Slo_Nik   (23.11.2009 в 00:52)
 

так и ни кто не может помочь?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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