2012-04-20 2 views
0

Я пытаюсь создать кнопку выхода с php. Я мог бы пойти по этому совершенно неверному пути, но так или иначе я пытаюсь удалить файл cookie одним нажатием кнопки.PHP: Как удалить cookie с событием onclick с помощью кнопки

<?php 
    function logOut() { 
     setcookie('userDetails[username]',"", time()-1200); 
    } 



if(isset($_COOKIE["userDetails"])) { 
    echo "<table id='rtgLoginBox'>" ; 
     echo "<tr>" ; 
      echo "<td> Cookie " . $_COOKIE["userDetails"]["username"] . "!"; 
      echo "<td></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td><input id='rtgLoginBtn' type='submit' value='Log Out' onclick=\"logOut();\" /></td>" ; 
      echo "<td>"; 
      echo "<td></td>" ; 
      echo "<td></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td></td>" ; 
      echo "<td></td>" ; 
     echo "</tr>" ; 
    echo "</table>" ; 
} else { 
    echo "<table id='rtgLoginBox'>" ; 
     echo "<tr>" ; 
      echo "<td><form action='process.php' method='post'>Username:</td>" ; 
      echo "<td><input name='usernamein' id='rtgUsernameTxt' type='text' size='20' class='rtgSignUpTxt'/></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td>Password:</td>" ; 
      echo "<td><input name='passwordin' id='rtgPasswordTxt' type='password' size='20' class='rtgSignUpTxt' /></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td></td>" ; 
      echo "<td><input id='rtgLoginBtn' type='submit' value='Log In' /> </form><input id='rtgLoginBtn' type='submit' value='Sign Up' onclick=\"location.href='SignUp.php'\" /></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td></td>" ; 
      echo "<td><a href='mysite.com'><p style='padding:0 !important;'>Forgot Login Details?</p></a></td>" ; 
     echo "</tr>" ; 
    echo "</table>" ; 
    } 

    ?> 

Насколько я читал в Интернете, это должно работать? Я также попытался поместить функцию под эхо-таблицу, но это тоже не сработало.

+2

PHP не событийный язык –

+0

Как бы идти о преодолении разрыва, то, таким образом, выйти кнопку будет сбросить кук? –

+0

Проблема заключается в том, что, пока вы настраиваете cookie на отрицательное время, чтобы стереть его так, как вы должны, заголовки не были отправлены в браузер, прежде чем вы пытаетесь продолжить процесс на основе cookie. Просто отключите cookie. 'unset ($ _ COOKIE ['userDetails'])' – MetalFrog

ответ

1

Этот код заставит человека выйти из системы, если он нажмет кнопку выхода из системы, а затем перенаправит их на новую страницу под названием whatever.php. Вы, очевидно, можете изменить это так, как хотите.

<?php 
    function logOut() { 
     setcookie('userDetails[username]',"", time()-1200); 
     unset($_COOKIE['userDetails']); 
    } 

if ('POST' === $_SERVER['REQUEST_METHOD']) 
{ 
    logOut(); 
    header('Location: /whatever.php'); 
    exit; 
} 

if(isset($_COOKIE["userDetails"])) { 
    echo "<form action='".htmlspecialchars($_SERVER['PHP_SELF'])."' method='post'><table id='rtgLoginBox'>" ; 
     echo "<tr>" ; 
      echo "<td> Cookie " . $_COOKIE["userDetails"]["username"] . "!"; 
      echo "<td></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td><input id='rtgLoginBtn' type='submit' value='Log Out' /></td>" ; 
      echo "<td>"; 
      echo "<td></td>" ; 
      echo "<td></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td></td>" ; 
      echo "<td></td>" ; 
     echo "</tr>" ; 
    echo "</table></form>" ; 
} else { 
    echo "<table id='rtgLoginBox'>" ; 
     echo "<tr>" ; 
      echo "<td><form action='process.php' method='post'>Username:</td>" ; 
      echo "<td><input name='usernamein' id='rtgUsernameTxt' type='text' size='20' class='rtgSignUpTxt'/></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td>Password:</td>" ; 
      echo "<td><input name='passwordin' id='rtgPasswordTxt' type='password' size='20' class='rtgSignUpTxt' /></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td></td>" ; 
      echo "<td><input id='rtgLoginBtn' type='submit' value='Log In' /> </form><input id='rtgLoginBtn' type='submit' value='Sign Up' onclick=\"location.href='SignUp.php'\" /></td>" ; 
     echo "</tr><tr>" ; 
      echo "<td></td>" ; 
      echo "<td><a href='mysite.com'><p style='padding:0 !important;'>Forgot Login Details?</p></a></td>" ; 
     echo "</tr>" ; 
    echo "</table>" ; 
    } 

    ?> 
1

Как вы говорите "OnClick =" Выход()", вы вызываете функцию Выход() из JavaScript, а не PHP ....

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

Как кто-то требует php-страницу, например index.php, сервер получает требование и ищет index.php на своем диске в соответствии с URL-адресом, который вы ему дали .... затем он интерпретирует весь файл php в html и переносить html-документ в браузер ... так что перед экраном появляется больше не php-кодов, а статический HTML-документ ...

Если вы хотите сделать страницу интерактивной, вставьте javaScript в ваша веб-страница, javascript транслируется в браузер в виде обычного текста, и работает в браузере, а не на сервере.

поэтому сайт использует как JS и PHP, PHP используются для решения на стороне сервера работает как запросы к базам данных и управлению ими всему сайтом ... и Javascript работает на страницах ..

поэтому, если вы хотите изменять или удалять файлы cookie в интерактивном режиме, вам нужен javascript, вы можете объявить функцию «logOut()» в javascript и управлять файлами cookie с этим .... или если вы действительно хотите управлять файлом cookie с помощью php, используйте js для передайте команду через ajax в некоторый php-файл и удалите файл cookie в php.

0

Хорошо, у меня есть странное, но эффективное решение этой проблемы. Проблема в том, что вы не можете вызвать функцию php, true, но вы можете вызывать POST на PHP, добавив в форму поле HIDDEN Input со значением «whatever», а затем используйте событие onclick кнопки, чтобы изменить это значение к чему-то вроде «вырезать». Затем проверьте значение ключа = «вырезать» при вызове метода POST. Возможно, вы не сможете изменить значение до «notCut» с помощью этой процедуры, но если вы достаточно креативны, вы можете установить таймер, который так часто меняет значение на «notCut» ... Протестировал это сам и это прекрасно работает!

<?php 
if (array_key_exists('cutter', $_POST)) { 
      if ($_POST["cutter"] == 'cut') { 
      setcookie("yourCookie", "cookie", time() - 60 * 60); 
      echo "You ate the cookie!"; 
     } 
     } 
?> 

    <form method="post"> 
     <input type="text" id="cutter" name="cutter" value="NOTcut" hidden="true"> 
     <input id='cutter' type="submit" value="Cookie Cutter" onclick="document.getElementById('cutter').value='cut'"> 
    </form>