Page 1 sur 1

Problème dans un script

Posté : 02 juil. 2007, 11:56
par tounch
Bonjour tt le monde;
Alors voilà je m'explique, j'ai installé sur mon site un script en php d'espace membre (Ts secure) il est vraiment pas mal mais j'ai un gros problème dans l'ajout de contact dans nos favoris.
En effet il est possible d'ajouter un membre du site dans une liste de favoris.
Il faut donc sélectionné un membre et lui demander si oui ou non il veut être mon "ami", jusque là le script fontionne bien. Le membre en question reçois l'invitation et c'est là que le problème arrive en effet si on clique sur "accepter" L'ami ne s'ajoutte pas a ma liste.
Dante un gars d'un forum m'avait mis comme réponse :
Il y a une ereur dans la partit valider un contacte : Login/contact/valide.php
En fait j'ai passé ma sourie sur les liens "Accepter" et je me suis rendu compte qu'il y a toujours
id=3 ... ce qui n'est pas normal si "id" représente la personne que tu veux valider
En cherchant dans le code j'ai vu quelque chose du genre :
$contact = $row[contact]; Mais pas de $id = $row[id]

Il fallait donc l'ajouter, mais bon comme dans les liens d'avant "id" valait 3 j'ai préférer faire une nouvelle variable ..

Voilà normalement apres sa ses parfait ^^

Voilà je vous met le code du script de la page valid.php
j'espère que vous allez savoir m'aider j'en ai grand besoin
merci :)

ps: je sais je devrais apprendre le php et le faire moi même mais j'ai pas envie :oops:
<?
session_start();
if(!session_is_registered("User_Login") || !session_is_registered("User_Pwd"))
{
   print '<META HTTP-EQUIV="refresh" CONTENT="0; URL = ../../index.php?msg=Mauvais+Login+et/ou+Password+!">';
   exit;
}
?>
<?php include("../../include/config.inc.php"); ?>
<?php

if($action == "valide")
{
   $db = mysql_connect($sql_host,$sql_user,$sql_pass);
   mysql_select_db($sql_bdd,$db);

   $sql = "UPDATE $tb_contact SET valide='1' WHERE id='$id'";
   $exec = mysql_query($sql);

   echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL = ?msg=La+validation+à+bien+été+effectuée+!\">";

   mysql_close($db);
}

if($action == "refus")
{
   $db = mysql_connect($sql_host,$sql_user,$sql_pass);
   mysql_select_db($sql_bdd,$db);

   $sql = "DELETE FROM $tb_contact WHERE id='$id'";
   $exec = mysql_query($sql);
   
   echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL = ?msg=Le+refus+à+bien+été+effectuée+!\">";

   mysql_close($db);
}

?>   
<?php

if($msg)
{   
   echo '<div align="center"><span class="Style5">'.stripslashes($msg).'</span></div>';
}

?>
<?php
               
$db = mysql_connect($sql_host,$sql_user,$sql_pass);
mysql_select_db($sql_bdd,$db);

$result = mysql_query("SELECT * FROM $tb_contact WHERE login='".$_COOKIE['connect_login']."' AND valide='0' ORDER BY contact ASC") or die(mysql_error());
   
$query_total = "SELECT * FROM $tb_contact WHERE login='".$_COOKIE['connect_login']."' AND valide='0'";
$res_total = mysql_query($query_total);
$nb_result_nb = mysql_num_rows($res_total);

if($nb_result_nb == "0")
{
   echo "<br><b>Aucun contact en attente de validation</b>";
}

while ($row = mysql_fetch_array($result))
{
         
   $contact = $row[contact];

         
   $query_rep = "SELECT * FROM $tb_contact WHERE login='".$_COOKIE['connect_login']."' AND valide='0'";
   $reponses = mysql_query($query_rep) or die(mysql_error());
   $nb_reponses = mysql_num_rows($reponses);
   
   $query_sql = "SELECT login FROM $tb_connect WHERE login='$contact'";
   $reponse = mysql_query($query_sql) or die(mysql_error());
   $nb_reponse = mysql_num_rows($reponse);
   
   echo "<table width=\"100%\"  border=\"0\" cellspacing=\"1\" cellpadding=\"0\">";
   echo "<tr>";
   echo "<td width=\"2%\">";
   if($login == $contact)
   {
      echo "<img src=\"../images/contact_connect.gif\" width=\"25\" height=\"25\" border=\"0\" alt=\"Online\">";
   }
   else
   {
      echo "<img src=\"../images/contact_non_connect.gif\" width=\"25\" height=\"25\" border=\"0\" alt=\"Offline\">";
   }
   echo "</td>";
   echo "<td width=\"98%\"><A HREF=\"#\" onClick=\"window.open('../details.php?id=".$contact."','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, copyhistory=0, menuBar=0, width=500, height=300');return(false)\">".$contact."</A></td>";
   echo "</tr><tr>";
   echo "<td colspan=\"2\"><div align=\"center\"><a href=\"?action=valide&id=".$id."\">Accepter</a> - <a href=\"?action=refus&id=".$id."\">Refuser</a> - <a href=\"../messagerie/index.php?A=".$contact."\">Envoyer un message</a></div></td>";
   echo "</tr></table>";
}

mysql_close($db);

?>

Posté : 02 juil. 2007, 12:06
par chrislabricole
je ne sais pas si c'est sa, mais qui ne tente rien, n'a rien...., donc :

mais cela (ligne 17):
 $sql = "DELETE FROM $tb_contact WHERE id='".$id."'";
à la place de cela :
 $sql = "DELETE FROM $tb_contact WHERE id='$id'";

Posté : 02 juil. 2007, 12:23
par tounch
j'ai essayé mais non ce n'est pas ça !
mais merci :wink:

Posté : 02 juil. 2007, 13:46
par Sékiltoyai
@chrislabricole : C'est vrai que c'est une très bonne chose de sortir les variables des chaines, mais en l'occurence, dans les chaines double quotées (avec " ), les variables sont interprétées. Plus d'infos ici : http://www.php.net/manual/fr/language.t ... tax.double

Posté : 02 juil. 2007, 13:51
par Ryle
Euh... à priori tu as posté la réponse à ton problème... Quelle est la valeur de $id lorsque tu l'affiche dans tes liens ? :
echo "<td colspan=\"2\"><div align=\"center\"><a href=\"?action=valide&id=".$id."\">Accepter</a> ... ";
$id n'est pas définie dans ta boucle... tu peux utiliser un autre nom de variable si tu veux, ou coller directement $row['id'] pour récupérer l'identifiant de l'invitation retourné par ta requête, mais il faut bien que la valeur vienne de quelque part :)

Sinon quelques remarques en vrac, il vaut effectivement mieux sortir les variables des chaines comme l'a fait chrislabricole, mettre des apostrophes ou guillemets pour délimiter des chaines de caractère lorsque tu utilises un index ( $row['contact'] au lieu de $row[contact] ), pense à utiliser les super globales $_GET et $_POST (ca t'évitera des soucis le jour ou ton code sera sur un serveur qui n'aura pas activé register global :)) et enfin tu n'es pas obligé d'ouvrir et fermer les instruction php à chaque ligne :
au lieu de 
<?php 
  ....
?> 
<?php include("../../include/config.inc.php"); ?> 
<?php 
  ...
?>

ceci serait tout aussi efficace et allegerait ton code ;)
<?php
  .... 
 include("../../include/config.inc.php"); 
  ...
?>
HTH

Re: Problème dans un script

Posté : 02 juil. 2007, 13:55
par Sékiltoyai
je sais je devrais apprendre le php et le faire moi même mais j'ai pas envie :oops:
Nous non plus...
On est là pour aider, pas pour apporter les solutions sur un plateau, enfin, on veut bien le faire , mais ca ne sera pas gratuit...

Posté : 02 juil. 2007, 13:57
par chrislabricole
à oui Sékiltoyai, c'est sa l'interé de PHPFrance, sa permet d'apprendre à tout le monde Image
je ne savait pas... :)

PS: moi, pour les echo, j'utilise tout le temps les apostrophes... :
echo 'mon texte';
c'est mieux, en plus, on est obliger du sortir les variables, c'est mieux lisible je trouve, car c'est coloré ! :)

Posté : 02 juil. 2007, 14:08
par Sékiltoyai
PS: moi, pour les echo, j'utilise tout le temps les apostrophes... :
echo 'mon texte';
c'est mieux, en plus, on est obliger du sortir les variables, c'est mieux lisible je trouve, car c'est coloré ! :)
Très bonne habitude, et c'est même un chouia plus rapide que les doubles quotes.

Posté : 02 juil. 2007, 14:12
par chrislabricole
oui, en effet... :D
j'ai été habituer dès le dépard....
moi, j'ai commencer le PHP avec le siteduzero, vrément pas mal du tout !
pi après j'ai acheté PHP 5 avancé... que j'ai pas fini de lire... :)
bref.. je suis un peu HS là :oops: :lol:

comme disait Ryle, c'est vrai, moi aussi j'utilise cette méthode de faire plusieurs tags <?php ?>
surtout pour les while....

Posté : 02 juil. 2007, 14:46
par tounch
Euh... à priori tu as posté la réponse à ton problème... Quelle est la valeur de $id lorsque tu l'affiche dans tes liens ? :
echo "<td colspan="2"><div align="center"><a href="?action=valide&id=".$id."">Accepter</a> ... ";
$id n'est pas définie dans ta boucle... tu peux utiliser un autre nom de variable si tu veux, ou coller directement $row['id'] pour récupérer l'identifiant de l'invitation retourné par ta requête, mais il faut bien que la valeur vienne de quelque part :)

Sinon quelques remarques en vrac, il vaut effectivement mieux sortir les variables des chaines comme l'a fait chrislabricole, mettre des apostrophes ou guillemets pour délimiter des chaines de caractère lorsque tu utilises un index ( $row['contact'] au lieu de $row[contact] ), pense à utiliser les super globales $_GET et $_POST (ca t'évitera des soucis le jour ou ton code sera sur un serveur qui n'aura pas activé register global :)) et enfin tu n'es pas obligé d'ouvrir et fermer les instruction php à chaque ligne :
au lieu de 
<?php 
  ....
?> 
<?php include("../../include/config.inc.php"); ?> 
<?php 
  ...
?>

ceci serait tout aussi efficace et allegerait ton code ;)
<?php
  .... 
 include("../../include/config.inc.php"); 
  ...
?>
HTH
Tout d'abbord merci pour vos réponses :wink: ,
je ne comprends pas bien ton post Ryle, si je clique sur le lien il m'indique un id de 2 quoiqu'il arrive. J'ai déjà essayé de coller ce ci mais ça ne fonctionne toujours pas. Je ne vois pas ce que je dois faire concretement :oops:
$id = $row[id]
EDIT: j'ai ajouter ce ci mais ça ne marche toujours pas :
echo "<td colspan="2"><div align="center"><a href="?action=valide&id=".$row['id']."">