rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[PHP] Pb sur array

Posté par Yull Master, le mercredi 14 novembre 2007 à 15:37:14
Bonjour,

Pour commencer deja un grand merci a tous ceux qui tenterons de m'aider.

Je vais essayer d'etre clair mais cela ne sera pas facile.

En gros voila ce que je souhaite mettre en place.

C'est un systeme qui va aller chercher tout les membres inscrit sur ma base et mettre un checkbox coché si ce membre est amis du membre connecté.

Je reussis a ressortir l'ensemble de mes membres avec les checkbox coché ou non correctement.

Je stock ensuite tout cela dans des array afin de pouvoir modifier , ajouetr ou supprimer un amis.

le probleme est que lorsque je supprime un amis par exemple cela decale les lignes de mon array, puisque certaine valeur n'existe plus, ce qui fausse la suite de mes checkbox.

Je cherche donc une solution a ce probleme.

voici un exemple de print sur mes array.

dans cette exemple le membre (n°5) est amis de tout les autres membres (n° 2,3,4,6)

Array ( [0] => 2 ) Array ( [0] => 5 )

Array ( [0] => 3 ) Array ( [0] => 5 )

Array ( [0] => 4 ) Array ( [0] => 5 )

Array ( [0] => 6 ) Array ( [0] => 5 )


dans celui-ci le membre n'est plus amis avec le membre n°3

Array ( [0] => 2 ) Array ( [0] => 5 )

Array ( [0] => 4 ) Array ( [0] => 5 )

Array ( [0] => 6 ) Array ( [0] => 5 )

Warning: Invalid argument supplied for foreach() in c:\documents and settings\garnier\mes documents\web\liste.php on line 88
Array ( [0] => 6 ) Array ( [0] => 5 )


comme vous le voyez cela creer un decalage car la valeur de mon array n'existe plus, ce qui fausse mes checkbox.

voici maintenant les code de ma page en esperant que quelqu'un aura une solution a me proposer.

cdt

Yull

$retourliste = mysql_query("SELECT Nom_ind, Num_ind, conect FROM individu WHERE Num_ind<>1 and Num_ind<>'$numa' ORDER BY Num_ind ASC LIMIT " . $premierlisteAafficher . ', ' . $nombreDelistesParPage);
$retourliste2 = mysql_query("SELECT Num_amis, Ind_amis FROM amis WHERE Ind_amis='$numa' ORDER BY Num_amis ASC LIMIT " . $premierlisteAafficher . ', ' . $nombreDelistesParPage);

$nb=0;

while ($donneesliste = mysql_fetch_array($retourliste))
{
$nb++;
$donneesliste2 = mysql_fetch_array($retourliste2);
$xa = $donneesliste['Num_ind'];
$ya = $donneesliste['conect'];

foreach ($donneesliste2 as $cle=>$valeur){
// et tu mets ça dans un array
   if( substr($cle,0,8)=="Num_amis"){ // si le nom du champ commence par "Num_amis"
      $index=substr($cle,8);  // tu retrouves le numéro du amis et ça te servira de cle pour l'array
      $array_numamis[$index]=$valeur;
 }
   if( substr($cle,0,8)=="Ind_amis"){ // si le nom du champ commence par "Ind_amis"
      $index=substr($cle,8);  // tu retrouves le numéro du individu et ça te servira de cle pour l'array
      $array_indamis[$index]=$valeur;
 }
}

  print_r($array_numamis);
  print_r($array_indamis);


foreach($array_numamis as $cle=>$value){
$za=$value; // recup numero amis
$wa=$array_indamis[$cle];

?>
<table style="border-collapse: collapse;">
<tr><th style="border: 0px;" VALIGN="top" ALIGN="center">
<?
if (($za == $xa) AND ($wa == $numa))
{
?>
<input type="checkbox" name="<?php echo 'amis'.$nb ; ?>" CHECKED />
<?
}
else
{
?>
<input type="checkbox" name="<?php echo 'amis'.$nb ; ?>" />
<?
}
}
?>
<input type="hidden" name="<?php echo 'Ind_amis'.$nb ; ?>" value="<? echo $numa;?>" />
<input type="hidden" name="<?php echo 'Num_amis'.$nb ; ?>" value="<? echo $donneesliste2['Num_amis'];?>" />
<input type="hidden" name="<?php echo 'Num_ind'.$nb ; ?>" value="<? echo $donneesliste['Num_ind'];?>" />
<input type="text" style="border: 0px; color: rgb(48,117,192); font-size: 15px; font-family: Papyrus; text-align: center;" name="<?php echo $xa.$nb ; ?>" value="<? echo $donneesliste['Nom_ind'];?>"
onClick="window.open('View.php?numv=<? echo $xa ?>',null,'width=815,height=800, status=yes, directories=yes, toolbar=yes, location=yes, menubar=yes, scrollbars=yes, resizable=yes');">
Configuration: Windows 2000
Firefox 2.0.0.9
Répondre à Yull Master  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le mercredi 14 novembre 2007 à 17:08:11
salut,

une idée:

pourquoi tu n'utilises pas un array à deux dimensions

array[5][1]
array[5][2]

etc

ou 5 est ami avec 1 et 2 etc..

??
Répondre à Alain42

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Yull Master, le jeudi 15 novembre 2007 à 10:03:31
héhé salut Alain42,

Encore une fois tu viens m'aider et j'en suis fort content.^^

J'ai jamais utilisé les tableau a 2D et j'y connais rien donc je vais me renseigner voir si je comprend quelque chose si tu pense que cela peu resoudre mon probleme.

Tu m'avais tres bien expliquer les array simple car j'y comprenais rien mais bon pour cette fois je vais tenter de comprendre seul vus que je commence a comprendre le focntionnement des array.

Merci de ta reponse, je me renseigne, teste et si j'ai des problemes je reviendrai demander.

En tout cas encore merci de ton aide.

;-)

cdt
Yull
Répondre à Yull Master

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Yull Master, le jeudi 15 novembre 2007 à 11:11:56
Bon je reussis pa sa trouver un tuto pour m'expliquer clairement l'utilisation des array a 2d.

quelqu'un aurai t'il un lien, ou alors le courage de m'expliquer rapidement ?

Merci d'avance
cdt
Yull
Répondre à Yull Master

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kij_82, le jeudi 15 novembre 2007 à 13:41:50
Explication (je suis pas très doué pour ca mais qui ne tente rien n'a rien parait-il) :

Un tableau à une dimension te sert à stoker des choses dans des "cases", n'est ce pas ? Et bien un tableau 2D il faut voir ca comme un tableau de tableau. On peut donc distinguer deux niveaux de lecture / écriture dans ces tableaux :

Premier niveau : (cf syntaxe suivante : $tab[0]) sert à stocker l'ensemble des "sous tableaux".
Deuxième niveau : (cf syntaxe suivante : $tab[0][1]) sert à stocker les valeurs pour ton premier tableau.

Prenons un exemple concret, tu veux pouvoir enregistrer une liste d'utilisateur et chaque utilisateur possède une liste d'amis.
Tu peux stoker ces informations sous la forme d'un tableau 2D comme suit :

// --- $tab[0] = liste des amis d'Arthur
$tab[0][0] = "Paul";
$tab[0][1] = "Jean";
// --- $tab[1] = liste des amis de Jean
$tab[1][0] = "Arthur";
$tab[1][1] = "Simon";
$tab[1][2] = "Nicolas";
// --- etc...


Ensuite ce qu'il y a de bien en PHP c'est que tu peux remplir tes tableaux sans spécidier pour autant la taille lorsque tu le créé (du moins il me semble), de même, plutot que de référencer avec des indices, tu peux construire ta liste sous forme de "hashtable" qui est en fait un tableau auquel chaque entrée est une clef qui est associée à une valeur comme suit :

ma list = {  clef => valeur,
                  clef => valeur,
                  clef => valeur,
                  etc.. }


Bien sur il faut que les clefs soit uniques, auquel cas si tu tente d'ajouter dans ta liste une entrée dont la clef existe déjà, la valeur sera alors écrasée par la nouvelle, et non ajoutée.

Pour reprendre l'exemple ci-dessus de la gestion d'une liste de "contact", ca donnerai ca :

// --- $tab[0] = liste des amis d'Arthur
$tab["Arthur"][0] = "Paul";
$tab["Arthur"][1] = "Jean";
// --- $tab[1] = liste des amis de Jean
$tab["Jean"][0] = "Arthur";
$tab"Jean"][1] = "Simon";
$tab["Jean"][2] = "Nicolas";


Encore mieux, quand tu veux ajouter une valeur dans ton tableau, tu n'es pas obligé de spécifier l'indice. Php le gère très bien tout seul :

// --- $tab[0] = liste des amis d'Arthur
$tab["Arthur"][] = "Paul";
$tab["Arthur"][] = "Jean";
// --- $tab[1] = liste des amis de Jean
$tab["Jean"][] = "Arthur";
$tab"Jean"][] = "Simon";
$tab["Jean"][ ] = "Nicolas";


Tu veux aussi peut etre pouvoir ajouter une valeur uniquement si elle n'existe pas encore (une valeur je parle, pas une clef), dans ce cas un petit test comme suit sera utile :
if ( ! in_array($tab["Arthur"], "Paul") ){
   $tab["Arthur"][] = "Paul";
}



Voilà, j'espère que ca aura pu t'éclaircir un peu sur l'utilisation d'un tableau 2D.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
Répondre à kij_82

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le jeudi 15 novembre 2007 à 13:59:40
Salut,

Pas mal l'expliquation !

et en complément, pour visualiser ce qu'il y a dans ton array quand tu veux debugger, un echo tout simple ne donne rien, alors:

si ton array s'appelle $array_amis

echo "<pre>";
print_r($array_amis);
echo "</pre>";


les echo <pre> c'est pour que l'affichage soit "bien" !
Répondre à Alain42

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Yull Master, le jeudi 15 novembre 2007 à 14:48:54
ah merci kij_82 pour cette reponse tres clair.

j'ai reussi a faire correctement mon tableau (enfin je pense ^^).

Mais j'ai toujours le meme probleme avec des checkbox qui ne sont pas cochés alors qu'ils le devraient.

Je vous met donc mon code retouché avec les array 2d.

<form method="POST" action="Saveliste.php">
<table style="border-collapse: collapse;">
<tr><th style="border: 0px;" VALIGN="top" ALIGN="center"><img src="images/H.jpg" border= "0"/></th></tr>
<tr><th style="border: 0px;" VALIGN="top" ALIGN="center">
<p>
<h5>
Amis :<br><br>
</th></tr>
</table>
<?


 include("Conect.php");

if (isset($_SESSION['Login']))
{
$numa = $_SESSION['Login'];
}
else
{
include("VLog2.php");
}

if (isset($_GET['pagela']))
{
    $pagela = $_GET['pagela']; // On récupère le numéro de la page
}
else 
{
    $pagela = 1; // défaut
}

//nb de amis par page
$nombreDelistesParPage = 10;

// On calcule le numéro du premier ami qu'on prend pour le LIMIT de MySQL
$premierlisteAafficher = ($pagela - 1) * $nombreDelistesParPage;

// On récupère le nombre total de amis
$retourliste = mysql_query("SELECT COUNT(*) AS nb_amis FROM individu WHERE Num_ind<>1");
$donneesliste = mysql_fetch_array($retourliste);
$totalDeslistes = $donneesliste['nb_amis'];

// On calcule le nombre de pages à créer
$nombreDePagesliste  = ceil($totalDeslistes / $nombreDelistesParPage);

// On récupère les 3 dernières news
$retourliste = mysql_query("SELECT Nom_ind, Num_ind, conect FROM individu WHERE Num_ind<>1 and Num_ind<>'$numa' ORDER BY Num_ind ASC LIMIT " . $premierlisteAafficher . ', ' . $nombreDelistesParPage);
$retourliste2 = mysql_query("SELECT Num_amis, Ind_amis FROM amis WHERE Ind_amis='$numa' ORDER BY Num_amis ASC LIMIT " . $premierlisteAafficher . ', ' . $nombreDelistesParPage);

$nb=0;

while ($donneesliste = mysql_fetch_array($retourliste))
{
$nb++;
$donneesliste2 = mysql_fetch_array($retourliste2);
$xa = $donneesliste['Num_ind'];
$ya = $donneesliste['conect'];
$za = $donneesliste2['Num_amis'];
$wa = $donneesliste2['Ind_amis'];

foreach ($donneesliste2 as $cle=>$valeur){
// et tu mets ça dans un array
// --- $tab[$numa] = liste des amis de "$numa"
$tab[$numa][$donneesliste2['Num_amis']] = $donneesliste['Nom_ind'];
}

?>
<table style="border-collapse: collapse;">
<tr><th style="border: 0px;" VALIGN="top" ALIGN="center">
<?
if ( ! in_array($tab[$numa], $xa) )
{
?>
<input type="checkbox" name="<?php echo 'amis'.$nb ; ?>" CHECKED />
<?
}
else
{
?>
<input type="checkbox" name="<?php echo 'amis'.$nb ; ?>" />
<?
}

?>
<input type="hidden" name="<?php echo 'Ind_amis'.$nb ; ?>" value="<? echo $numa;?>" />
<input type="hidden" name="<?php echo 'Num_amis'.$nb ; ?>" value="<? echo $donneesliste2['Num_amis'];?>" />
<input type="hidden" name="<?php echo 'Num_ind'.$nb ; ?>" value="<? echo $donneesliste['Num_ind'];?>" />
<input type="text" style="border: 0px; color: rgb(48,117,192); font-size: 15px; font-family: Papyrus; text-align: center;" name="<?php echo $xa.$nb ; ?>" value="<? echo $donneesliste['Nom_ind'];?>"
onClick="window.open('View.php?numv=<? echo $xa ?>',null,'width=815,height=800, status=yes, directories=yes, toolbar=yes, location=yes, menubar=yes, scrollbars=yes, resizable=yes');">

<?
if ($ya==1)
{
    echo "<FONT COLOR=green>(connecté)</FONT>";
}
else
{
    echo "<FONT COLOR=red>(non connecté)</FONT>";
}
?>
<br>
</th></tr>
</table>
<?
} // Fin de la boucle des news
echo "<pre>";
print_r($tab[$numa]);
echo "</pre>";
?>
</th></tr>
<br /></h5>
<tr><th style="border: 0px;" VALIGN="top" ALIGN="center">
<br /><input type="image" value="Modifier" src="images/BPM.jpg"></th></tr>
</form>



En tout cas encore un grand merci a kij_82 et Alain42 pour votre aide.

Cdt
Yull
Répondre à Yull Master

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Yull Master, le vendredi 16 novembre 2007 à 10:53:33
ah et desolé mais j'ai oublié de dire qu'n message d'erreur apparait :

Warning: in_array(): Wrong datatype for second argument in c:\documents and settings\garnier\mes documents\web\liste.php on line 100
Répondre à Yull Master

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain42, le vendredi 16 novembre 2007 à 13:36:39
Salut,

if ( ! in_array($tab[$numa], $xa) )

c'est l'inverse: (d'abord l'aiguille, ensuite la botte de foin)

if ( ! in_array( $xa,$tab[$numa]) )



Une suggestion, tes variables $wa $ya $za ne sont pas très explicites, donnes leur des noms plus "parlants", le code est plus facile à comprendre.

par ex à la place de $za => $Num_amis_lu

@lain
Répondre à Alain42

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Yull Master, le vendredi 16 novembre 2007 à 14:00:39
Re Salut,

Merci Alain42 tu es vraiment un chef. ca marche parfaitement hormis des message d'erreur qui apparaissent tjrs mais le truc fonctionne.

au passage je vais suivre tes conseil et renommer mes variable.

Encore merci donc a kij_82 pour sa superbe explication et a Alain42 pour toute l'aide qu'il m'a apporté.

Vive CCN et vive mes deux sauveurs ^^
Répondre à Yull Master

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 kij_82, le vendredi 16 novembre 2007 à 14:35:30

Bon, j'arrive en retard on dirais :)
J'avais deux trois choses à dire mais c'est résolu, tant mieux, j'efface donc mon message.

Bon courage pour la suite.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
Répondre à kij_82
Discussions pertinentes trouvées dans le forum
01/04 15h36PB PHP array2
22/07 20h41[php array] 2 dimensions / 3 colonnes7
08/07 15h11[PHP] Array + variables dynamiques4
27/02 09h55[php] array8
19/12 15h46Php : Array => recherche / Tri par nom11
Plus de discussions sur « [PHP] Pb sur array »
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger WAMP Server 2.0cWAMP Server - WAMP5 (WAMP signifiant Windows Apache Mysql PHP) est une plateforme de développement Web sous Windows. Il vous permet de...Catégorie: Serveurs
Licence: Freeware/gratuit
Télécharger easyPHP 2.0b1easyPHP - EasyPHP est un environnement de travail packagé comprenant le serveur web Apache, le système de gestion de bases de données...Catégorie: Serveurs
Licence: Open Source
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [PHP] Pb sur array »