2012-04-20 3 views
0

PHP로 로그 아웃 버튼을 만들려고합니다. 나는 이것에 대해 완전히 잘못된 방향으로 가고 있을지 모르지만 어쨌든 버튼 클릭으로 쿠키를 삭제하려고합니다.PHP : 버튼에서 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

문제는 쿠키를 음수로 설정하면 쿠키를 기반으로 추가 처리를 시도하기 전에 헤더를 브라우저로 보내지 않았기 때문입니다. 쿠키를 설정 해제하십시오. '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을 = '로그 아웃()"되기 때문에, 당신은 자바 스크립트가 아니라 PHP에서 함수 로그 아웃()를 호출하는 .... 그리고 우리는 항상 어떤 일이 일어날 때 어떤 종류의 함수를 호출 할 수 있지만 PHP는 그렇게 작동하지 않습니다 ... 이것을 이해하기 위해서는 브라우저/서버 모델에 대해 더 알아야합니다.

누군가가 PHP 페이지 (예 : index.php)를 필요로하므로 서버는 요구 사항을 가져오고 지정한 URL에 따라 디스크에서 index.php를 찾습니다. 그러면 전체 PHP 파일을 다음과 같이 해석합니다. html로 변환하고 html 문서를 브라우저로 전송하십시오 .... 그래서 화면 앞쪽에있는 PHP 코드는 더 이상 PHP 코드가 아닌 정적 HTML 문서로 변환됩니다.

페이지를 대화식으로 만들려면 javaScript를 귀하의 웹 페이지, 자바 스크립트는 일반 텍스트로 브라우저에 전송되며 브라우저가 아닌 서버에서 작동합니다.

그래서 웹 사이트가 모두 JS와 PHP를 사용하여, PHP는 서버 측 처리하는 데 사용됩니다 당신이 원한다면 그렇게

.. 데이터베이스를 쿼리하고 전체 웹 사이트를 관리처럼 작동 ... 그리고 페이지에서 작동 자바 스크립트 변경하거나 대화식으로 쿠키를 제거, 당신이 필요로하는 자바 스크립트, 자바 스크립트에서 "logOut()"함수를 선언하고, ....로 쿠키를 제어 할 수 있습니다. 또는 정말로 PHP로 쿠키를 제어하려면 js를 사용하십시오. ajax를 통해 명령을 일부 PHP 파일로 전달하고 PHP에서 쿠키를 삭제하십시오.

0

좋아,이 문제에 대한 이상하지만 효과적인 솔루션이 있습니다. 문제는 PHP 함수를 호출 할 수 없다는 것입니다.하지만 HIDDEN 입력 상자를 "whatever"값으로 폼에 추가 한 다음 버튼의 onclick 이벤트를 사용하여 값을 변경하면 PHP에 POST를 호출 할 수 있습니다 "컷"과 같은 것. 그런 다음 POST 메소드를 호출 할 때 key = "cut"값을 확인하십시오. 이 절차로 값을 "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> 
관련 문제