Как объявить переменную javascript и присвоить значение файлу php, который возвращает логическое значение - PullRequest
0 голосов
/ 21 сентября 2011

Для контекста: я занят, используя javascript для проверки полей в форме.Проблема заключается в том, чтобы обойти невозможность получения данных из базы данных.Все проверки, за исключением проверки того, что уникальное имя пользователя (не используется в БД) выполнены.Я довольно долго смотрел в Интернете, но единственный ответ, который был близок, был такой: «пока вы не начнете нуждаться в рассматриваемой php-странице для возврата какого-либо значения. В этом случае просто используйте диспетчер соединений YUI или что-то в этом роде».такой природы ".Поскольку php на стороне сервера, при нажатии кнопки можно вызывать php, поскольку нет смысла обрабатывать php до тех пор, пока в поле имени пользователя нет текста.

Вот что я сделал.При нажатии кнопки отправки вызывается функция js.Проверка работает.

<script type="text/javascript" src="regform_checks.js"></script>    

<h1>Welcome to Registration</h1>


<form name="register" action="add_user.php" onsubmit="return validateForm()" method="post">

<table>

<tr>

    <td>Choose a username*</td>

    <td><input type = "text" name="profile_id"/></td>

</tr>

Это выше в моем registration.php Ниже мой файл .js:

function validateForm()

 {

 var username=document.forms["register"]["profile_id"].value;

 var pw1=document.forms["register"]["profile_password"].value;

 var pw2=document.forms["register"]["profile_password2"].value;

 var invalid = " "; // Invalid character is a space

 var minLength2 = 3; // Minimum username length

 var minLength = 6; // Minimum password length

 var x=document.forms["register"]["profile_email"].value;

 var atpos=x.indexOf("@");

 var dotpos=x.lastIndexOf(".");


 //check for a value in username field

 if (username==null || username=="")

   {

   alert("Please enter a username");

   return false;

     }



 // check for username minimum length

 if (document.register.profile_id.value.length < minLength2) 

  {

  alert('Your username must be at least ' + minLength2 + ' characters long.');

  return false;

  }



 // check for a value in both fields.

 if (pw1 == "" || pw2 == "") 

  {

  alert("Please enter your password in the Password and Re-enter password areas.");

  return false;

  }



 // check for password minimum length

 if (document.register.profile_password.value.length < minLength) 

  {

  alert('Your password must be at least ' + minLength + ' characters long. Try again.');

  return false;

  }



 // check for password consistency

    if (pw1 != pw2) 

  {

  alert ("The passwords you have entered are not the same. Please re-enter your password.");

  return false;

  }



 //check for valid email address

 if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)

   {

   alert("Not a valid e-mail address");

   return false;

     }



 // check for spaces

 if (document.register.profile_id.value.indexOf(invalid) > -1) 

  {

  alert("Sorry, spaces are not allowed in your username.");

  return false;

  }

 else if (document.register.profile_password.value.indexOf(invalid) > -1)

  {

  alert("Sorry, spaces are not allowed in your password.");

  return false;

  }

 else if (document.register.profile_email.value.indexOf(invalid) > -1)

  {

  alert("Sorry, spaces are not allowed in your email.");

  return false;

      }

 else 

  {

   return true;

  }    



}

Что мне не удалось сделать: установить переменную js следующим образом: varusername_check = profile_id_check.php;Этот файл выглядит следующим образом:

$query = "select profile_id from profile";

$result = mssql_query($query);

$names = array();

for ($count=0; $row=@mssql_fetch_array($result); $count++)

    $names[$count]=$row;


$idtest= True;

foreach ($names as $name)

{

if($name[profile_id]==$profile_id)

return false;
print "$name[profile_id]";

}

?>

Код php все еще находится в процессе создания, в зависимости от того, что ему нужно, я понимаю, что мне не нужен $ idtest, так как оператор if возвращает логическое значение.Последний оператор print просто печатает все имена профилей (поэтому я могу быть уверен, что код работает, и он работает).И это имя профиля, введенное в форму, которое необходимо сравнить со всеми именами профиля в базе данных, чтобы убедиться, что оно уникально.Конечный результат, как я это вижу: если имя пользователя уникально, не выдает ошибку или предупреждение, если это не так, тогда js должен ... который я знаю, как кодировать.Я открыт для предложений, которые отворачиваются от этого метода, хотя мои знания ограничены php, некоторые js.(и, очевидно, HTML) Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 21 сентября 2011

Я думаю, что вам нужно понять определенные понятия о том, как передавать данные между клиентом и сервером. Вы не можете вызвать php-файл на стороне клиента, выполнив var username_check=profile_id_check.php;.

Данные могут быть переданы на сервер с помощью методов запроса . Наиболее распространенными из которых являются $_POST и $_GET. Посмотрите на атрибуты вашего тега формы ниже

<form name="register" action="add_user.php" onsubmit="return validateForm()" method="post">

Действие установлено на add_user.php, а ваш метод - на публикацию. Таким образом, вы можете получить доступ к элементам формы с атрибутом name на стороне сервера, используя массив $_POST. Так, например, в вашем add_user.php вы можете получить доступ к profile_id следующим образом.

$profile_id = $_POST['profile_id']; 

Другие способы отправки данных обратно на сервер: ajax , но я бы посоветовал сократить основы отправки данных через обычные HTTP-запросы, а затем перейти к ajax.

0 голосов
/ 21 сентября 2011

Я не на 100% уверен в том, что вы спрашиваете, так как кажется, что существует проблема языкового барьера, но похоже, что вы спрашиваете, как ваш JavaScript взаимодействует с вашим PHP.

PHP на стороне сервера.Более того, PHP не работает как процесс (обычно ...) на сервере, поэтому, когда вы запускаете скрипт, это одноразовая сделка.В конечном итоге это означает, что к тому моменту, когда ваш PHP-скрипт отобразит вывод на экран, сам скрипт завершит свою работу. не сидит в ожидании ввода, как, скажем, консольная программа.

Из-за этого вам нужно использовать AJAX для доступа к вашему PHP-скрипту.Что такое AJAX?Проще говоря, это способ JavaScript отправлять HTTP-запросы в серверный скрипт, получать результаты этих запросов, а затем динамически использовать DOM (Document Object Model - ваш HTML) для отображения этих результатов.

Самый простой способ использовать AJAX - это использовать смехотворно элегантные функции AJAX в jQuery:

http://api.jquery.com/jQuery.get/

http://api.jquery.com/jQuery.post/

Последнее замечание: проверка формы с помощью JavaScript - это не мера безопасности.Убедитесь, что у вас есть проверка в вашем PHP-скрипте.

0 голосов
/ 21 сентября 2011

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

/* code block #1 */
var username_check=profile_id_check.php;
/* code block #2 */

будет преобразовано во что-то вроде:

/* code block #1 */
var username_check;
ajaxCall({
    url : 'profile_id_check.php',
    callback : function(response){
        username_check = response;
        /* code block #2 */
    }
});
...