8796 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

- Je souhaite mettre en place un système d'inscription à différents tournois sportifs. Mais comment organiser cela ? Sachant que les inscriptions pour deux tournois peuvent avoir lieu simultanément et que les tournois se succèdent, je dois créer une table pour chaque tournoi ? Si non, comment procéder ?

- Si je pose cette question, c'est aussi parce que je souhaite mettre en place un système de places limitées pour chaque tournoi. Avec le décompte des places disponibles (exemple : 24 places disponibles). J'ai glané par ci par là que pour le compte c'est "select count" mais pour le décompte ?

Je commence comme cela :

$res = mysql_query('SELECT COUNT(*) AS total FROM inscr_tournoi_070709') OR die(mysql_error());
$row = mysql_fetch_assoc($res); 


Comment rajouter la fonction si "count" a moins de 24 places afficher "Inscription" sinon afficher "Complet" ?

if $rows = 24
Smiley sweatdrop

Merci d'avance.
Modifié par draklane (12 Jul 2009 - 15:16)
Modérateur
Bonsoir,

Ne connaissant pas trop le tenant et les aboutissants (les participants = 1 places ou plusieurs ?), je verrai ta table tournois à peu près comme cela :
(code fait de tête)

CREATE TABLE place_tournois (
	id_tournois INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_participant INT NOT NULL,
	id_tournois_sportif INT NOT NULL,
	nb_place TINYINT(255) NOT NULL,
	CONSTRAINT `FK_place_tournois_tournois_sportif` FOREIGN KEY (`id_tournois_sportif`) REFERENCES tournois_sportif(`id_tournois_sportif`) ON DELETE CASCADE ON UPDATE CASCADE
	CONSTRAINT `FK_place_tournois_participant` FOREIGN KEY (`id_participant`) REFERENCES participant(`id_participant`) ON DELETE CASCADE ON UPDATE CASCADE
);


Après, je verrai ta requête à peu près comme ceci (en mode simplifié) :
(code fait de tête)

$sql = "SELECT SUM(nb_place) AS place ";
$sql .= "FROM place_tournois";
$sql .= "GROUP BY id_tournois_sportif";


++
Modifié par Nolem (07 Jul 2009 - 05:54)
Salut,

draklane a écrit :
je dois créer une table pour chaque tournoi ?
Oulà ! Non ! Le principe d'une table est que chaque enregistrement correspond à une occurrence d'une même chose. Je t'invite à lire un pdf expliquant les notions de MCD et MLD Merise.

Comme ton sujet est simple voilà en gros ce qu'il faudrait à priori :

table tournois
* id_tournoi (identifiant unique en autoincrement)
* libelle
* date
* nb_places
* lieu
* etc...

table participants
* id_part (identifiant unique en autoincrement)
* nom
* prenom
* etc...

table inscriptions
* id_inscr (identifiant unique en autoincrement)
* id_tournoi
* id_part
* date_inscr
* etc...

Avant d'inscrire quelqu'un il faut :

1) vérifier qu'il n'est pas déjà inscrit :
Select count(*) as deja_inscrit from inscriptions where id_tournoi = 1 and id_part = 1
Si deja_inscrit est supérieur à 0 c'est qu'il est... déjà inscrit. Smiley langue

2) vérifier qu'il reste des places :
Select nb_places from tournois where id_tournoi = 1;
...
Select count(*) as nb_inscrits from inscriptions where id_tournoi = 1
Si nb_inscrits est inférieur à nb_places tu peux autoriser l'inscription.
Modifié par Heyoan (11 Jul 2009 - 15:16)
Merci pour vos réponses Smiley smile

Mais comment sont alimentés chaque table ?

Supposons que j'ai un formulaire d'inscription, les données de ce formulaire iront dans quelle table ? La "table participants" ou la "table inscriptions" ? Les données sont reparties dans les deux tables peut-être ?

Pour ce qui est de la "table tournois" je dois créer un formulaire qui alimentera cette table et affichera les données sous forme de liste des tournois disponibles ? Avec notamment le code de Nolem.
Salut,

ben...

Pour la table tournois c'est à priori un administrateur (toi ?) qui remplit un formulaire pour l'alimenter.

Quand quelqu'un veut s'inscrire à un (ou des) tournoi(s) le plus simple est de faire ça en 2 étapes :
1) formulaire d'inscription générale (nom, prénom, etc.) qui va alimenter participants.
2) formulaire d'inscription à un tournoi en particulier (qui contiendra notamment un SELECT avec tous les tournois disponibles) qui va alimenter inscriptions. A noter que ce formulaire n'est autorisé que pour les participants.
Modifié par Heyoan (11 Jul 2009 - 15:25)
J'ai suivi vos conseils, je vous remercie, j'avance petit à petit.

J'ai donc crée un formulaire (accessible pour l'administrateur) qui permet de créer des tournois et qui alimente la table tournois.

J'ai ensuite crée une page qui affiche la liste des tournois disponibles sous forme de tableau HTML.

Pour s'inscrire à un tournoi le participant doit cliquer sur le bouton "Inscription", mais (pour le moment) ce bouton renvoie vers le même formulaire quelque soit le tournoi choisi. Smiley biggrin

Comment faire pour que chaque bouton "Inscription" renvoie vers le formulaire d'inscription d'un tournoi en particulier ?

Autre petit souci : j'ai essayé d'afficher une image différente en fonction du tournoi.
J'ai essayé de me dire si le champ lieu de ta table tournois est égale à 1, 2, 3 ou 4 affiche l'image1, l'image2, l'image3 ou l'image4.

Mais résultat : aucune image ne s'affiche.


require "tournoi_include_bdd.php";

$image_lieu = mysql_query("SELECT lieu FROM modtournoi_tournois") or die ('Erreur : '.mysql_error() ); 
 
if ($image_lieu == '1') 
    $logo = "image1.png"; 
elseif ($image_lieu == '2') 
    $logo = "image2.png"; 
elseif ($image_lieu == '3') 
    $logo = "image3.png"; 
elseif ($image_lieu == '4') 
    $logo = "image4.png";

$reponse = mysql_query("SELECT lieu, libelle, nb_places FROM modtournoi_tournois") or die ('Erreur : '.mysql_error() );

{

echo '<table width="623" border="0" align="center" cellpadding="0" cellspacing="5">';
echo '<tr>';
echo '<td height="34" colspan="2" align="center" valign="top"><img src="images/titre_descriptif.png" width="112" height="31" /></td>';
echo '<td width="140" align="center" valign="top"><img src="images/titre_statut.png" width="84" height="31" /></td>';
echo '</tr>';

while ($row = mysql_fetch_array($reponse)){
  echo '<tr>';
    echo '<td width="80" height="88" align="center" valign="middle"><img src="images/'.$logo.'" width="80" height="80" /></td>';
    echo '<td height="90">';
echo '<dl>';
        echo '<dd> '.$row["libelle"].' </dd>';
      echo '</dl>';
	  echo '</td>';
    echo '<td align="center"><a href="tournoi_index_inscription.php"><img src="images/titre_sinscrire.png" width="112" height="31" border="0" /></a>';
	echo '<br />';     
      echo '<strong>'.$row["nb_places"].' places disponibles</strong>';
	  echo '</td>';
  echo '</tr>';
}
echo '</table>';

}

mysql_free_result($reponse);

Modifié par draklane (12 Jul 2009 - 17:06)
J'ai fait un post en double et je ne peux pas supprimer ce message. Désolé Smiley ohwell
Modifié par draklane (12 Jul 2009 - 15:45)
Modérateur
Bonsoir draklane,

draklane a écrit :

J'ai fait un post en double et je ne peux pas supprimer ce message. Désolé ohwell


Cela m'est arrivé une fois et j'ai simplement averti un modo de la petite erreur. D'ailleurs c'était un bug de connexion chez moi.:/

draklane a écrit :

Comment faire pour que chaque bouton "Inscription" renvoie vers le formulaire d'inscription d'un tournoi en particulier ?


Ce n'est pas très dure en soit. Ajouter un champ select et dans les options (propositions à sélectionner) faire cette requête :
Je me base sur la SGBDR de notre ami Heyoan Smiley smile

$sql = "SELECT id_tournoi, libelle FROM tournois";

Ce qui va te donner en rendu final :

<select name="tournois">
	<option value="id_tournoi">libelle</option>
	<option value="id_tournoi">libelle</option>
	<option value="id_tournoi">libelle</option>
	<option value="id_tournoi">libelle</option>
	<!-- etc. -->
</select>


draklane a écrit :

Autre petit souci : j'ai essayé d'afficher une image différente en fonction du tournoi.
J'ai essayé de me dire si le champ lieu de ta table tournois est égale à 1, 2, 3 ou 4 affiche l'image1, l'image2, l'image3 ou l'image4.


Ton code est erroné : (lire aussi mes commentaires)

$sql = "SELECT lieu FROM modtournoi_tournois"; //mauvaise pratique !
/**
* logiquement ce serait plutôt du style :
* SELECT e.id_endroit_tournois 
* FROM modtournoi_tournois as t, [b]endroit_tournois[/b] as e
* WHERE t.id_endroit_tournois=e.id_endroit_tournois
* AND t.libelle='mon tournois'
*
*/
$reponse_lieu = mysql_query($sql) or die ('Erreur : '.mysql_error() );  //mauvaise pratique !
//Je te conseille de chercher sur Alsacreations un tuto de Jerome A à propos de cette mauvaise pratique !

$image_lieu = mysql_fetch_row($reponse)
switch($image_lieu[0]){
	case "1":
		$logo = 1;
		break;
	case "2":
		$logo = 2;
		break;
	case "3":
		$logo = 3;
		break;
	case "4":
		$logo = 4;
		break;
}
$logo = "image".$logo.".png";

code fait de tête. J'ai peut être fait des pétouilles. Erf 2h30 du mat

++

ps : Au passage, j'ai l'impression que ton code html est sémantiquement faux (liste de définitions).
Modifié par Nolem (13 Jul 2009 - 02:57)
Merci Nolem pour ta réponse.

En fait je ne souhaiterais pas afficher la liste des tournois dans une liste déroulante mais sous forme de tableau HTML. J'avoue que je n'ai pas été très clair désolé Smiley sweatdrop . Pour que vous puissiez comprendre concrètement j'ai fait quelques captures.

Voici, ci-dessous, le formulaire administrateur qui rempli les champs lieu, libellé, nb_places de la table tournois. J'ai donné une valeur numérique (1, 2, 3 ou 4) à chaque lieu (Roland Garros, Wimbledon...). Si par exemple je choisi Roland Garros, le formulaire envoie le chiffre 2 dans le champ "lieu", si je choisi Wimbledon, le formulaire envoie 4 dans le champ "lieu" etc... Je souhaiterais afficher, dans mon tableau HTML, le logo correspondant à la valeur de injectée mon champ "lieu".

http://img509.imageshack.us/img509/8323/exemple2.jpg

Autre souci, je souhaiterais que le bouton "Inscription" affiche le formulaire d'inscription d'un tournoi en particulier. Que le nombre de places disponibles soit affiché et que l'image "complet" apparaisse si il ne reste plus de place. Je sais c'est compliqué Smiley sweatdrop

http://img22.imageshack.us/img22/3917/exempleu.jpg
Modifié par draklane (13 Jul 2009 - 05:26)
Nolem a écrit :
Cela m'est arrivé une fois et j'ai simplement averti un modo de la petite erreur.
Si tu parles de "prévenir un modérateur" ce lien ne sert pas à cela mais à nous aider à supprimer les sujets qui n'ont pas leur place sur le forum (typiquement du spam). Pour le reste (post en double, etc.) il n' y a pas d'urgence et on s'en occupe quand on le voit. Smiley cligne
draklane a écrit :
Je sais c'est compliqué
En fait non : c'est juste que tu débutes et que tu n'as pas encore les réflexes de base. Smiley smile

Par exemple le nom de l'image devrait se trouver dans la table tournoi : cela n'a aucun sens de refaire un test dans le code PHP... Ensuite, si l'image ne s'affiche pas c'est que le code html généré est faux (chemin vers l'image) : il suffit d'afficher la source de la page pour voir ce qui ne va pas.
Modérateur
Bonjour tout le monde,

Heyoan => Smiley confused

draklane =>
draklane a écrit :

...
Voici, ci-dessous, le formulaire administrateur qui rempli les champs lieu, libellé, nb_places de la table tournois. J'ai donné une valeur numérique (1, 2, 3 ou 4) à chaque lieu (Roland Garros, Wimbledon...). Si par exemple je choisi Roland Garros, le formulaire envoie le chiffre 2 dans le champ "lieu", si je choisi Wimbledon, le formulaire envoie 4 dans le champ "lieu" etc... Je souhaiterais afficher, dans mon tableau HTML, le logo correspondant à la valeur de injectée mon champ "lieu".
...


Ta table tournois devrait avoir à peu près cette figure là :

CREATE TABLE tournois(
	id_tournois INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	libelle TEXT NOT NULL,
	date_tournois DATE NOT NULL,
	nb_place TINYINT(32) NOT NULL,
	id_lieu INT NOT NULL,
	# etc.
	CONSTRAINT `FK_lieu_tournois_id_lieu` FOREYGN KEY (id_lieu) REFERENCES lieu_tournois(id_lieu) ON DELETE CASCADE ON UPDATE CASCADE,
	# etc.
);

CREATE TABLE lieu_tournois (
	id_lieu INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	lieu VARCHAR(128) NOT NULL
);


Là, tu vois une nouvelle table (lieu_tournois). Elle est liée avec une contrainte. J'aurais pu utiliser un champ de type ENUM. J'ai préféré créer une table annexe afin de voir vers le long terme. En effet, au delà de 3 ou 4 choix, il est préférable d'ajouter une table. Bien qu'il n'y a pas de règle établie à ma connaissance, cela me parait logique dans un soucis de pratique (INSERT au profit d'un ALTER TABLE).

Maintenant admettons que dans ta SGBDR, il y a le tournois de Rolland Garros du 24 mai au 7 juin 2009. Afin d'afficher la photo du logo correspondant au tournois, cela ferait un truc du style (en mode très simplifié) :

//récupération de l'identifiant du lieu du tournois
$sql = "SELECT l.id_lieu "; //il devrait y avoir un peu plus que cela normalement [cligne]
$sql .= "FROM tournois AS t, lieu_tournois  as l ";
$sql .= "WHERE t.id_lieu = l.id_lieu ";
$sql .= "AND t.date_debut ='2009-05-24'";


$resultat = mysql_query($sql) or die ('Erreur : '.mysql_error());  //mauvaise pratique ! 
 //Je te conseille de chercher sur Alsacreations un tuto de Jerome A à propos de cette mauvaise pratique ! 

$image_lieu = mysql_fetch_row($resultat) 
switch($image_lieu[0]){ 
    case "1": 
        $logo = 1; 
        break; 
    case "2": 
        $logo = 2; 
        break; 
    case "3": 
        $logo = 3; 
        break; 
    case "4": 
        $logo = 4; 
        break; 
} 
$logo = "image".$logo.".png"; 

echo "monChemin/".$logo;


draklane a écrit :

...
Autre souci, je souhaiterais que le bouton "Inscription" affiche le formulaire d'inscription d'un tournoi en particulier. Que le nombre de places disponibles soit affiché et que l'image "complet" apparaisse si il ne reste plus de place. Je sais c'est compliqué
...


En reprenant la logique de notre ami Heyoan et ce que je ferai à peu près en exemple :

$sql = "SELECT nb_place FROM tournois WHERE id_tournois=1";

$resultat = mysql_query($sql) or die ('Erreur : '.mysql_error());  //mauvaise pratique ! 
$nb_places_disponibles = mysql_fetch_row($resultat);

$sql = "SELECT COUNT(*) AS inscrit FROM inscription WHERE id_tournois=1";

$resultat = mysql_query($sql) or die ('Erreur : '.mysql_error());  //mauvaise pratique ! 
$nb_participants_inscris = mysql_fetch_row($resultat);

//conditionnel ternaire
echo ($nb_participants_inscris[0]<$nb_places_disponibles)? $nb_participants_inscris[0] : "mon_chemin/image_incription_complet.png";


<<<EDIT
Heyoan a écrit :

...
Par exemple le nom de l'image devrait se trouver dans la table tournoi : cela n'a aucun sens de refaire un test dans le code PHP
...


+1
draklane =>

En effet, il me semble qu'il est préférable de faire le moins de requêtes possibles (soulager le serveur) afin d'afficher le plus de données dans la page. Donc, il est de mon avis de choisir ces requêtes judicieusement et créer ses tables en conséquences voir de les modifier. Smiley cligne

Il n'y a pas longtemps sur php-france, il y avait un concour sur ce type d'application que tu veux faire. Je crois que pour te faire la main, tu aurais pu peut être t'y attarder un moment je pense. Smiley cligne
EDIT;

Bonne journée à toi. Smiley smile

ps : code fait de tête
Modifié par Nolem (13 Jul 2009 - 13:49)
Modérateur
Pour une meilleur pratique (en procédurale) Smiley cligne :

Cela ferait un truc du style en exemple :

//fichier 1
// initialisation des constantes 
define ("HOTE","***");
define ("UTIL","***");
define ("MDP","***");
define ("BDD","***");


//fichier 2
require_once("fichier_1.php");

//connection
function connect($hote,$util,$mdp,$bdd){
	$connect= @ mysql_connect($hote,$util,$mdp);
		if (!$connect){
			echo mysql_errno();
			echo " - ";
			die ("ERREUR DE CONNECTION");
		}
		if (!mysql_select_db($bdd)){
			echo mysql_errno();
			echo " - ";
			die ("ERREUR DE CONNECTION A LA BDD");
		}
	return $connect;
}

//REQUETE SQL
function exec_sql($sql_sel,$connect){
	$res_sql_sel=@ mysql_query($sql_sel,$connect);
	if (!$res_sql_sel){
		echo mysql_errno();
		echo " - ";
		die ("ERREUR DE REQUETE");
	}else{
		return $res_sql_sel;
	}
}
//déconnexion
function db_close($connect){
	if(@ mysql_close($connect)==false){
		echo mysql_errno();
		echo " - ";
		die("Erreur de fermeture de la BDD");
	}
}


ce qui donne ceci à l'exécution :

require_once("fichier_2.php");

$connect = connect(HOTE,UTIL,MDP,BDD);
//suite du script etc. etc.

$sql = "SELECT * FROM ma_table";
$resultat = exec_sql($sql,$connect);
//traitement de la requête etc. etc.

db_close($connect); 
//n'est pas obligatoire puisque la connexion s'interrompt à la fin du script et qu'il n'y a pas de connexion persistante (mysql_pconnect()) 


Cependant, je te conseille grandement de regarder le tut de Jerome A afin de mieux comprendre cette bonne pratique. Tu le trouveras en cherchant dans les cours d'Alsacreations. Smiley cligne

<<<EDIT
La méthodologie utilisée est dite procédurale. En POO, c'est nettement mieux puisque l'on peut mieux factoriser le code. La maintenance et évolutivité est bien meilleur.
EDIT

++

ps : fait de tête
Modifié par Nolem (13 Jul 2009 - 13:45)
Nolem a écrit :
J'aurais pu utiliser un champ de type ENUM. J'ai préféré créer une table annexe afin de voir vers le long terme. En effet, au delà de 3 ou 4 choix, il est préférable d'ajouter une table
Ce n'est pas une question de nombre de choix mais de normalisation : il faut créer une table annexe. Ensuite, dans la pratique, si on est sûr que les possibilités pour un champ ne varieront pas dans le temps (par exemple Mr, Mme, Melle) on peut utiliser un Enum.

Nolem a écrit :
Afin d'afficher la photo du logo correspondant au tournois, cela ferait un truc du style...
Non : je me répète mais cette info (image) devrait être dans la table et il n'ya aucun intérêt à rajouter un test dans le code PHP.
Modérateur
Hello Heyoan, Smiley smile

Heyoan a écrit :

Ce n'est pas une question de nombre de choix mais de normalisation : il faut créer une table annexe. Ensuite, dans la pratique, si on est sûr que les possibilités pour un champ ne varieront pas dans le temps (par exemple Mr, Mme, Melle) on peut utiliser un Enum.
...


Je pensais dans le cas d'un champ où il y a une liste de pays fixes (180) et non modifiable. Un champ ENUM avec 180 choix Smiley sweatdrop . Et ce que tu dis découles de source forcément. Au passage, l'abréviation de monsieur n'a jamais été en Français Mr mais M. Smiley cligne

Heyoan a écrit :

...
Non : je me répète mais cette info (image) devrait être dans la table et il n'y a aucun intérêt à rajouter un test dans le code PHP.


Ça dépend comment tu vas traiter. Mais dans l'absolu avec une plus grosse application et après réflexion (merci Smiley smile ), c'est mieux en effet. Là je viens de rééditer le message précédent en mettant un commentaire additionnel allant vers notre idée et adapter à l'idée de Draklane (si ceci = cela alors ceci) :
* il devrait y avoir un peu plus que cela normalement
et celui ci :
* En effet, il me semble qu'il est préférable de faire le moins de requêtes possibles (soulager le serveur) afin d'afficher le plus de données dans la page. Donc, il est de mon avis de choisir ces requêtes judicieusement et créer ses tables en conséquences voir de les modifier.

Après je peux me tromper bien sûr.

Bien amicalement Smiley smile
Modifié par Nolem (13 Jul 2009 - 14:51)
Nolem a écrit :
Ça dépend comment tu vas traiter. Mais dans l'absolu avec une plus grosse application, c'est mieux en effet.
Grosse ou petite : il suffit d'ajouter un tournoi pour devoir rajouter un case dans le switch PHP ! Donc c'est lourd... donc il faut le mettre dans la table. CQFD ! Smiley langue
Modérateur
Heyoan a écrit :
Grosse ou petite : il suffit d'ajouter un tournoi pour devoir rajouter un case dans le switch PHP ! Donc c'est lourd... donc il faut le mettre dans la table. CQFD ! Smiley langue


Exact. Surtout que l'on est encore une fois dans une situation de normalisation puisque la table est en relation avec ces/cette donnée(s).

Toutefois, la méthode de Draklane peut être factorisée et automatiquement mise à jour si besoin. Avec réflexion, je pense que je serai vers ton idée pour ce type de projet. Smiley murf En tout cas merci d'avoir soulever ce point. Smiley smile
Modifié par Nolem (13 Jul 2009 - 15:13)
Merci encore pour vos réponses, je suis perdu de chez perdu Smiley confused

Nolem a écrit :

Cependant, je te conseille grandement de regarder le tut de Jerome A afin de mieux comprendre cette bonne pratique. Tu le trouveras en cherchant dans les cours d'Alsacreations. Smiley cligne


Il s'agit du tuto intitulé "Gérer les erreurs MySQL en PHP sans or die" ?

Nolem a écrit :
Ta table tournois devrait avoir à peu près cette figure là :

CREATE TABLE tournois(
	id_tournois INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	libelle TEXT NOT NULL,
	date_tournois DATE NOT NULL,
	nb_place TINYINT(32) NOT NULL,
	id_lieu INT NOT NULL,
	# etc.
	CONSTRAINT `FK_lieu_tournois_id_lieu` FOREYGN KEY (id_lieu) REFERENCES lieu_tournois(id_lieu) ON DELETE CASCADE ON UPDATE CASCADE,
	# etc.
);

CREATE TABLE lieu_tournois (
	id_lieu INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	lieu VARCHAR(128) NOT NULL
);


Nolem la date est nécessaire pour identifier le tournoi c'est ça ? Il faut que je rajoute un champ date dans mon formulaire donc ? Dans les tables que tu as crée je note un certain "CONSTRAINT" ça sert à lier les tables entre elles ?

Dans phpmyadmin lors de la création d'une table "CONSTRAINT" se définit comment ?

En fait je n'ai crée que deux tables, une table modtournoi_inscriptions et une table modtournoi_tournois. J'ai utilisé le préfixe modtournoi_ pour désigner "module tournoi". Je vais peut-être retiré ce préfixe, car ça perd en lisibilité ?

Je n'ai pas crée de table participants car utilisant un forum phpBB, je me sert des sessions du forum, les membres du forum sont ainsi potentiellement des participants aux tournois. Il leur suffit juste de s'inscrire au tournoi de leur choix.

Voici les tables que j'ai crée :

CREATE TABLE `modtournoi_tournois` (
  `id_tournoi` int(9) NOT NULL auto_increment,
  `libelle` text collate latin1_german2_ci NOT NULL,
  `lieu` varchar(100) collate latin1_german2_ci NOT NULL,
  `nb_places` varchar(3) collate latin1_german2_ci NOT NULL,
  KEY `id_tournoi` (`id_tournoi`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=13 ;

CREATE TABLE `modtournoi_inscriptions` (
  `id_participants` mediumint(9) NOT NULL auto_increment,
  `id_tournoi` varchar(5) collate latin1_german2_ci NOT NULL,
  `inscr_prenom` varchar(80) collate latin1_german2_ci NOT NULL,
  `inscr_pseudoFORUM` varchar(80) collate latin1_german2_ci NOT NULL,
  `inscr_joueur` varchar(80) collate latin1_german2_ci NOT NULL,
  `inscr_dispo_journaliere` varchar(200) collate latin1_german2_ci NOT NULL,
  `inscr_dispo_horaire` varchar(200) collate latin1_german2_ci NOT NULL,
  `inscr_email` varchar(100) collate latin1_german2_ci NOT NULL,
  KEY `id` (`id_participants`)
) ENGINE=MyISAM AUTO_INCREMENT=67 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=67 ;


Concernant les images en fait je n'ai pas nommé mes images : image1, image2, image3, image4, c'était à titre d'exemple Smiley confused . J'ai leur ai donné le nom : logo_rolandgarros.png, logo_usopen.png, logo_wimbledon.png, logo_openaustralie.png. Dans mon formulaire j'ai assigné une valeur numérique à chaque image, pensant pouvoir récupérer cette valeur dans ma table et ainsi ré-afficher l'image dans mon tableau HTML.

Voici la partie concernant les images dans mon formulaire :


<dl>
<dt><label for="lieu">Lieu du tournoi : </label></dt>
<dd><input name="lieu" type="radio" value="1" />
  <img src="../images/logo_openaustalie.png" width="45" height="45" align="absmiddle" /><label for="openaustralie"> Open d'Australie</label></dd>
  <dd><input name="lieu" type="radio" value="2" />
  <img src="../images/logo_rolandgarros.png" width="45" height="45" align="absmiddle" /><label for="rolandgarros"> Roland Garros</label></dd>
  <dd><input name="lieu" type="radio" value="3" />
  <img src="../images/logo_usopen.png" width="45" height="45" align="absmiddle" /><label for="usopen"> US Open</label></dd>
    <dd><input name="lieu" type="radio" value="4" />
  <img src="../images/logo_wimbledon.png" width="45" height="45" align="absmiddle" /><label for="wimbledon"> Wimbledon</label></dd>
</dl>


Heyoan a écrit :

Par exemple le nom de l'image devrait se trouver dans la table tournoi : cela n'a aucun sens de refaire un test dans le code PHP... Ensuite, si l'image ne s'affiche pas c'est que le code html généré est faux (chemin vers l'image) : il suffit d'afficher la source de la page pour voir ce qui ne va pas.


Ce qui veut dire que je dois mettre comme valeur le nom de mes images et non des chiffres ? (1, 2, 3 ou 4) ?

Nolem a écrit :


$sql = "SELECT nb_place FROM tournois WHERE id_tournois=1";

$resultat = mysql_query($sql) or die ('Erreur : '.mysql_error());  //mauvaise pratique ! 
$nb_places_disponibles = mysql_fetch_row($resultat);

$sql = "SELECT COUNT(*) AS inscrit FROM inscription WHERE id_tournois=1";

$resultat = mysql_query($sql) or die ('Erreur : '.mysql_error());  //mauvaise pratique ! 
$nb_participants_inscris = mysql_fetch_row($resultat);

//conditionnel ternaire
echo ($nb_participants_inscris[0]<$nb_places_disponibles)? $nb_participants_inscris[0] : "mon_chemin/image_incription_complet.png";


Je remarque, dans le code ci-dessus : "nb_participants_inscris" et "nb_places_disponibles", ce sont des champs qui doivent appartenir à quelle table ? Sachant que je n'ai pas crée de table participants, comment dois-je faire ?

Oula, je vous embête, et du coup je suis un peu perdu Smiley confus . Moi qui pensait que c'était plus simple et qu'avec mes petites connaissances je pouvais m'en sortir, mais finalement c'est bien plus compliqué que je ne le pensais.

J'ai le pressentiment que je vais devoir tout reprendre à zéro, en commençant par la réorganisation de mes tables Smiley ohwell .
Modifié par draklane (13 Jul 2009 - 16:04)
Pages :