2013-08-23 129 views
-1

我需要一些幫助,我的腳本,我正在做一個庫登錄/出和頁面,我有它的工作,以便它張貼表單時,他們登錄和出,但我如果他們試圖註銷,並且他們實際上從未登錄過,會想彈出一個js警報告訴他們,但我無法完全明白。PHP更新與if和else語句

下面的代碼:

<?php 
    session_start(); 
    include_once("connect.php"); 
    date_default_timezone_set("America/Winnipeg"); 
    $date = ("m-d-Y"); 
    $timeout = date("g:i:s a"); 

    //search for existing entries 
    if ("SELECT EXISTS(SELECT * FROM signin_out WHERE 
    lname='".$_POST['lastname']."' AND fname='".$_POST['firstname']."' 
    AND date='".$date."')") { 

     //if they exist run this 
     mysql_query("UPDATE signin_out SET timeout='" . $timeout . "' 
      WHERE lname='" . $_POST['lastname'] . "' 
      AND fname='" . $_POST['firstname'] . "' AND timeout='' "); 
     header("Location: ../index.html"); 

     //if they don't exist run this 
    } else { 
     header("Location: ../index.html"); 
     echo "<script type='text/javascipt'>\n"; 
     echo "alert('You did not sign in!');\n"; 
     echo "</script>"; 
    } 
?> 
+1

什麼不工作?當它們不存在時它是否在'它們存在'區塊之間?或者事情只是輸出不正確? – Jordan

+0

header(「location ...」)會在該腳本被調用之前重定向頁面。喲,我們應該重定向到一個get var或其他東西的索引。 like index.php?exists = no然後使用該獲取var來顯示一個錯誤,而不是一個侵入性的js警報 –

+0

請在編寫任何**更多SQL接口代碼之前,您必須閱讀[正確的SQL轉義]( http://bobby-tables.com/php)避免嚴重的[SQL注入漏洞](http://bobby-tables.com/)。另外,'mysql_query'不應該在新的應用程序中使用。這是從PHP的未來版本中刪除的不推薦使用的界面。像[PDO這樣的現代替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)並且將讓你的數據庫代碼更容易得到正確的。 '$ _GET'和'$ _POST'變量應該不會被內插。 – tadman

回答

0

的HTTP Location header已經向他們../index.html長的JavaScript之前被echo編出來。您需要使用該頁面的logout.php頁面或您將頁面重定向到的頁面的$_GET變量,並在此處觸發警報框。

例如:

... 
} else { 
    header('Location: ../index.php?notloggedin'); 
} 

而且某處你index.php

<?php 
if(isset($_GET['notloggedin'])) { 
    echo '<script>alert("You did not sign in!");</script>'; 
} 
?> 

雖然我發現一個alert箱是相當侵擾,我寧願做:

<?php 
if(isset($_GET['notloggedin'])) { 
    echo '<p><strong>You did not sign in!</strong></p>'; 
} 
?>