[RESOLU] Je voudrais sortir de la boucle foreach au bon moment

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Je voudrais sortir de la boucle foreach au bon moment

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 05 oct. 2011, 20:53

Si vous voulez voir la page définitive, il vous faut aller sur http://jolygialo.com. Cet exemple est mis en application sur la page friends.php. Il vous faut créer un compte pour pouvoir y accéder.

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 26 sept. 2011, 22:11

Pour deserialiser, comme tu dis, il faudrait avoir sérialisé, c'est à dire savoir comment est renseignée la BDD....
Ton test n'a pas fonctionné car les données de ta base ne sont pas compressés (sérialisés). Dans mon cas les données sont déjà compressés. Ça marche très bien. sinon tu peux toujours modifier le code. Tu a du courage pour avoir créer une database pour ça. La page complète marche à merveille. Elle est complexe, il y a beaucoup de fonctions. Les ajouts d'amis et les autorisations d’accès aux ressources sont désormais terminés. Maintenant je dois m'occuper du reste.

Re: Je voudrais sortir de la boucle foreach au bon moment

par sirakawa » 26 sept. 2011, 20:59

Pour deserialiser, comme tu dis, il faudrait avoir serialisé, c'est à dire savoir comment est renseignée la BDD....
Je me suis déjà tapé de créer une bdd pour ce test, de constater que tout fonctionnait parfaitement SANS ce satané deserialize... Je n'irai sans doute pas plus loin...

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 26 sept. 2011, 13:30

J'ai intégré le code au projet web. il fonctionne bien mais c'est seulement lorsqu'on rentre une id inexistant dans la base de donnée (par le paramètre get) (page.php?id=9) par exemple, le programme m'affiche une erreur. En fait ce code marche bien mais ce problème viens du fait que je n'ai pas mis de condition si get id n'existe pas dans la base de donnée. De ce fais je vais en mettre une.

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 26 sept. 2011, 12:27

J'ai fais ce code, il à l'air de bien fonctionner, je vais continuer.
<?php
include_once 'includes/db.php';
include_once 'includes/session.php';
if(isset($_GET['id']))
	{
	$id = intval($_GET['id']);
	$sqlbuddy = "SELECT friends FROM users WHERE uid = '". $id ."'";
   $resultat = mysql_query($sqlbuddy) or die (mysql_error());

   if ($row = mysql_fetch_assoc($resultat))	{
	   $friends = unserialize($row["friends"]);
		if (isset ($friends[0]) )	{
			if (in_array($uid,$friends))
				{
				echo "ami";
				} else {
							echo htmlspecialchars($_GET['id']).' n\'a pas de correspondance dans friends';
						 }
			} else {
						echo "Cellule vide";
					 }
		} else {
					echo "pas de résultats dans la requette";
				 }
}

?>

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 26 sept. 2011, 11:41

Ok j'ai trouver ton code, celui dont tu fais référence dans le ton code source, (je n'avais pas parcouru toutes les reponses sur le forum.) Je vais y réfléchir et m’intéresser de plus prés à la fonction in_array.

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 26 sept. 2011, 09:53

Tu m'a écrit dans le code : // + suite du code que je t'ai montré pour la désérialisation et l'update
Mais seulement je ne sais pas de quel partie de code tu veux parler. Dis moi donc quel partie du code. quoi qu'il en soit, il est toujours plus pratique d’écrire un code en entier plutôt que de laisser deviner. Peut tu m’écrire un code entier et correcte ?

Re: Je voudrais sortir de la boucle foreach au bon moment

par AB » 26 sept. 2011, 02:58

Je sais d’où ça viens, ça viens des données qu'on essais de lire a lors qu'elle ne sont pas desérialisées. c'est pour ca que j'ai demander un exemple avec données désérialisées.
Non, moogli t'a donné la bonne réponse.
Ton problème vient du fait que tu as essayé l'algo de sirakawa sans adapter ton code et donc tu te retrouve avec une ressource quand tu utilise mysql_query (pour la deuxième fois).

Il est très conseillé d'écrire ta requête pour ensuite l'exécuter (comme le suggère sirakawa ) donc cela donne :
if(isset($_GET['id']))
{
    $id = intval($_GET['id']);

    $sqlbuddy = "SELECT friends FROM users WHERE uid = '". $id ."'";

    $resultat = mysql_query($sqlbuddy) or die (mysql_error());

    if ($row = mysql_fetch_assoc($resultat))
      {
           $friends = unserialize($row["friends"]);
          // + suite du code que je t'ai montré pour la désérialisation et l'update 
      }
      else
     {
          echo htmlspecialchars($_GET['id']).' n\'a pas de correspondance dans friends';
      }
}
Notes que j'ai casté ta variable en entier pour protéger ta requête mais normalement on utilise mysql_real_escape_string

Bon si avec ça tu n'y arrive pas ...

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 25 sept. 2011, 23:31

Je sais d’où ça viens, ça viens des données qu'on essais de lire a lors qu'elle ne sont pas desérialisées. c'est pour ca que j'ai demander un exemple avec données désérialisées.

Re: Je voudrais sortir de la boucle foreach au bon moment

par moogli » 25 sept. 2011, 23:21

Si tu veux un code complet y a un forum complet.

Ton message d'erreur indique que tu passe, en paramètre de mysql_query() une ressource. C'est a dire le retour d'un mysql_query ou d'un fopen etc, alors qu'il faut que ce soit une chaîne de caractères.

Utilise la fonction var_dump sur la variable requête pour voir ce que c'est. Ensuite remonte dans ton code pour voir d'où ça sort.

@+

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 25 sept. 2011, 22:36

Tu ne m'as pas montrer le même exemple et en désérialsant les données comme mon code inspire, exemple:
$friends = unserialize($row["friends"]);
reprend mon dernier code. Ecris moi un code complet.
Ton code ne fonctionne pas voila l’erreur:
"Warning: mysql_query() expects parameter 1 to be string, resource given in C:\...on line 2 qui correspond à "$resultat = mysql_query($requete);""

Re: Je voudrais sortir de la boucle foreach au bon moment

par sirakawa » 25 sept. 2011, 22:05

Ecuse-moi pour le ton, mais si uid est unique, il n'y a pas besoin de t'entiquiner:
soit ta requere rend un resultat car id = uid soit non*alors tu fais ça en plusieurs fois ( c'est une de mes manies)
$requete = "ta requete";
$resultat = mysql_query($requete);

if ($resultat)
{
$row = mysql_fetch_row($resultat);
}
else
{
$message = inconnu";
}

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 25 sept. 2011, 21:29

En effet uid est un identifiant unique dans la table avec incrémentation de 1 à chaque nouveau utilisateurs.
comme :
toto|1
titi|2
tata|3
Pendant ce temps je continu à travailler sur le script. Je vais corriger les énormités que j'ai faite tout à l'heure, je n'avais pas le temps de travailler.

Re: Je voudrais sortir de la boucle foreach au bon moment

par sirakawa » 25 sept. 2011, 20:52

Je n'avais pas pensé à une question toute simple :
uid est-il unique dans la table comme ceci:
toto|1
titi|2
ou multiple comme ceci:
toto|1
titi|1
ruskof|2
tarara|3
tartre|3
Parce que s'il est unique, le script se réduit à peu de choses...
J'ai tout simulé en supposant qu'il est multiple... mais j'attends confirmation pour continuer à corriger les Hénaurmités qui trainent dans ton code...

Re: Je voudrais sortir de la boucle foreach au bon moment

par Zebu » 25 sept. 2011, 19:51

Je ne m'en sort pas avec ces while. Ce programme fonctionne sans erreurs mais je n'arrive pas a afficher la valeur "$value" il m'affiche directement "absent" si la condition est remplie, ou il ne m'afficher rien car le programme s'est terminé. je voudrais pouvoir afficher "($value)" quand si if(trouve).
<?php
include_once 'includes/db.php';
include_once 'includes/session.php';
$id = ($_GET['id']);
    $sqlbuddy = mysql_query("SELECT friends FROM users WHERE uid = '" . $id . "'") or die (mysql_error());
    while($row = mysql_fetch_array($sqlbuddy))
{
$friends = unserialize($row["friends"]);
if (isset ($friends[0]) ) {
foreach($friends as $key => $value )
{
$value = $friends[0];
$trouve = ($value == $id);
}
while ((!$trouve) and ($value = next ($friends)))
{
    $trouve = ($value == $id);
}
if ($trouve)
{
     print "$value";
}
else
{
        print "absent";
}

}
//echo "inexistant";
}
//echo "pas d'amis";
?>