Page 1 sur 1

while while !

Posté : 25 juin 2010, 17:08
par zazzou
J'ai une petite question avec mes formulaires requête sql et touti quanti

J'ai donc pour le moment 2 tables.
$reponse = $bdd->query('SELECT * FROM matchs_banderoles');
$reponse1 = $bdd->query('SELECT * FROM matchs_salle');
et ensuite j'ai :
<?php
$res = $bdd->query('SELECT COUNT(*) AS nb_banderoles FROM matchs_banderoles');
$res1 = $bdd->query('SELECT COUNT(*) AS nb_salle FROM matchs_salle');

$row = $res->fetch();
$row1 = $res1->fetch();

echo 'total d\'inscrits banderoles = ' . $row['nb_banderoles'];
echo '<br>total d\'inscrits salles = ' . $row1['nb_salle'];



if ($row['nb_banderoles'] <= 3 and $row1['nb_salle'] <= 1) 
{ 
        echo ' <form action="f.php" method="post">
        <p>
        <label for="banderoles">Banderoles</label> : <input type="text" name="banderoles" id="banderoles" /><br />
        <label for="salle">Salle</label> :  <input type="text" name="salle" id="salle" /><br />

        <input type="submit" value="Envoyer" />
        </p>
    </form>';
        while ($donnees = $reponse->fetch())
{

        echo '<td>- ' . htmlspecialchars($donnees['banderoles']) . '</td>
        <td>- ' . htmlspecialchars($donnees['salle']) . '</td></tr>'; } 


$reponse->closeCursor();
}
Et donc, normal, il ne m'affiche uniquement les données de "banderoles". Comment dois je faire pour faire 2 while, j'ai du mal a savoir dans quel ordre il faut que je les mettes sachant qu'il y aura en fait:

while ($donnees = $reponse->fetch())

et

while ($donnees1 = $reponse1->fetch())

???

Re: while while !

Posté : 26 juin 2010, 00:16
par Aureusms
Pas très clair ton affaire...

Re: while while !

Posté : 26 juin 2010, 00:49
par zazzou
Je vais essayé d'être un peu plus clair alors :s
En gros, j'ai deux tables "matchs_banderoles" et "matchs_salle".
J'ai un formulaire avec deux input. Je veux restreindre le nombre d'entrées possibles dans chacune des deux tables.
Je comptabilise le nombre d'entrée de chacune des tables. Et je les inscris dans un tableau s'affichant sur la page.
Au bout de par exemple 4 entrées dans la table "matchs_banderoles", je vire le input de sorte que je ne puisse plus entrer de données dans cette table.
Je veux faire la meme chose avec la seconde table. Et c'est là ou je bloque... Il faudrait que je mette un autre While, mais je ne sais pas comment faire, où le mettre etc.

Re: while while !

Posté : 26 juin 2010, 09:40
par Ryle
Le while contrôle qu'une condition est vraie. Tant que celle-ci est vraie, le while s'exécute.

Actuellement, ta condition est "tant que $reponse->fetch() renvoi des données, je les affecte dans la variable $donnees". Rien ne t'empêche de compléter cette condition avec une autre :
while ($donnees = $reponse->fetch() && $donnees1 = $reponse1->fetch())
L'inconvénient de cette méthode c'est qu'il te faut le même nombre d'enregistrements dans les deux tables (si j'en ai 4 dans l'une et 2 dans l'autre, cela n'affichera que les 2 premiers)
Si ce n'est pas ce que tu veux, tu peux aussi utiliser un OU ( || ), auquel cas tant qu'il y a des données dans l'un ou dans l'autre, tu entreras dans la boucle. Il faudra cependant tester tes variables $donnees et $donnees1 pour vérifier qu'elles sont bien renseignées avant de les utiliser.

L'autre inconvénient de cette méthode c'est qu'il n'y a aucun lien entre ta banderole et ta salle. Du coup l'affichage des banderoles et des salle peut être aléatoire, et ne pas présenter la banderole de la salle (s'il y a bien une banderole par salle). Dans ce cas, plutôt que de faire deux requêtes, tu peux n'en faire qu'une seule avec une jointure entre tes deux tables de façon à récupérer à chaque fois la banderole et la salle correspondante. Par exemple (à adapter naturellement) :
SELECT banderoles, salle FROM matchs_banderoles, matchs_salle, WHERE matchs_banderoles.id_salle = matchs_salle.id_salle

Re: while while !

Posté : 26 juin 2010, 12:23
par zazzou
Alors, non il n'y a vraiment pas de liens entre les tables en fait...
J'ai testé avec un OR pour les while je vous mets le code:
d.php
<?php
//comptage du nombre d'entrées dans les tables
$res = $bdd->query('SELECT COUNT(*) AS nb_banderoles FROM matchs_banderoles');
$res1 = $bdd->query('SELECT COUNT(*) AS nb_salle FROM matchs_salle');

$row = $res->fetch();
$row1 = $res1->fetch();

echo 'total d\'inscrits banderoles = ' . $row['nb_banderoles'];
echo '<br>total d\'inscrits salles = ' . $row1['nb_salle'];



if ($row['nb_banderoles'] <= 3 and $row1['nb_salle'] <= 1) 
{ 
        echo ' <form action="f.php" method="post">
        <p>
        <label for="banderoles">Banderoles</label> : <input type="text" name="banderoles" id="banderoles" /><br />
        <label for="salle">Salle</label> :  <input type="text" name="salle" id="salle" /><br />

        <input type="submit" value="Envoyer" />
        </p>
    </form>';
        while ($donnees = $reponse->fetch() OR $donnees1 = $reponse1->fetch())
{

        echo '<td>- ' . htmlspecialchars($donnees['banderoles']) . '</td>
        <td>- ' . htmlspecialchars($donnees1['salle']) . '</td></tr>'; } 


$reponse->closeCursor();
}



else 
{ 
        echo ' <form action="f.php" method="post">
        <p>
        <label for="banderoles">Banderoles</label> : Inscriptions closes<br />
        <label for="salle">Salle</label> :  <input type="text" name="salle" id="salle" /><br />

        <input type="submit" value="Envoyer" />
        </p>
    </form>';
        while ($donnees = $reponse->fetch() OR $donnees1 = $reponse1->fetch())
{
        echo '<td>- ' . htmlspecialchars($donnees['banderoles']) . '</td>
        <td>- ' . htmlspecialchars($donnees1['salle']) . '</td></tr>'; } 

$reponse->closeCursor();
}



?>
</table>
dans le F.php il y a :
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=.......);
$bdd->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING  );
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

if (isset($_POST['banderoles']) and $row['nb_banderoles'] <= 3)
{
	$req = $bdd->prepare('INSERT INTO matchs_banderoles VALUES
		(
		:id,
		:banderoles 
		)
	');
	
	$query = $req->execute(array(
			    'id' => '',
			    'banderoles' => $_POST['banderoles']
			    ));
				
				
}		
	
elseif (isset($_POST['salle']) and $row1['nb_salle'] <= 1)
{
	$req = $bdd->prepare('INSERT INTO matchs_salle VALUES
		(
		:id,
		:salle
		)
	');
		
	$query = $req->execute(array(
		'id' => '', 
		'salle' => $_POST['salle']
		));
}


else 
{
echo 'rien';
}

header('Location: d.php');

?>
Quand je teste ce code, il me comptabilise tout dans banderoles même si je mets un truc dans salle.
Ensuite, ce que j'inscris dans "banderoles", il n'affiche rien dans mon tableau et affiche tout une fois que le nombre limite est atteint.
De plus, quand j'atteint le nombre limite dans "matchs_banderoles" alors il me comptabilise ce que je mets dans salle et il me l'affiche.
qn a une idée?

Re: while while !

Posté : 27 juin 2010, 14:31
par Ryle
Au temps pour moi ! Avec l'opérateur OU, si la première condition est vraie, la seconde n'est pas évaluée, du coup ça ne colle pas avec ce que tu veux faire...

En fait, il faut boucler sur le nombre d'éléments trouvés, et à chaque itération récupérer les valeurs s'il y en a :
$nbIteration = max($row['nb_banderoles'], $row1['nb_salle']); // détermine le nombre d'itération à faire dans la boucle

for ($i=0; $i <  $nbIteration; $i++) {

    echo '<tr>';

   if ($donnees = $reponse->fetch()) {
        echo '<td>- ' . htmlspecialchars($donnees['banderoles']) . '</td>';
    }
   if ($donnees = $reponse->fetch()) {
        echo '<td>- ' . htmlspecialchars($donnees1['salle']) . '</td>';
    }

    echo '</tr>';
}