Afficher ou masquer un bouton selon le champ du dessus

Eléphanteau du PHP | 15 Messages

11 mars 2011, 17:05

Bonjour à toutes et tous,
Je suis nouveau sur votre forum sur lequel je viens de "tomber" après de très nombreuses heures de recherches.
Je suis en train de créer un site entièrement en php et html, et je dois trouver une fonction particulière.
Je vais essayer d'être clair.
Une de mes pages du site propose une liste de dates à laquelle je voudrais que les membres puissent s'inscrire.
Les valeurs des dates sont stockées dans une BdD SQL et sont donc appelées à l'ouverture de cette page.
Jusque là tout va bien.
J'ai bien sûr créé un bouton "s'inscrire" qui renvoi vers une autre page indépendante.
Cela se complique car il ne faut que maximum 10 inscriptions sur chaque date.
Pour cela chaque date dispose de 10 cases contenant nom, prénom de l'inscrit et le bouton s'inscrire bien sûr (soit au total 10 boutons).
Ce que je voudrais arriver à faire c'est que dans chaque case le bouton ne soit visible que si personne n'est inscrit, c'est à dire qu'à partir du moment où la case est déjà remplie avec un nom et prénom le bouton disparaisse, forçant ainsi le membre à aller dans la case suivante, et une fois les 10 cases pleines en toute logique plus aucune possibilité de s'inscrire.
Je dois absolument rester sur ce principe puisque par la suite, par le biais de la seconde page, les données sont nommées et stockées dans la BdD pour être rappelée et affichée dans une troisième page "participants".
Donc je suis obligé de conserver le principe d'un bouton par case afin que les données s'enregistrent dans le bon champ de la BdD pour y être récupérée.

En gros mon seul problème est de trouver une solution pour que, lors de l'ouverture de cette page, le bouton "s'inscrire" ne soit visible que dans les cases vides.
A partir du moment où un nom est déjà inscrit le bouton doit disparaître pour cette case, obligeant le membre à aller dans la suivante.



J'ai beaucoup fouillé et fouiné, et j'ai trouvé quelques bricoles que j'ai essayé, mais aucune ne marche.
Pour le moment j'en suis à tester :


<?php
$NOM1=trim($_POST["NOM1"]);
$PRENOM1=trim($_POST["PRENOM1"]);
$TEL1=trim($_POST["TEL1"]);
$QUALIF1=trim($_POST["QUALIF1"]);

if (($NOM1=="")||($PRENOM1=="")||($TEL1=="")||($QUALIF1==""))
{
echo "<input type='button' name='bouton' title='Inscription' value='Inscription' onclick=\"location.href='securite/secu1.php'\" />";
}
?>


Mais le bouton est tout le temps visible, que les cases soient pleines ou vides.

D'avance je remercie celui qui donnera de sont temps pour me venir en aide.
Modifié en dernier par skycrane le 13 mars 2011, 08:02, modifié 2 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 mars 2011, 17:37

salut,

le plus simple serait d'utiliser une table de "réservation" de date.
sur la page d'inscription tu ne met qu'un seul champ pour une inscription, au pire si tu veut pouvoir en faire plusieurs un peut de JS pour ajouter les X champs voulus.
ça te permet aussi d'indiquer le nombre de place disponible en fonction de ce qu'il y a dans la table réservation et ainsi ne mettre que le nombre de champs max possible.
tu peut aussi, en fonction du nombre d'inscrit, remplir un formulaire avec juste le nombre de champ correspondant aux place dispo.

Pour cela il te faut nommer les champs input avec la notation tableaux (par exemple name="prenom[]") tu récupère ainsi des tableaux dans $_POST ($_POST['prenom'] sera un tableau et non plus une chaine). Tu parcourt un tableau avec foreach pour le traitement et le tour est joué :)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

11 mars 2011, 18:11

Bonjour,
Merci d'avoir pris du temps pour étudier mon problème.
Je dois avouer que je suis un peu perdu dans ta réponse, tout paraît pourtant si simple !!!!
A l'heure actuelle j'ai mis en place un simple formulaire php pour s'inscrire, mais cela oblige la personne qui reçoit le formulaire (la secrétaire) à mettre à jour elle même une page où sont affichés les participants, d'où la recherche d'un système plus autonome, automatique.
Je dois impérativement conserver cette mise en page, ouverture de la page "securisations" avec dates et pour chaque sécu 10 cases avec chacune leur bouton pour inscrire les 10 membres.
Parce que toutes ces valeurs sont ensuite ré exploitées dans différentes pages du site via des requêtes sql, mais également pour qu'en accédant à cette page chacun puisse voir les noms de tous les inscrits.
Toute la pagination étant faite, il me manque juste cette fonction qui ferait disparaître le bouton en cas de case déjà remplie.

J'essaye de suivre la seconde partie de ta réponse, mais malheureusement mes compétences en php ou scripts sont minces, je m'en sort bien en html, mais après ...
Nommer les champs input avec la notation tableaux ... chaîne ... foreach ...
Aie aie aie, je me noie ... :(

Peut être un exemple concret pourrait m'aider à voir plus clair ! :?

En tout cas encore merci de m'aider.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 mars 2011, 22:47

tu peut, dans ce cas, utiliser isset pour sois afficher le champ de formulaire soit afficher la personne inscrite.

Perso je ne vois pas la différence entre 10 champs générer dynamiquement et en mettre moins s'il le faut et afficher ou pas des champs avec un nom précis.

le formulaire peux ressembler à ça
<html>
    <head></head>
    <body>
<?php
$inscrit=array(); // tableau qui contient les personnes deja inscrites, peut provenir d'une table de base de donnee
$nbinscritMax = 10;

if ( count($inscrit) == $nbinscritMax){
	echo 'D&eacute;sol&eacute; il n\'est plus possible de s\'inscrire';
}
else {
    // affichage des personnes déja inscrites
    if (count($inscrit)!= 0){
        echo 'Personne d&eacute;ja inscrites : <br />';
            foreach ($inscrit as $i){
            echo $i.'<br />';
        }
    }
    // on affiche les "input" permettant de s'inscrire
    $nbinput = $nbinscritMax - count($inscrit);
    echo '<form method="post" action="">';
    for ( $i=0; $i < $nbinput; $i++){
        echo '<label for="nom'.$i.'">Nom : </label><input id="nom'.$i.'" name="nom[]" type="" />';
        echo '<label for="prenom'.$i.'">Prenom : </label><input id="prenom'.$i.'" name="prenom[]" type="" />';
        echo '<label for="tel'.$i.'">Tel : </label><input id="tel'.$i.'" name="tel[]" type="" />';
        echo '<label for="qualif'.$i.'">Qualif : </label><input id="qualif'.$i.'" name="qualif[]" type="" /><br />';
    }
    echo '
        <input type="submit" name="submit" value="Inscription" />
        </form>';
}
?>
</body>
</html>
Pour tester remplis le tableau de la première ligne php ($inscrit).
Pour la fonctionnalité du script il faut remplir ce tableau que à partir de la table contenant les personnes déjà inscrites. Bien entendu il va falloir penser à passer les dates (ou autre une valeur permettant de savoir de quelle date on parle) en argument ou dans le 1er formulaire afin de ne pas les perdre !


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

12 mars 2011, 08:42

Bonjour,
Encore une fois merci de m'aider.
Pour que tu comprennes mieux mon problème, voici la page sur laquelle je travaille, pour le moment je n'ai qu'une case et qu'un bouton inscription, mais le modèle sera celui ci avec bien sûr au final 10 cases et 10 boutons s'inscrire.

Lien vers ma page

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 mars 2011, 09:39

au vu du code proposé :
- tu peut virer les 5 première requête et n'en faire qu'une.
- Il y a qu'un seul tuple dans cette table ? si oui autant utiliser un fichier, si non regarde la clause where en SQL.
- pour le reste je ne saisis pas le principe que tu a suivis pour construire tous cela.

Je pense que ton appli est mal prévu au départ, et un défaut de conception ne devrait pas être reconduit ;)

tu devrais utiliser isset / empty pour vérifier l’existence des index dans le tableaux $_POST avant de les utiliser histoire d'éviter une surprise.

ton code n'inclus pas le cas ou les champs sont remplis.

regarde le code que j'ai mis avant il fait ce que tu souhaite d'une manière différente de ce que tu pense mais ça fonctionne ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

12 mars 2011, 10:06

Bonjour,

Comme je le disais plus haut je m'en sort tout juste avec le html et le php, donc l'étape de la construction d'une requête sql fût rude :(
Alors effectivement il est logique qu'un "pro" trouve beaucoup d'erreurs dans ma page, mais c'est en glanant des parties de codes ci et là que j'ai réussi à avancer, et même si c'est très maladroit et non professionnel j'arrive à faire fonctionner le bidule :D
Donc en gros le principe de construction c'est système D avec diverses inspirations :?
Et là il me manquait juste à trouver grâce à une nouvelle requête une condition qui dise que si la valeur NOM1 de la table "secu" est vide alors on affiche le bouton pour permettre l'inscription, si la BdD possède déjà une valeur on n'affiche pas le bouton.
Je pensais que se serait hyper simple et à ma portée, mais visiblement je me trompe ... :(

Pour tout te dire, dans ta réponse, tuple, clause where, isset, pour moi c'est du chinois :cry:

Je vais essayer de travailler à partir du code que tu m'a donné, qui paraît pourtant si simple ...
Mais je bute déjà sur la première ligne :
$inscrit=array(); // tableau qui contient les personnes deja inscrites, peut provenir d'une table de base de donnee
Quelle syntaxe utiliser pour aller chercher les valeurs dans ma BdD ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 mars 2011, 10:52

je te conseil de lire ce tuto et les suivants ils vont t'aider à comprendre le sql :)

le test de la valeur peut ce faire avec la fonction empty ou simplement avec une comparaison (le == que tu connais déjà).

quand au code que j'ai "pondu" il est simple pour peu que l'on le comprenne, j'avoue que ce n'est pas simple si tu ne maitrise pas trop la base, mais c'est pas compliqué ça viendra ;)

je ne connais pas non plus la structure de tes tables donc je fait pas mal de supposition ça aide pas :/

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

12 mars 2011, 22:05

Bonsoir,

Encore une fois je te remercie de te pencher sur mon problème.

Tu vas me dire que je suis têtu :D mais je dois absolument rester sur la page actuelle, surtout que tout le reste fonctionne très bien.
D'ailleurs j'ai modifié ma page en fonction de tes remarques, en supprimant bon nombre de requêtes inutiles, j'ai du retirer une vingtaine de lignes qui effectivement ne servaient à rien !!!

Pourtant le problème paraît simple, même moi quand j'ai eu l'idée je me suis dit "oui je vais faire ça en deux clics la fonction est géniale", ben finalement pour un problème simple ...

Le but est "juste" de faire disparaître ce fichu bouton si un champ est déjà rempli !!

Une "simple" condition if, si le champ est vide on affiche le bouton, sinon on ne l'affiche pas.
Surtout que le champ est défini dans une de mes tables de la BdD, ça reviendrait à : si dans ma table "secu1" le champ "NOM1" est rempli on n'affiche pas le bouton, si ce même champ est vide on l'affiche.

Même en écrivant ces lignes je me dit mince c'est tout bête, mais alors je ne croyais pas galérer autant !!!!!! :(

Voici ma page corrigée : ma page

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 mars 2011, 23:10

if (!empty($champ)) echo 'input';

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

13 mars 2011, 07:55

Bonjour,

Oui tout à fait, c'est aussi simple, mais c'est que j'essaie de faire depuis le début mais qui refuse de fonctionner.
J'ai fait 4 tests :

-----------------------------------------
<?php
$base = mysql_connect ("", "", "");
mysql_select_db ('secu1', $base);
$requete = "SELECT NOM1 FROM secu1 WHERE NOM1=''";
$NOM1 == "NOM1";
if (empty($NOM1)) ;
{
print "<form name='boutons'>
<tr>
<td>&nbsp;</td>
<td><center>
<input type='button' name='plan' title='Test' value='Test' onclick=\"location.href='securite/secu1.php'\" /></center>
</td>
<td>&nbsp;</td>
</tr>";
}
?>

------------------------------------------

<?php
$NOM1=trim($_POST["NOM1"]);
$PRENOM1=trim($_POST["PRENOM1"]);
$TEL1=trim($_POST["TEL1"]);
$QUALIF1=trim($_POST["QUALIF1"]);

if (($NOM1=="")||($PRENOM1=="")||($TEL1=="")||($QUALIF1==""))
{
echo "<input type='button' name='bouton' title='Inscription' value='Inscription' onclick=\"location.href='securite/secu1.php'\" />";
}
?>

-----------------------------------------

<?php
if (!empty($NOM1)) echo 'input';
"<input type='button' name='plan' title='Test2' value='Test2' onclick=\"location.href='securite/secu1.php'\" />"
?>

-----------------------------------------

<?php
if (!empty($NOM1)) echo 'input';
?>
<tr>
<td>&nbsp;</td>
<td><center>
<input type='button' name='plan' title='Test3' value='Test3' onclick=\"location.href='securite/secu1.php'\" /></center>
</td>
<td>&nbsp;</td>
</tr>


-----------------------------------------

Mais rien n'y fait, le bouton refuse de disparaître !!!!!!!!! :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 mars 2011, 20:00

<?php
$base = mysql_connect ("", "", "");
mysql_select_db ('secu1', $base);
$requete = "SELECT NOM1 FROM secu1 WHERE NOM1=''"; // le but c'est d'avoir les tuples avec nom1 vide ? tu risque d'en avoir plusieurs
// manque un mysql_query la 
//$NOM1 == "NOM1";
//si la requete retourne pas d’élément c'est que tu affiche le bouton
// A la limite un select count serait plus approprié
if (mysql_num_rows($query)==0) ;
{
print "<form name='boutons'>
<tr>
<td>&nbsp;</td>
<td><center>
<input type='button' name='plan' title='Test' value='Test' onclick=\"location.href='securite/secu1.php'\" /></center>
</td>
<td>&nbsp;</td>
</tr>";
}
else {
// pour le cas ou :)
}
?>
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

13 mars 2011, 21:08

Bonsoir,

Encore une fois un grand merci pour ton aide.
Je viens de mettre en place ton code pour tester, j'ai bien sûr rajouté les identifiants et j'ai tenu compte de tes commentaires, mais il y a deux problèmes :

1) Sur ma page php un message s'affiche : Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/154/sdd/f/0/securite/securisations.php on line 148

La ligne 148 correspond à : if (mysql_num_rows($query)==0)

2) Ce fichu bouton refuse de disparaître même si le champ nom est rempli !!!!!!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 mars 2011, 23:47

$query doit être le résultat du mysql_query
clairement $query = mysql_query('la requete sql');

remplace query par le nom de la variable que tu a utiliser pour la requête !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

14 mars 2011, 06:24

Bonjour,

Donc j'obtiens :

---------------------------

Code : Tout sélectionner

$base = mysql_connect ("", "", ""); mysql_select_db ('secu1', $base); $requete = "SELECT NOM1 FROM secu1 WHERE NOM1=''"; $req = mysql_query($sql) or die('Erreur SQL !<br >'.$sql.'<br >'.mysql_error()); $NOM1 == "NOM1"; if (mysql_num_rows($NOM1)==0); { .......
--------------------------

Ce qui me donne la même erreur :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in securisations.php on line 148.

Ligne 148 = if (mysql_num_rows($NOM1)==0)