Compteur de clic et enregistrement dans BDD

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 12:26

Il faut alors debug le code PHP.
Tu peux récupérer l'affichage généré par le PHP en rajoutant ceci dans la fonction :

Code : Tout sélectionner

success: function(data) { alert(data); },

nanalala
Invité n'ayant pas de compte PHPfrance

07 juin 2012, 14:15

C'est bon cela remarche, j'avais fait une erreur toute bête, j'ai pas eu besoin de débuguer le code PHP.
Alors j'ai réécrit le code pour récupérer et enregistrer le nom de l'image comme on avait vu ce matin et j'ai voulu donc utiliser la fonction basename() que tu m'as donné mais je ne suis pas sur de l'utiliser au bon endroit, parce que je n'ai pas de résultat.

Je te montre ce que j'ai fait :
        mysql_free_result($req);
               
        // Script jqeury pour compter le clique
        echo '
        <script type="text/javascript">                
            // valable pour un seul lien à la fois
            $(document).ready(function(){
                $(\'a[rel="Lien1"]\').click(function() {
                    $.ajax({
                        type:\'POST\',
                        url: \'libs/compteur-clic.php\', // ici on appel le fichier PHP pour compter le clique
                        data: { id : $(this).attr("id"), urlImg : $(this).find("img").attr("src") }, // Ici, on récupère l\id de notre source et le nom de limage(ne pas modifier)
                        async: false
                    });
                    return true;              
                });
            });
        </script>';                
        // lien de téléchargement
        echo "<div id='pub_flottante_main_container_1'>"."<a rel='Lien1' id=".$IdFichier1." href=".$LienFichier1." >"."<img src='images/" . $imageA . "' alt='Random Image' />"."</a>"."</div>" ;
       
	    $chemin = 'images/" .$imageA. ';
		$fichier = basename($chemin, ".jpg");
		?>
J'ai mis ma fonction à la suite du chemin de mon image (ci dessus) et j'ai changer $_POST['urlImg'] par ma variable $fichier (ci-dessous).
if ($ClicValide) {
    $insertion = mysql_query("INSERT INTO compteur_clic (`c_id_source`,`mon_fichier`,`c_date_clic`,`c_ip_visiteur`) VALUES (".intval($_POST['id']).",'".mysql_real_escape_string($_POST['$fichier'])."','".mysql_real_escape_string(date("Y-m-d"))."','".mysql_real_escape_string($_SERVER["REMOTE_ADDR"])."')") or die(mysql_error());
}
J'ai pas d'erreur mais ça change rien, ça ne marche pas. Est ce que la fonction est mal placée?

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 14:18

Oui elle ne sert pas à grand chose... Il faut la mettre dans ta partie PHP qui exécute la requête.
Cette fonction est là pour que tu ne récupères que le nom de l'image.
A moins que tu ne souhaites enregistrer le chemin complet. A toi de voir. :)

nanalala
Invité n'ayant pas de compte PHPfrance

07 juin 2012, 14:34

Ouii c'est tout bon, en effet ça marche mieux si basename est dans la requête.

Merci beaucoup xTG, tout fonctionne, et j'ai bien appris avec toi.
Je n’hésiterais pas à revenir sur ce forum si j'ai besoin d'aide.
Merci encore pour ton aide.

Bonne aprem

nanalala
Invité n'ayant pas de compte PHPfrance

07 juin 2012, 16:41

En fait j'ai une dernière question, cette question je me la pose souvent, comment rétrécir son code?
Et là j'aimerais supprimer ces trois script javascript et les rassembler en un seul script, j'ai essayé de faire ainsi :

[javascript] <script type="text/javascript">
// valable pour un seul lien à la fois
$(document).ready(function(){
$(\'a[rel="Lien1", "Lien2", "Lien3"]\').click(function() {
$.ajax({
type:\'POST\',
url: \'libs/compteur-clic.php\', // ici on appel le fichier PHP pour compter le clique
data: { id : $(this).attr("id"), urlImg : $(this).find("img").attr("src") }, // Ici, on récupère l\id de notre source et le nom de limage(ne pas modifier)
async: false
});
return true;
});
});
</script>'; [/javascript]

Comme tu peux le voir $(\'a[rel="Lien1", "Lien2", "Lien3"]\').click(function() { renferme mes trois liens alors qu'avant c'était séparé $(\'a[rel="Lien1"]\').click(function() {, $(\'a[rel="Lien2"]\').click(function() {
Seulement cela ne fonctionne pas, alors je pense que ma réflexion n'est pas la bonne, est ce que tu peux encore m'aider pour réduire tout ce code en triple?

Merci

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 17:29

Pourquoi ne pas utiliser le même rel pour tes urls dans ce cas ? ^^

nanalala
Invité n'ayant pas de compte PHPfrance

07 juin 2012, 22:32

Je suis désolée mais je ne te comprend pas, est ce une blague parce que ce que je veux faire est pas faisable?

ViPHP
xTG
ViPHP | 7331 Messages

08 juin 2012, 08:16

Euh non bien sûr que ce n'était pas une blague...
Tu définis une valeur rel différente pour chaque lien, mais qui effectue la même fonction.
Donc autant mettre le même rel partout.

En gros ce que tu fais actuellement pourrait se rapporter à ceci :
function traitement(){};
function lien1(){
  traitement();
}
function lien2(){
  traitement();
}
function lien3(){
  traitement();
}

lien1();
lien2();
lien3();
Ici on simplifierai tout de suite en appelant directement la fonction traitement() puisque le traitement est le même.

nanalala
Invité n'ayant pas de compte PHPfrance

08 juin 2012, 11:11

Ok alors j'ai bien compris le principe mais visiblement je l'ai mal appliqué parce que cela ne marche plus, voici la partie initiale :
 mysql_free_result($req);
        echo '
        <script type="text/javascript">                
            // valable pour un seul lien à la fois
            $(document).ready(function(){
                // pour un autre lien il suffit simplement de changer le nom de l\'attribut REL 
                $(\'a[rel="Lien1"]\').click(function() {
                    $.ajax({
                        type:\'POST\',
                        url: \'libs/compteur-clic.php\', // ici on appel le fichier PHP pour compter le clique
                        data: { id : $(this).attr("id"), urlImg : $(this).find("img").attr("src") }, // Ici, on récupère l\id de notre source et le nom de limage (ne pas modifier)
                        async: false
                    });
                    return true;              
                });
            });
        </script>';            

Et voici ce que j'ai fait en suivant ton système :
        mysql_free_result($req);
  function traitement(){
	   echo '<script type="text/javascript">   
	                       $.ajax({
                        type:\'POST\',
                        url: \'libs/compteur-clic.php\', // ici on appel le fichier PHP pour compter le clique
                        data: { id : $(this).attr("id"), urlImg : $(this).find("img").attr("src") }, // Ici, on récupère l\id de notre source et le nom de limage(ne pas modifier)
                        async: false
                    });
	     </srcipt>';   
	   };
	    
	   function Lien1(){
	   echo'<script type="text/javascript">  
		 $(document).ready(function(){
                $(\'a[rel="Lien1"]\').click(function() {
				traitement();
				                    return true;              
                });
            });
         
				}
	   </script>';
	   } 
Mais cela ne me compte plus l'image 1, alors je ne dois pas faire comme il faut.... Je suis pas douée quand même, il y a toujours un truc qui ne va pas....

ViPHP
xTG
ViPHP | 7331 Messages

08 juin 2012, 11:44

Oulala non tu n'as rien compris de mon message...
Le code avec les fonctions était juste un exemple totalement hors de ton problème pour t'expliquer le principe sur quelque chose de plus facile et lisible...

Renommes tous tes attributs rel par la même valeur.
Et dans le sélecteur jquery ne mets que celui là.
Toutes les rel seront connectés à la même fonction.

nanalala
Invité n'ayant pas de compte PHPfrance

08 juin 2012, 11:56

Merci bien cela fonctionne à merveille, je n'ai pas encore la bonne logique quand je réfléchi parce que maintenant que j'ai fait ce que tu m'as dit cela me paraît évident.
Je te remercie encore pour toute l'aide que tu m'as donné, en plus tu répond rapidement est ça c'est vraiment cool.

Bonne journée à toi xTG