Page 1 sur 2

Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 01:51
par Zebu
Bonjour, j'ai un problème avec ce morceau de code. Je voudrais effacer la valeur obtenue par ($_GET["del"])) dans le champs friends de la ligne uid (uid correspondant à la session de l'identifiant de de l'utilisateur) de ma base de donnée qui comporte plusieurs colonne dont uid et friends. mais je ne comprends pas tres bien la boucle foreach avec les données serializés, je voudrais effacer de la table la valeur obtenue par ($_GET["del"]) dans le champ friends de la ligne uid
  if(isset($_GET["del"])) {

$friend_No=($_GET["del"]);
        $query ="SELECT friends FROM users WHERE uid=$uid" ;
        $result=mysql_query($query)or die(mysql_error());      
        while($row = mysql_fetch_array($result)){
        $friend_No = unserialize($row["friends"]);

                   foreach($friend_No as $friend_Nos => $friend_Nos_value)
               {

if($friend_No == $friend_Nos_value)
                 {
                                $friend_No[] = $friend_Nos_value;
                              $query2 ="DELETE FROM users WHERE uid=$uid AND friends=$friend_Nos_value";
                                $result2=mysql_query($query2)or die(mysql_error());    
                   }      
               }                      
       }
}

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 03:05
par AB
Utilises les balises php qu'on y voit un peu quelque chose !!!

Tu le sort d'où ce code ?

En première ligne tu écris
$friend_No=($_GET["del"]);
puis ensuite
$friend_No = unserialize($row["friends"]);
donc la dernière variable définie écrase la première... Faudrait un peu de logique dans ton code.

Quand tu écris
foreach($friend_No as $friend_Nos => $friend_Nos_value)
{

if($friend_No == $friend_Nos_value)
tu comprends ce que tu fais ?

Regardes comment on peut lister un tableau

Au passage tu crois vraiment que ce sujet à sa place dans php avancé ?

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 10:22
par Zebu
Alors tu a une réponse à ma question? je trouve toujours pas.

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 10:58
par Mazarini
Alors tu a une réponse à ma question? je trouve toujours pas.
Il faudrait peut être que tu prennes en compte les premières remarques.

Sur le principe :
1) transformer la chaine de caractères en tableau (ce que tu fais)
2) supprimer du tableau l'élément à supprimer (ce que tu ne fais pas)
3) remettre le tableau sous forme de chaine de caractères (ce que tu ne fais pas)
4) mettre à jour la base de données et non pas supprimer un enregistrement

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 11:41
par Zebu
Si tu te sent écris moi le même type de code et qui marche, car le miens ne fonctionne pas. Comment on fait pour supprimer un élément du tableau?

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 12:39
par Zebu
J'ai modifié le code et ça marche mais pas tout a fait. au lieu de m'effacer l'enregistrement du tableau, il m'ajoute le même enregistrement, comment faire pour effacer cet enregistrement.
if(isset($_GET["del"])) {

$friend_No=($_GET["del"]);
$array_No=($_GET["del"]);
        $query ="SELECT friends FROM users WHERE uid=$uid" ;
        $result=mysql_query($query)or die(mysql_error());      
        while($row = mysql_fetch_array($result)){
        $friend_No = unserialize($row["friends"]);

                   foreach($friend_No as $key => $friend_Nos_value)
              {
     echo "Clé :" .$key. " Valeur : ".$friend_Nos_value."<br />\n";

if($friend_No == $array_No)  {
                                $friend_No[] = $friend_Nos_value;
        $friend_Noq = serialize($friend_No);
						$query2 ="UPDATE users SET friends = '".$friend_Noq."' WHERE uid = $uid" ;
  //                         $query2 ="DELETE FROM users WHERE uid=$uid AND friends=$friend_Nos_value";
                                $result2=mysql_query($query2)or die(mysql_error());    
              }      
          }                      
     }
}

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 12:57
par zeus
Modération :
Zebu, merci d'utiliser les balises [php] quand tu postes du code PHP pour que ça soit lisible (plus de détails ici)

Si tu ne tiens pas compte de cet avertissement, le sujet pourrait être fermé

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 16:08
par Mazarini
      $friend_old = unserialize($row["friends"]);  
      $friend_New = array();
      foreach($friend_old as $key => $value)       
      {
             echo "Clé :" .$key. " Valeur : ".$value."<br />\n";
             if($value <> $array_No)  
             {
                   $friend_New[] = $value;
             }
      }
      $friends = serialize($friend_New);
      $query2 ="UPDATE users SET friends = '".$friends."' WHERE uid = $uid" ;
      $result2=mysql_query($query2)or die(mysql_error());    

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 16:16
par AB
Pour visualiser rapidement un tableau durant le développement tu peux faire :
echo '<pre>';
print_r($mon_tableau);
echo '</pre>';
Quand tu fais :
foreach($friend_No as $key => $friend_Nos_value)
{
if($friend_No == $array_No)
tu compare un tableau à une variable (c'est comme comparer un tiroir à un document) or il faudrait comparer les valeurs du tableau à cette variable :
foreach($friend_No as $key => $friend_Nos_value)
{
if($array_No == $friend_Nos_value)

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 18:18
par Zebu
Ton code marche bien merci beaucoup, ça me fais gagner du temps pour le développement du reste du site Internet. C'est la première fois que je travail avec la sérialisation. Tu es un expert, tu me rend un grand service pour ce morceau de code.
Salut

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 18:27
par Zebu
Voiçi le code complet correspondant à ce morceau de code qui est un systeme de suppression d'ami de la friendlist du site Internet.
  if(isset($_GET["del"])) {

$array_No=($_GET["del"]);
      $query ="SELECT friends FROM users WHERE uid=$uid" ;
      $result1=mysql_query($query)or die(mysql_error());      
      while($row = mysql_fetch_array($result1)){
      $friend_No = unserialize($row["friends"]);
                   foreach($friend_No as $friend_No => $friend_Nos_value)
              {
     	echo "Clé :" .$friend_No. " Valeur : ".$friend_Nos_value."<br />\n";

		if($array_No == $friend_Nos_value)  {
      $friend_old = unserialize($row["friends"]);  
      $friend_New = array();
      foreach($friend_old as $key => $value)      
      {
             echo "Clé :" .$key. " Valeur : ".$value."<br />\n";
             if($value <> $array_No)  
             {
                   $friend_New[] = $value;
             }
      }
      $friends = serialize($friend_New);
      $query2 ="UPDATE users SET friends = '".$friends."' WHERE uid = $uid" ;
      $result2=mysql_query($query2)or die(mysql_error()); 
                    }      
               }                      
	   }
}

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 22 sept. 2011, 19:54
par AB
Tu as mélangé le code de Mazarini qui était presque complet, avec mon exemple qui n'était que partiel pour te faire comprendre le fonctionnement...

Bref c'est un peu n'importe quoi et tu as bien de la chance que cela fonctionne... Faudrait essayer de comprendre sinon tu n'avanceras pas bien loin. Il y a des tutos pour débuter dans phpdebutant.org , developpez.net et des tutos plus ciblés sur ce site. Ce n'est pas un luxe d'en faire quelques uns avant de faire du code.

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 23 sept. 2011, 08:59
par Mazarini
En fait, un array_keys() suivi d'un unset() du post du tableau trouvé serai surement mieux.

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 23 sept. 2011, 20:15
par Zebu
Ca fonctionne a merveille waw. Je peux effacer un ami de ma liste d'amis en deserializan les données qui proviennent de la database, en effaçant les données qu'on veux effacer, sérialiser et renvoyer tout ce la dans l'enregistrement de la base de donnée. Si vous voulez je peux vous donner le code de la page complète, qui permet d'ajouter, accepter, mettre en file d'attente, les amis. j'ai travailler deux jours dessus.
Et toi AB ne sois pas jaloux de moi. j'essaie toujours de comprendre mais je dois terminer le site dans 10 jours, alors ça ne me laisse pas beaucoup de temps. Mais ne t’inquiète pas que j'ai compris.

Re: Probleme de unserialize mise a jour de donnée serialize

Posté : 23 sept. 2011, 20:17
par Zebu
Tu propose quoi Mazarini as tu une solution plus performante ?