Изменение адреса сайта в соответствии с используемым php - PullRequest
0 голосов
/ 14 июля 2009

У меня есть кнопка на моей странице abc.html <input type="button" onclick="javafun();">

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

function login()
{   
    xmlhttp=GetXmlHttpObject();
    //alert("pass");
    if(xmlhttp==null)
    {
        alert("Your browser does not support AJAX!");
        return;
    }
    var url="login.php";
    url=url+"?id="+username+"&passwrd="+passwrd;
    xmlhttp.onreadystatechange=statechangedLogin;
    xmlhttp.open("GET", url, true);
    xmlhttp.send(null);
    }
}

function statechangedLogin()
{
    //alert(xmlhttp.readyState);
    if(xmlhttp.responseText=="<font color='red'>Your User Name or Password is incorrect. Please try again.</font>")
    {
        document.getElementById("response").innerHTML=xmlhttp.responseText;
    }
    else 
    {
        //hwin=window.location="http://forum.research.bell-labs.com/zeeshan/qotw/login.php";
        document.getElementById("mainbody").innerHTML=xmlhttp.responseText;
        //hwin.document.innerHTML=xmlhttp.responseText;
        //alert();
    }
}

Все отлично работает, но адрес сайта в адресной строке остается прежним: http://severname.com/abc.html

Я хочу, чтобы эта адресная строка изменялась, согласно php. это должно прийти к ... http://severname.com/abc.html/login.php

но все равно не должно отображаться ?id=username&passwrd=passwrd

Возможно ли это, и если да, то как?

Zeeshan

Ответы [ 7 ]

4 голосов
/ 14 июля 2009

POST запрос к ../login.php?

вместо использования ajax, оберните элементы формы в

 <form method=POST action="login.php">
      User Name: <input name="username"><br>
      Password: <input name="passwrd" type="password"><br>
      <input type="submit" name="Login">
 </form>

Почему вы делаете AJAX, если хотите изменить адресную строку?

Редактировать Добавлены реальные значения в форму

Редактировать 2 Больше ясности.

Вы действительно должны войти в систему через форму (см. Сообщение @nathans).

  • Переименуйте вашу html форму входа в php страницу. Давайте назовем это loginForm.php.
  • Удалите все функции javascript из loginForm.php
  • Вставьте форму в loginForm, используя тег формы.
  • В файле login.php вы проверяете, успешно ли пользователь вошел в систему,
  • Если вход выполнен успешно:

     $failMsg = urlencode("Logged in successfully")
     header("Location: loginForm.php?okMsg=$msg&redirect=home.php");
    
  • Если вход не выполнен:

     $failMsg = urlencode("Failed to login")
     header("Location: loginForm.php?failMsg=$msg");
    
  • В вашем loginForm.php, где вы сейчас отображаете свои сообщения об ошибках, укажите:

     <? echo  htmlentities($_REQUEST['failMsg']);?>
    
  • В loginForm.php, где вы отображаете журнал успеха, введите сообщение

     <? echo  htmlentities($_REQUEST['okMsg']);?>
    
  • И в голову тег ставить

     <? if(array_key_exists($_REQUEST,'redirect'))
        {
            echo "<meta http-equiv='refresh" content='5;url=/".$_REQUEST['redirect']."' />";
        }    
     ?>
    

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

2 голосов
/ 15 июля 2009

Звучит так, будто вам совсем не нужен AJAX, просто обычная форма, если я что-то упустил.

2 голосов
/ 14 июля 2009
<form method="post" action="login.php">

Вам не нужен AJAX, чтобы сделать это вообще. Если вы используете Javascript для проверки ввода, вы можете добавить onSubmit="return my_validation_function() ... ваша функция проверки должна вернуть true, если все было в порядке, или false, если это не так. (Ложное возвращаемое значение остановит отправку формы)

1 голос
/ 14 июля 2009

Я думаю, вы неправильно поняли весь смысл AJAX. Предполагается, что Ajax работает в фоновом режиме, то есть не меняет URL. Если вы хотите, попробуйте document.location = "foobar";

0 голосов
/ 15 июля 2009

Ваш метод несколько небезопасен и уязвим для некоторых скриптовых атак. Я бы посмотрел на то, чтобы не входить в Ajax и просто использовать обычную форму. Эта статья мне очень помогла:

http://www.evolt.org/PHP-Login-System-with-Admin-Features

У Evolt есть еще один, похожий на тот, который вы пытались выполнить, но я его не читал - просто Google "evolt ajax login"

0 голосов
/ 14 июля 2009

Как уже упоминали другие комментаторы, реальный ответ заключается в том, что вы не можете изменить URL-адрес веб-страницы (кроме идентификатора фрагмента "#", но это не полезно для вас), не заставляя браузер отправлять запрос на этот URL.

Вы не хотите пытаться изменить URL, если отправляете через AJAX. Или вы можете сделать запрос на публикацию, как это предлагается в других комментариях.

<form method="post" action="login.php">

0 голосов
/ 14 июля 2009

Ajax скрывает взаимодействие JS с вашим сервером. Вот для чего. Если вы хотите, чтобы ваш браузер указывал на какой-то URL, вам не следует использовать Ajax. То, что вы пытаетесь архивировать, может быть легко реализовано с помощью простого запроса POST, используя старый добрый <form>. HTTP POST-запросы скрывают параметры запроса от URL-адреса, передавая их внутри заголовка самого сообщения. Таким образом, URL могут быть чистыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...