2011-09-13 43 views
2

我做了一個「喜歡」按鈕,我的產品頁面,此代碼:PHP/MySQL的Like按鈕

<?php 
if('POST' == $_SERVER['REQUEST_METHOD']) { 
$sql = "UPDATE table set `likes` = `likes`+1 where `product_id` = '1'"; 
$result=mysql_query($sql); 
} 
?> 

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST"> 
<input type = "submit" value = "like"/> 
</form> 

就像一個魅力excpet一個小問題在於在每次訪問頁面註冊一個'喜歡'。

有人可以幫助解釋我需要chnage /添加新的'喜歡'只有當提交實際的表單時才註冊嗎?

感謝 丹

+3

默認的'REQUEST_METHOD'是'GET',我沒有看到這可能導致一個像訪問頁面時。除非你的意思是用戶按F5? –

回答

3
<?php 
if($_POST['like']) { 
$sql = "UPDATE table set `likes` = `likes`+1 where `product_id` = '1'"; 
$result=mysql_query($sql); 
} 
?> 

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST"> 
<input type = "submit" value = "like" name='like'/> 
</form> 

這應該工作;-)

+0

這似乎是做伎倆,蝙蝠俠:)(所以告訴我,我不能回答兩分鐘,但會標記這個然後) – Dan

+0

雖然不是任何延伸的dealbreaker,這似乎並沒有更新上顯示的數字頁。刷新或回訪時,該數字已正確增加,但未在表單提交中增加。有沒有解決這個問題,還是應該和它一起生活?謝謝 – Dan

+0

@丹,你可以顯示代碼顯示相似的數量。一個盲目的猜測是SELECT會在更新之前發生..? – Bruce

4
<?php 
if ($_POST['like']){ 
    $sql = "UPDATE table set `likes` = `likes`+1 where `product_id` = '1'"; 
    $result=mysql_query($sql); 
} 
?> 

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST"> 
    <input type = "submit" name="like" value = "like"/> 
</form> 
+0

感謝創世紀,作品(與上面的蝙蝠俠的回答一樣):) – Dan

1

首先的 - 在你的SQL您有:

`product_id` = '1' 

不使用的值id作爲一串:

`product_id` = 1 

關於你的問題:

添加另一個條件:

if ('POST' == $_SERVER['REQUEST_METHOD']) { 
    if (!empty($_POST['submitType']) && ($_POST['submitType'] == 'like')) { 
     $sql = "UPDATE table set `likes` = `likes`+1 where `product_id` = '1'"; 
     $result=mysql_query($sql); 
    } 
} 

和HTML:

<input type = "submit" name="submitType" value = "like"/> 
+0

啊好的地方,我在PHPmyAdmin第一次測試,一旦我有了查詢qorking只是粘貼沒有想到,謝謝你接我。 – Dan

8

更好的解決方案,而不是提交頁面,整個頁面重新加載將提出AJAX請求,這就是Facebook'喜歡'的工作方式。

這可以通過使用jQuery JavaScript庫來實現。

的大致輪廓是: -

1)點擊按鈕

2)發送Ajax請求

3)更新HTML顯示按鈕被點擊並防止按鈕reclicking。

+0

謝謝布魯斯,我現在會研究一下,但暫時我會堅持下去。感謝您的建議,但它肯定是一個更好的方式,我只需要看看我能否把它放在一起。 – Dan

+1

@丹我知道這是一個老問題,但AJAX肯定會更好。沒有那麼難,或者:)當點擊按鈕時,只需要執行如下操作:'$ .post('like.php',{parameter1:'val1',parameter2:'val2',anotherParameter:'test'},函數(data){/ * data是來自請求的響應數據* /});'(實際上您不需要在第二個參數中傳遞任何東西,它只是傳遞post數據)。然後,你可以創建一個名爲'like.php'的文件並在那裏執行mysql/php的東西。 – Nathan