2012-12-27 136 views
0

有沒有一種方法可以在每次訪問時使用相同的php文件'favorite.php'來執行兩個單獨的mysql查詢。使用一個php文件來處理兩個mysql查詢?

基本上我有一個用戶個人資料頁面上的鏈接,稱爲添加到收藏夾,鏈接到favorite.php並運行查詢將用戶添加到會話用戶收藏夾列表中。我想向文件添加另一個查詢以在單獨的場合運行,因此下次點擊鏈接以說明表中是否存在最喜歡的ID以刪除它時,將該用戶從會話用戶收藏夾列表中刪除?

這裏我有我的插入查詢,現在我只需要找到一種方式說刪除最喜歡的ID如果存在第二次鏈接點擊?

<?php 

require_once('includes/session.php'); 
require_once('includes/functions.php'); 
require('includes/_config/connection.php'); 


session_start(); 


    confirm_logged_in(); 




    if (isset ($_GET['to'])) { 
    $user_to_id = $_GET['to']; 


} 


if (!isset($_GET['to'])) 
    exit('No user specified.'); 

$user_id = $_GET['to']; 

$result = mysql_query("INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")") 
or die(mysql_error()); 

if($result = mysql_query($query)) 

$result = mysql_query("DELETE FROM ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")") 
or die(mysql_error()); 

header("Location: profile.php?id=" . $user_to_id['user_id']); 


?> 

希望有道理,謝謝。

+0

然後再次運行mysql_query()? – kennypu

+0

肯定會導致以前的SQL導致錯誤?我會試試 –

+3

請注意,mysql_query()是[棄用](http://php.net/manual/en/function.mysql-query.php) –

回答

0

建設DELETE語句時,應該不涉及VALUES關鍵字,

DELETE 
FROM ptb_favorites 
WHERE user_id = val1 AND 
     favorite_id = val2 

所以PHP

$delQuery = " DELETE 
       FROM ptb_favorites 
       WHERE user_id = '" . $_SESSION['user_id'] . "' AND 
         favorite_id = '" . $user_to_id . "'" 
$result = mysql_query($delQuery) or die(mysql_error()); 

一點題外話,查詢與SQL Injection脆弱。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements,你可以擺脫圍繞值使用單引號。

+0

謝謝你,我會看看加入sql保護。有了這個聲明,我需要把一個if或else語句,或只是把它放在原來的查詢? –

+0

此外,我在$ result = mysql_query行 –

1

以下是我會寫腳本,以避免SQL注入,假設你有PHP 5.3或更高版本。 我傾向於使用closures/anonymous functions進行數據庫查詢,但是您可以與其他所有內容一起使用它們。

最後一行,但我很困惑,除非$_GET['to']是一個數組。

<?php 

require_once('includes/session.php'); 
require_once('includes/functions.php'); 

$connection = new PDO('mysql:host=example.com;dbname=you_database_name', 'mysql_username', 'mysql_pass'); 

session_start(); 
confirm_logged_in(); 

$user_to_id = isset($_GET['to']) ? $_GET['to'] : null; 

if (is_null($user_to_id)) { 
    exit('No user specified.'); 
} 

$user_id = $_GET['to']; 

$insert = (function() use ($connection, $user_to_id) { 
    $sql = "INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (?, ?)"; 
    $statement = $connection->prepare($sql); 

    $result = $statement->execute(array(
     $_SESSION['user_id'], 
     $user_to_id 
    )); 

    return $result; 
}); 

if ($insert() === true) { 
    $delete = (function() use ($connection, $user_to_id) { 
     $sql = "DELETE FROM ptb_favorites WHERE user_id = ? AND favorite_id = ?"; 
     $statement = $connection->prepare($sql); 

     $result = $statement->execute(array(
      $_SESSION['user_id'], 
      $user_to_id 
     )); 

     return $result; 
    }); 

    $delete(); 
} 

// Not sure about this line if $user_to_id is not an array 
header("Location: profile.php?id=" . $user_to_id['user_id']); 
+0

處收到語法錯誤,感謝您的建議adam,但是我的代碼中出現了4個語法錯誤。 –

+0

@JamesMatthews對不起,我正在使用'if(!is_null($ user_to_id)'。這實際上應該是'if(is_null($ user_to_id)'(代碼更新)。如果你需要重構一些代碼if你可能會丟失include/_config/connection.php中的其他邏輯 –