2011-06-30 27 views
0

因此,我有一個簡單的腳本,可以讓您在任何「團隊名稱」之間進行選擇。當你選擇並取消時,它應該用一個php setcookie來表示選擇的值,這個值是團隊名稱的散列版本。PHP setcookie正在添加Percent Signs

下面是相關代碼:

<?php 
include 'include/db.php'; 

    if(isset($_POST['submitteam'])) { 
     $team_hash = $_POST['teams']; 
     setcookie('ver_aet', $team_hash, time()+2592000); 
     header('Location: index.php'); 
    } 

    $email = $_COOKIE['ver_ame']; 


     //Find the User Id from the Email Hash 
     $sql_finduid = "SELECT * FROM users_sensitive WHERE email_hash = '$email'"; 
     $sql_finduid_result = mysql_query($sql_finduid); 
     while ($row = mysql_fetch_array($sql_finduid_result)) { 
      $user_id = $row['user_id']; 
     } //End Find User Id 
     /* 
     $sql_finduid = mysql_query("SELECT user_id FROM users WHERE email = '$email'"); 
     $user_id = mysql_result($sql_finduid) or die(mysql_error()); 
     */ 

     //Find the Team Id from the User Id above 
     $sql_findteams = "SELECT * FROM team_members WHERE user_id = '$user_id'"; 
     $sql_findteams_result = mysql_query($sql_findteams); 
     if(mysql_num_rows($sql_findteams_result) < 1){ 
       header('Location: registerteam.php?ver_ame=' . $email); 
      } else { 

     while ($row = mysql_fetch_array($sql_findteams_result)) { 
      $team_id = $row['team_id']; 
      /* 
      $sql_finduid = mysql_query("SELECT user_id FROM users WHERE email = '$email'"); 
      $user_id = mysql_result($sql_finduid) or die(mysql_error()); 
      */ 



      if((mysql_num_rows($sql_findteams_result)) <= 1) { 

       $sql_findteamname = "SELECT * FROM teams WHERE team_id = '$team_id'"; 
       $sql_findteamname_result = mysql_query($sql_findteamname); 
       while ($row = mysql_fetch_array($sql_findteamname_result)) { 
        $team_name = $row['team_name']; 
        $team_hash = $row['team_name_hash']; 
       } 

       setcookie('ver_aet', $team_hash, time()+2592000); 
       header('Location: index.php'); 

      } else { 

    //setcookie('ver_ame', $teamname_hash, time()+2592000); 
    //setcookie('ver_aet', $email, time()+2592000); 
    //header('Location: index.php'); ?> 

和HTML

Select the team you would like to view: <br /> 
      <form method="post" action="<?PHP echo $_SERVER['PHP_SELF']; ?>"> 
       <select name="teams"> 
        <?PHP   
        $sql_findteams = "SELECT * FROM team_members WHERE user_id = '$user_id'"; 
        $sql_findteams_result = mysql_query($sql_findteams); 
        while ($row = mysql_fetch_array($sql_findteams_result)) { 
         $team_id = $row['team_id']; 
         /* 
         $sql_finduid = mysql_query("SELECT user_id FROM users WHERE email = '$email'"); 
         $user_id = mysql_result($sql_finduid) or die(mysql_error()); 
         */ 

         $sql_findteamname = "SELECT * FROM teams WHERE team_id = '$team_id'"; 
         $sql_findteamname_result = mysql_query($sql_findteamname); 
         while ($row = mysql_fetch_array($sql_findteamname_result)) { 
          $team_name = $row['team_name'] . "&nbsp;"; 
          $team_hash = $row['team_name_hash'] . "<br />"; 
         ?> 
         <option value="<?= $team_hash; ?>"><?= $team_name . $team_hash; ?></option> 
       <?PHP 
         } 
        } 
       ?> 
       </select> 
       <input type="submit" name="submitteam" value="Submit" /> 
      </form> 
     </div> 
    </div> 
</div> 

基本上,「如果單擊提交按鈕,設置cookie爲隊名。如果沒有點擊,繼續。找到你的電子郵件的cookie,找出你有多少個團隊,如果有一個團隊,讓你的團隊cookie和繼續,如果沒有,顯示所有可用的團隊和allo讓用戶選擇一個。循環「

我目前有$ team_hash回聲只是爲了表明它拉動了正確的散列號(它是)。當我點擊提交時,它循環到頁面的頂部並執行setcookie語句。設置一個cookie,但該cookie似乎設置完成後,結束了其在整個它隨機百分號

應該怎樣設置:d2fea5c982b6cb3f5bffc4998d96cbe5 什麼是實際設置:d2fea5c982b6cb3f5bffc4998d96cbe5%3Cbr +%2F%3E

在哪裏這些額外的東西來自?

+0

%2F和%3E是在一個字符串http://www.w3schools.com/tags/ref_urlencode.asp – niktrs

回答

0

你有一個< br/>在那裏以某種方式,PHP是URL編碼它。

就在這裏

$team_hash = $row['team_name_hash'] . "<br />"; 
+1

謝謝CommunistPancake HTML/url編碼字符!你和弗朗索瓦幫我拉出我的頭髮! – ntgCleaner

+0

沒問題。很高興我能幫上忙。 – CommunistPancake

2

的問題是,你在哈希的末尾添加<br />當你做$team_hash = $row['team_name_hash'] . "<br />";,當你設置選項的值,你使用$team_hash其中包含<br />。當你在做set cookie時,<br />獲得了URL編碼,因此它是在你的cookie的末尾。

簡單改變行:

$team_hash = $row['team_name_hash']; 
+0

哇!我再次做到了。我遇到了一個類似的問題,我在那裏留下了我的「測試」標記。這是一次教訓兩次。謝謝弗朗索瓦!你幫助我超時! – ntgCleaner

+0

@ntgCleaner - 不客氣。 –