Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou com um problema no uso do JQuery, Ajax, PHP e MySQL. Antes de postar o código que eu fiz em si, quero explicar o que realmente quero fazer.
Eu quero fazer um sistema de favorito, mas sem contagens de favoritos. Só vai haver um botão, que lembra muito o curtir do facebook. Já pesquisei muito, tentei adaptar muitos códigos que eu li na internet, mas nenhum obtêm êxito.
Bom, vamos ao código MySQL da tabela favoritos:
CREATE TABLE IF NOT EXISTS `fav` (
favID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
userID VARCHAR(40) NOT NULL,
photoID INT NOT NULL
);
O JQuery:
<script src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script>
$(function(){
$('.pht').click(function(){
var id = $(this).attr('rel');
var pgh = $(this).attr('rer');
alert("id="+pgh+"&pht="+id+"&act=unlike");
$.ajax({
type: "POST",
url: "add_likes.php",
data: "id="+pgh+"&pht="+id,
success: function(resposta){
alert('Favoritado');
}
});
});
});
</script>
Aqui o código da img que ao clicar, deveria "ativar" a função javascript:
<img class ='icones post-avatar pht' src='data:image/png;base64,".base64_encode($imagem)."' width='40' height='40' rel='$pht' rer='$user'>
E, por fim, o arquivo add_likes.php:
<?php
require "init.php";
Abre_conexao();
switch($_POST["act"]){
case "like":
if(@mysql_query("INSERT INTO fav VALUES (NULL,'".$_POST["id"]."' , '".$_POST["pht"]."')"){
}
break;
case "unlike":
if(@mysql_query( "DELETE FROM fav WHERE 'userID=".$_POST["id"]."' AND 'photoID=".$_POST["pht"]."'"){
}
break;
}
@mysql_close();
?>
Agradeço por qualquer ajuda.
Qual problema está dando?
Quando eu clico na imagem para ativar a função do Ajax, não acontece nada
o problema parece ser aqui
data: "id="+pgh+"&pht="+id,
tinha que ser um array
data: { propriedade: valor, propriedade: valor }
>
o problema parece ser aqui
data: "id="+pgh+"&pht="+id,
tinha que ser um array
data: { propriedade: valor, propriedade: valor }
Atualizei o código, mas ainda não aconteceu nada para alterar ou excluir a tabela.
<script>
$(function(){
$('.pht').click(function(){
var id = $(this).attr('rel');
var pgh = $(this).attr('rer');
var act = $(this).attr('act');
$.ajax({
type: "POST",
url: "add_likes.php",
data: {id:id,pht:pht,act:act},
success: function(resposta){
alert('Favoritado');
}
});
});
});
</script>veja no console qual o retorno
firefox: F12
aba:rede
Chrome Ctrl+Shift+N
aba: network
Filtre por XHR
clique no botão e vai vendo o que esta errado
>
veja no console qual o retorno
firefox: F12
aba:rede
Chrome Ctrl+Shift+N
aba: network
Filtre por XHR
clique no botão e vai vendo o que esta errado
Screenshot do console:
leia de novo
eu disse na aba rede ou network filtrar por XHR
Ah sim, perdão.
https://i.imgur.com/TwTxITF.png
Veja esse status 500 ai
Vasculhei pela internet, e achei que eram erros de permissões. e que os arquivos deveriam estar com as permissões configuradas como 644. Arrumei a permissão, mas não resolveu
O erro pode ser por causa disso:
nao existe
type: "POST",
use
method: "POST",
Antes, eu estava programando no Ubuntu 14.04 com o LAMP. Agora, estou com o Windows 10, com o WAMP.
Só que agora, depois de arrumar tudo o que vcs disseram, aparece "Favoritado", mas a tabela não muda e no console não aparece nenhum erro e no network XHR, o status aparece como 200 OK
Onde faz o insert?
no add_likes.php
ele recebe os parametros?
se nao
verifica o JS
se sim
a query esta certa?
parece que nao
qual o erro?
vc não vai saber pq esta suprindo o erro com arroba @
use mysql_error() pra mostrar o erro sql
pra que esse IF se ele nao faz nada, esta vazio?
if(@mysql_query("INSERT INTO fav VALUES (NULL,'".$_POST["id"]."' , '".$_POST["pht"]."')"){
}
pelo navegador abra o arquivo add_likes.php ja passando os parâmetros pra vc ir testando,
vai seguindo o codigo e testando var_dump(), die() etc..
Muito obrigado pela ajuda. Consegui arrumar e está totalmente funcional.
Bom, no final, ficou assim(apenas postando para que outras pessoas com o mesmo problema possam ser ajudadas)
add_likes.php
<?php
require "init.php";
Abre_conexao();
switch($_POST["aca"]){
case "like":
mysql_query("INSERT INTO fav VALUES (NULL,'".$_POST["user"]."' , '".$_POST["ph"]."')");
@mysql_close();
break;
case "unlike":
mysql_query( "DELETE FROM fav WHERE fav.favID='".$_POST['ides']."'");
@mysql_close();
break;
}
@mysql_close();
?>
<script>
$(function(){
$('.pht').click(function(){
var id = $(this).attr('rel');
var pgh = $(this).attr('rer');
var iu = $(this).attr('ides');
var act = $(this).attr('act');
$.ajax({
method: "POST",
url: "add_likes.php",
data: {user:id,ph:pgh,aca:act,ides:iu},
success: function(resposta){
alert('Favoritado');
}
});
});
});
</script>
Qual problema está dando?