Lire une valeur d'un tableau array comparé aune autre valeur

Eléphanteau du PHP | 45 Messages

24 sept. 2011, 20:27

Je n'arrive pas a afficher les "pas amis" le code se plante au niveau de mysql_fetch_array seulement quand les valeurs obtenue n'existent pas.
<?php
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
$sqlbuddy=mysql_query("SELECT * FROM friends WHERE (mem_id='$uid' and buddy_id='$id')") or die(mysql_error());

$row=mysql_fetch_array($sqlbuddy) or die(mysql_error());

$buddy=$row['buddy_id'];

$mem=$row['mem_id'];
mysql_free_result ($sqlbuddy);  
mysql_close ();
echo $buddy;
echo $mem;
if ($uid == $mem)	{
	echo "amis";
}
 echo "pas amis";
?>
Modifié en dernier par Zebu le 25 sept. 2011, 01:14, modifié 3 fois.

Eléphanteau du PHP | 45 Messages

24 sept. 2011, 21:00

J'ai trouver la solution. Je voulais en fait que mon programme continu même si il y a une impossibilité de recupérer le contenu de la cellule de la table de base de donnée. Il suffisais donc d'enlever la gestion d'erreur opéré. Et ça fonctionne bien. Merci à tous.
Voila donc le code en question avec les modifications.
<?php
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
$sqlbuddy=mysql_query("SELECT * FROM friends WHERE (mem_id='$uid' and buddy_id='$id')");

$row=mysql_fetch_array($sqlbuddy);

$buddy=$row['buddy_id'];

$mem=$row['mem_id'];
mysql_free_result ($sqlbuddy);  
mysql_close ();
echo $buddy;
echo $mem;
if ($uid == $mem)	{
	echo "amis";
}
 echo "pas amis";
?>

ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2011, 22:04

Pour que le code fonctionne en toute occasion il faudrait tester la variable $_GET que tu récupères.
Ainsi que le nombre de résultat de la requête. ;)

Eléphanteau du PHP | 45 Messages

24 sept. 2011, 22:08

comment puis-je tester le nombre de résultat de la requete et ainsi avoir tout les résultats. Proposez moi une solution.

Eléphanteau du PHP | 45 Messages

24 sept. 2011, 22:52

J'ai trouver ça mais ça marche pas bien.
<?php
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
$sqlbuddy=mysql_query("SELECT mem_id, buddy_id FROM friends WHERE (mem_id='$uid' and buddy_id='$id') or (buddy_id='$uid' and mem_id='$id')");


while ($row = mysql_fetch_array($sqlbuddy, MYSQL_ASSOC)) {
//    printf("ID: %s  Name: %s", $row["mem_id"], $row["buddy_id"]);


//while($row=mysql_fetch_array($sqlbuddy)

$buddy=$row['buddy_id'];

$mem=$row['mem_id'];
}
mysql_free_result ($sqlbuddy);  
mysql_close ();
if (isset ($mem) ) {
if (($uid = $mem) || ($uid = $buddy))	{
	echo "amis";
} else {
 echo "pas amis";
}
}
?>

Mammouth du PHP | 19672 Messages

24 sept. 2011, 23:54

Zebu, tu n'as pas du parcourir beaucoup le forum.

Sinon tu commencerais à savoir ce qu'on répète assez régulièrement en matière de débogage. Par ailleurs, tu aurais pu observer également qu'il faut un minimum de logique pour créer un code. xTG t'a mentionné un détail important dont tu n'as absolument pas tenu compte, je vais le formuler autrement : regarde ton code tel que tu l'as posté et demande-toi ce qui se passe si $_GET['id'] est vide ? Il y aurait d'autres questions à se poser sur cette même valeur, mais commence déjà avec ça, et reviens avec la réponse qui te semble la plus logique et/ou cohérente.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 45 Messages

25 sept. 2011, 00:03

J'ai décider de travailler avec les données sérializés.
Je voudrais en fait vérifier que les amis sont dans la cellule de la database (sous forme de données sérializés) on deserialize et si l'ami se trouve dans la cellule alors on affiche le texte sinon on affiche un autre texte, mais je ne sais pas travailler avec les tableaux array, quelqun peut il m'aider? merci.
<?php
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
    $sqlbuddy = mysql_query("SELECT friends FROM users WHERE uid = '" . $uid . "'") or die (mysql_error());
    while($row = mysql_fetch_array($sqlbuddy))
{
    $friends = unserialize($row["friends"]);
    if(isset($friends[0])) {
    foreach($friends as $friend)// c'est ici que je veux qu'on me dépanne! pour le reste c'est bon.
    	{
			if (($id=$friend)) //$uid=user_id // ici aussi, désolé mais je connais pas bien les tableaux j'ai besoin d'un cour.
				{
					echo "amis";
				} else {
					echo "Pas amis";
						 }
				}
		}
}
?>
Modifié en dernier par Zebu le 25 sept. 2011, 00:14, modifié 1 fois.

Eléphanteau du PHP | 45 Messages

25 sept. 2011, 00:08

Là n'est pas la question j'ai mis un " if (isset($_get)) " plus haut dans le code mais tu ne le vois pas, je ne l'ai pas envoyer. Ce que je veux faire maintenant je veux travailler avec les données sérializés et donc comparer les valeurs résultant de la lecture de la base de donnée (sérializé) et une valeur fixe obtenue par $_GET ou $uid (qui est l'identifiant du l'utilisateur). Effectivement je n'ai pas beaucoup parcouru le forum, je suis nouveau ici.
Zebu, tu n'as pas du parcourir beaucoup le forum.

Sinon tu commencerais à savoir ce qu'on répète assez régulièrement en matière de débogage. Par ailleurs, tu aurais pu observer également qu'il faut un minimum de logique pour créer un code. xTG t'a mentionné un détail important dont tu n'as absolument pas tenu compte, je vais le formuler autrement : regarde ton code tel que tu l'as posté et demande-toi ce qui se passe si $_GET['id'] est vide ? Il y aurait d'autres questions à se poser sur cette même valeur, mais commence déjà avec ça, et reviens avec la réponse qui te semble la plus logique et/ou cohérente.

Mammouth du PHP | 19672 Messages

25 sept. 2011, 00:12

Dans ce cas, sois plus clair : « ça ne marche pas bien » est une indication un peu trop floue et fourre-tout qui en fin de compte ne veut rien dire et ne nous permet en aucune manière de t'aider à voir où se situe le problème parce qu'on a tout simplement pas la possibilité d'identifier la nature du problème lui-même.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 45 Messages

25 sept. 2011, 00:27

Je pense que j'ai été assez clair quand a mon intention, l'objectif que je veux atteindre avec ce morceau de code. J'ai du mal a travailler avec les tableaux array et je voudrais d'une part savoir lire les données du tableau et d'autre part les comparer à une valeur qui est $uid ou $id. Voila le code (ou j'en suis). Please help me!
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
    $sqlbuddy = mysql_query("SELECT friends FROM users WHERE uid = '" . $uid . "'") or die (mysql_error());
    while($row = mysql_fetch_array($sqlbuddy))
{
    $friends = unserialize($row["friends"]);
    if(isset($friends[0])) {

foreach($friends as $friend => $array )
{
    if (isset($friends[$id]) )
    {
echo "toto";
    }
    else
    {
echo "tata";
    }
}

Mammouth du PHP | 19672 Messages

25 sept. 2011, 00:36

Ok, alors on va détailler un point ou deux :

D'abord, pour te donner une chance de voir directement et rapidement des problèmes dans ton code, prends l'habitude de l'aligner en utilisant une indentation correcte. Là, le dernier code que tu as posté ressemblerait alors à ceci :
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
$sqlbuddy = mysql_query("SELECT friends FROM users WHERE uid = '" . $uid . "'") or die (mysql_error());
while($row = mysql_fetch_array($sqlbuddy))
{
    $friends = unserialize($row["friends"]);
    if(isset($friends[0])) {

        foreach($friends as $friend => $array )
        {
            if (isset($friends[$id]) )
            {
                echo "toto";
            }
            else
            {
                echo "tata";
            }
        }
Or là du coup, on voit immédiatement que deux accolades ne sont pas fermées. Donc second point : sois toujours discipliné et force-toi à toujours prendre certaines habitudes : si tu ouvres une accolade, commence par écrire la fermeture avant même d'ajouter quoi que ce soit d'autre, pareil pour les parenthèses, les guillemets, les balises HTML etc...

Ceci étant dit, il manque quand même un élément à ta question : ça ne marche pas bien, ok, je vais m'en accommoder : mais ce qui manque : qu'est-ce que tu attendais comme résultat, et qu'est-ce que tu as obtenu à la place ( message d'erreur, résultat incohérent, autre..? )

Garde toujours à l'esprit ceci : une question bien posée, c'est un problème bien compris, ça représente les 3/4 de la réponse ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 45 Messages

25 sept. 2011, 00:45

Tu as raison il manquais deux acolades. je veux seulement lire le tableau array de donnée deserializés et comparer la valeur ainsi obtenu avec une autre qui est $id ou $uid. c'est tout.
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
    $sqlbuddy = mysql_query("SELECT friends FROM users WHERE uid = '" . $uid . "'") or die (mysql_error());
    while($row = mysql_fetch_array($sqlbuddy))
{
    $friends = unserialize($row["friends"]);
    if(isset($friends[0])) {

foreach($friends as $friend => $array ) //ici je veux qu'on m'aide
{
    if ($uid=$friends[0] ) // et surtout là comparaison des valeurs obtenue
    {
echo "toto";
    }
    else
    {
echo "tata";
    }
}
}
}

Mammouth du PHP | 19672 Messages

25 sept. 2011, 00:49

Ok, ce point étant vu, voyons la suite. Tu as omis de répondre à la dernière question, mais j'ai idée que tu as effectivement un problème avec la manipulation des tableaux dans des boucles, on va regarder un peu ça.

Prenons un tableau PHP simple et une boucle foreach :
$tableau = array(
    1 => "valeur de l'index 1",
    2 => "valeur de l'index 2",
    3 => "etc..."
);

foreach($tableau as $index => $valeur)
{
    //...
}
J'ai utilisé des variables avec des noms aussi explicatifs que possible :
  1. $tableau : c'est un tbaleau indexé tout ce qu'il y a de classique avec des indexes numériques auxquels correspondent des valeurs.
  2. $index : À chaque tour de la boucle foreach, $index prendra la valeur de l'index de la ligne du tableau en cours de traitement.
  3. $valeur : À chaque tour de la boucle foreach, valeur correspondra à $tableau[$index]. Donc si cet index vaut par exemple 1, alors valeur correspondra à $tableau[1], donc par rapport au jeu d'essai montré plus haut, ça vaudra « valeur de l'index 1 »
Maintenant, regarde ta boucle foreach. Au lieu de index tu as mis $friend, le tableau s'appelle $friends avec un « s » et la valeur est $array : à quoi devraient correspondre l'un et l'autre selon toi d'après les explications qui précèdent ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 45 Messages

25 sept. 2011, 01:06

Je comprends rien aux tableaux, j'ai besoin d'un cours, mais pour le moment je suis pressé de terminer je n'ai pas le temps Je n'obtiens pas le résultat escompté, c'est à dire lire la valeur et la comparé à une autre.
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
    $sqlbuddy = mysql_query("SELECT friends FROM users WHERE uid = '" . $uid . "'") or die (mysql_error());
    while($row = mysql_fetch_array($sqlbuddy))
{
    $friends = unserialize($row["friends"]);
    if(isset($friends[0])) {

foreach($friends as $key => $valeur )
{
     	echo "Clé :" .$key. " Valeur : ".$valeur."<br />\n";
    if ($id==$valeur)
    {
echo "toto";
    }
    else
    {
echo "tata";
    }
}
}
}
Modifié en dernier par Zebu le 25 sept. 2011, 12:59, modifié 1 fois.

Mammouth du PHP | 19672 Messages

25 sept. 2011, 02:02

Continue à ne pas répondre aux questions et c'est moi qui vais te laisser tomber. :evil:

J'essaye de te faire comprendre certains éléments et pour avancer, j'ai besoin que tu donnes certaines réponses. Tu ne veux pas les donner, très bien, comme tu veux. Tu es pressé ? C'est le cadet de mes soucis, personne ici ne fera le boulot à ta place et si tu ne veux pas suivre la voie qu'on te montre pour que tu y arrives quand même, personne ne pourra rien pour toi.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: