Page 1 sur 1

boucle

Posté : 21 déc. 2009, 23:40
par mars77
Bonsoir à tous,

Dans une base de donnée Mysql j'ai un champ numéro. Dans ce champ il y a des numéros et j'aimerai faire une boucle pour savoir quel numéro n'existe pas encore.
Par exemple il y a le numéro 1,2,3 dans ma base et j'aimerai que ma boucle me donne le chiffre 4.

Voilà ma boucle.
<?php

$select ='SELECT numero FROM membres'; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result)) {
$i =0;
while ($i == $row['numero'])
{
$i++;
}
echo'numero'.$i;
}
?>
J'ai essayé plusieurs choses,mais je n'arrive pas à obtenir mon chiffre 4.

Est ce que c'est mes } qui sont mal placées ?

Merci pour votre aide

Re: boucle

Posté : 22 déc. 2009, 10:21
par zeus
Bonjour,
Est ce que c'est mes } qui sont mal placées ?
Pour ça, on a inventé un truc très utile qu'il s'appelle "identation", et qui consiste à décaler vers la droite le contenu d'une paire d'accolades ({)

Identé, ton code donne ça :
<?php

$select ='SELECT numero FROM membres'; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result)) {
  $i =0;
  while ($i == $row['numero'])
  {
    $i++;
  }
  echo'numero'.$i;
}
?>
Donc, a priori, non, ce n'est pas le soucis.
Par contre, ta logique est très bizarre. Si je l'écris en français, ça donne ça :

Code : Tout sélectionner

Récupérer les numéros existants dans la base Pour chaque numéro de la base Faire Initialiser i à 0 Pour chaque valeur du numéro en cours Incrémenter i FinPour Afficher i FinPour
Ce qui est étrange ici, ce que tu remets i à 0 à chaque fois, et que ta seconde boucle foreach ne te sers à rien.

Sinon, pour faire ce que tu cherches à faire, tu pourrais également te contenter de récupérer la plus grande valeur présente dans la base de données, et lui ajouter 1. Ça serait plus rapide, et moins compliqué, puisque faisable en une seule requête SQL :
SELECT MAX(numero)+1 as nouvelle_valeur  FROM membres
Attention, ce système ne marche pas quand il n'y a aucune valeur dans ta base de données. Pour cela, il faut ajouter un petit bout de code PHP qui vérifie qu'une valeur a été remontée :
// Execution de la requête permettant de trouver le 1er numéro non présent dans la table
$str_select ='SELECT MAX(numero)+1 as nouvelle_valeur  FROM membres'; 
$o_result = mysql_query($select, $link) or die ('Erreur : '.mysql_error() );
$a_row = mysql_fetch_array($result)) 

// Si mysql_fetch_array a retourné false, c'est qu'aucun numéro n'est présent en base
if( $a_row === false )
{
	$nouvelle_valeur = 1;
}
// Sinon, c'est que la requête a fonctionnée
else
{
	$nouvelle_valeur = $a_row['nouvelle_valeur']
}

Re: boucle

Posté : 22 déc. 2009, 21:08
par mars77
Merci beaucoup pour ton aide. Je ne savais pas que l'on pouvait directement rechercher le plus grand nombre via select.

Merci encore.