Page 1 sur 1

Concaténation ne marche pas

Posté : 22 janv. 2011, 21:02
par mtherrie
Bonjour à toutes et à tous,

J'essaie de passer à une variable $database, la valeur concaténuée de 2 variables, saisies lors de la transmission d'un formulaire en utilisant la forme suivante:

$database=$categorie."_".$classe

Lorsque je veux connecter à la base de donnée, je tombe dans mon dans le "ELSE" de mon script qui dit que ça ne marche pas.

Voici la portion de script:
$user_name="Marc";
$password="J0nathan";
$database=$categorie."_".$classe;
$server="127.0.0.1";
$db_connect = mysql_connect($server,$user_name,$password);


//Vérifie si équipe locale est gagnante et ajoute l'information dans la table de résultats (resultats)
if($pointageLocal>$pointageVisiteur)
{
$gagnant=$_POST['equipeLocale'];
$perdant=$_POST['equipeVisiteur'];
$victoire = '1';
$defaite='1';
$nulle='1';
$erreur="Ça ne marche pas";

$sqlinsertG = "INSERT INTO resultats (equipe, victoire) VALUES ('$gagnant', '$victoire') ON duplicate KEY UPDATE victoire = victoire + 1";
$sqlinsertP = "INSERT INTO resultats (equipe, defaite) VALUES ('$perdant', '$defaite') ON duplicate KEY UPDATE defaite = defaite + 1";

$db_found=mysql_select_db($database,$db_connect); // Se connecte à la base de donnée

if ($db_found){
echo $database;
}
Else{
echo "Ça ne marche pas!";
}

Parce que j'ai différentes catégories (atome, pee-wee, bantam et midget) et que j'ai 3 classes possibles (A, B et Filles) Comment puis-je, basé sur les variables postées, connecter à la bonne base de donnée?

Merci pour vos idées!

Marc

Re: Concaténation ne marche pas

Posté : 22 janv. 2011, 23:12
par moogli
Salut,

Tes variables categorie et classe n'existe pas.

@+

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 15:06
par mtherrie
Bonjour Moogli, merci de me répondre.

Si, mes variables sont définies. Voici la portion de code précédant la portion que j'aiposté en tout premier lieu!

if(isset($_POST['submit']))
{

$datejour=$_POST['date_jour'];
$categorie = $_POST['categorie'];
$classe = $_POST['classe'];
$partie = $_POST['partie'];
$equipeLocale = $_POST['equipeLocale'];
$pointageLocal = $_POST['pointageLocal'];
$equipeVisiteur = $_POST['equipeVisiteur'];
$pointageVisiteur = $_POST['pointageVisiteur'];
$message = "Le ".$datejour." dans la catégorie ".$categorie." ".$classe. " ".$equipeLocale. " ".$pointageLocal. " vs ".$equipeVisiteur." ".$pointageVisiteur;


$user_name="Marc";
$password="J0nathan";
$database="partie_jouee";
$server="127.0.0.1";
$db_connect = mysql_connect($server,$user_name,$password);
$sqlinsert = "INSERT INTO listing (id, date_jour, categorie, classe, numero_partie, equipeLocale, pointageLocal, equipeVisiteur, pointageVisiteur) VALUES (null, '$datejour', '$categorie', '$classe', '$partie', '$equipeLocale', '$pointageLocal', '$equipeVisiteur', '$pointageVisiteur')";

mysql_select_db($database,$db_connect);
mysql_query($sqlinsert) or die('Ne peut mettre listing à jour');
mysql_close($db_connect);
}

Je peux connecter à ma base de donnée et y faire l'insertion. C'est le reste du script (posté ci-haut dans le premier post) qui ne fonctionne pas...

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 15:16
par dunbar
Salut,

Le résultat de ceci
echo '<pre>';
 print_r($_POST);
echo '</pre>';
Donne quoi ?

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 15:38
par sadeq
Parce que j'ai différentes catégories (atome, pee-wee, bantam et midget) et que j'ai 3 classes possibles (A, B et Filles) Comment puis-je, basé sur les variables postées, connecter à la bonne base de donnée?
Bonjour, l'erreur que tu rencontre est due au fait que la base de données n'existe pas.
Selon ce que tu décrit, tu essaye de te connecter à une base de données nommée $categorie.'_'.$classe, et par conséquent tu dois avoir déjà créé les bases de données suivantes, qui représentent les combinaisons possibles entre catégories et classes:
1. atome_A
2. atome_B
3. atome_Filles
----
4. pee-wee_A
5. pee-wee_B
6. pee-wee_Filles
----
7. bantam_A
8. bantam_B
9. bantam_Filles
----
10. midget_A
11. midget_B
12. midget_Filles

Je ne pense pas que c'est la bonne méthode de concevoir les choses mais en attendant ta confirmation ou infirmation.

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 16:41
par mtherrie
@Sadeq:

Merci de me répondre!

J'ai créé les bases de données atome_a et bantam_filles. Les valeurs dans mon code html des boutons radios sont en minuscule. Lorsque je place les paramètres en remarque et que je fais l'écho de la base de donnée, j'obtiens bel et bien "bantam_filles".

Tu dis que tu ne pense pas que c'est la bonne méthode de concevoir les choses. Je suis ouvert à toutes suggestions! rappelons-nous que je suis "néo" au langage PHP!

:)

Marc

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 16:47
par mtherrie
@Dunbar:

Merci de me répondre:

La réponse à ta question est:

Array
(
[date_jour] => 17-AVR-2011
[categorie] => bantam
[classe] => filles
[partie] => 720
[equipeLocale] => Chelsea
[pointageLocal] => 5
[equipeVisiteur] => Aylmer
[pointageVisiteur] => 2
[submit] => Transmettre
)

Marc

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 18:00
par moogli
Peut tu nous donner les instructions utilisées pour la creation de tous cela en sql ? (pas de confusion entre base et table ?)

@+

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 22:03
par sadeq
@Sadeq:
Tu dis que tu ne pense pas que c'est la bonne méthode de concevoir les choses. Je suis ouvert à toutes suggestions! rappelons-nous que je suis "néo" au langage PHP!

:)

Marc
Tout dépend de comment tu conçois ton application, tu en dis rien. Mais le plus plausible est de se limiter à une seule base de données qui reste le pacquage principal de toute source de données (table) nécessaire (surtout ne pas confondre base de données et tables comme dit moogli)

Peut être faut-il que tu nous développe un peu plus le contexte autours des fameuses catégories et classes et leur relations avec les autres entités de ton application.

Bien à toi.

Re: Concaténation ne marche pas

Posté : 23 janv. 2011, 23:11
par mtherrie
@Moogli:

Dans mes 2 premiers posts, j'y ai inscrit les instructions MySql utilisées pour faire l'incorporation des données. Tout y est.

@Sadeq:

Je suis président de la région de l'Outaouais, au Québec, pour le baseball. Je veux permettre aux entraîneurs, après leur partie, d'entrer le pointage du match. Pour se faire, j'utilise un formulaire en HTML Lorsque les entraineurs inscrivent les informations et appuient sur le bouton transmettre, j'ai un script PHP qui, partiellement, fait les choses suivantes:
1) Transfert les informations de la partie (date, catégorie, classe, numéro de partie, équipe locale, pointage local, équipe visiteur et pointage visiteur) dans une base de donnée préparée à cette fin (et elle fonctionne!)
2) Transmet au statisticien de la ligue, les mêmes informations par courriel via la fonction "mail" (et ça aussi ça fonctionne)
3) Évalue les pointages afin de déterminer qui a gagné, qui a perdu ou si c'est égal et assigne une victoire, une défaite ou une nulle aux équipes en présence. Cette dernière partie fonctionne si j'attribue à la valeur $database, le nom de la base de donnée (comme par exemple atome_a). Par contre, comme tu l'as si bien décrit, j'ai de multiple possibilités. Je veux donc modifier ma valeur $database en fonction de la valeur "postée" de la variable $catégorie et la variable $classe ce qui fera en sorte d'alléger mon script et me permettra de transférer les informations à la bonne base de donnée. J'ai préalablement préparer les bases de données, telles que tu les as énumérées. Elles attendent les informations.

Est-ce plus clair??

Merci de votre support!

Marc

Re: Concaténation ne marche pas

Posté : 24 janv. 2011, 00:01
par dunbar
Salut,

Comme ceci cela change quelque chose ?
<?php
/*
[date_jour] => 17-AVR-2011
[categorie] => bantam
[classe] => filles
[partie] => 720
[equipeLocale] => Chelsea
[pointageLocal] => 5
[equipeVisiteur] => Aylmer
[pointageVisiteur] => 2
[submit] => Transmettre
*/
	if(isset($_POST['submit'])&&($_POST['submit'] == 'Transmettre'))
	{


		  ####################################################################
		  # Définition des paramètres de connexion à la base de données.
		  #
		  	$user_name ="Marc";
		    $password  ="J0nathan";
		    $database  ="partie_jouee";
		    $server    ="127.0.0.1";
		  #
		  #   Fin des paramètres de connexion à la base de données.
		  #####################################################################

		  #####################################################################
		  # Connexion à la base de données.//
		  #
		  	    $sql_db = mysql_connect($server, $user_name, $password) or die("<font color='#0000A0'>Erreur MySQL :<br />" . $sql_db .
		  	    "<br />" . "Impossible d'établir une connexion avec le serveur MySQL</font>");

		  	    mysql_select_db($database) or die("<font color='#0000A0'>Erreur MySQL :<br />" . $database . "<br />" .
		  	    "Impossible d'établir une connexion avec la base " . $database . "</font>");
		  #
		  # Fin de la requête de connexion à la base de données.
		  #####################################################################





		$datejour         = (iSset($_POST['date_jour']) ? mysql_real_escape_string($_POST['date_jour']) : null);
		$categorie        = (iSset($_POST['categorie']) ? mysql_real_escape_string($_POST['categorie']) : null);
		$classe           = (iSset($_POST['classe']) ? mysql_real_escape_string($_POST['classe']) : null);
		$partie           = (iSset($_POST['partie']) ? mysql_real_escape_string($_POST['equipeLocale']) : null);
		$equipeLocale     = (iSset($_POST['equipeLocale']) ? mysql_real_escape_string($_POST['equipeLocale']) : null);
		$pointageLocal    = (iSset($_POST['pointageLocal']) ? mysql_real_escape_string($_POST['pointageLocal']) : null);
		$equipeVisiteur   = (iSset($_POST['equipeVisiteur']) ? mysql_real_escape_string($_POST['equipeVisiteur']) : null);
		$pointageVisiteur = (iSset($_POST['pointageVisiteur']) ? mysql_real_escape_string($_POST['pointageVisiteur']) : null);
		$message = "Le ".$datejour." dans la catégorie ".$categorie." ".$classe. " ".$equipeLocale. " ".$pointageLocal. " vs ".$equipeVisiteur." ".$pointageVisiteur;




		$sqlinsert = "INSERT INTO listing (id, date_jour, categorie, classe, numero_partie, equipeLocale, pointageLocal, equipeVisiteur, pointageVisiteur) VALUES (null, '$datejour', '$categorie', '$classe', '$partie', '$equipeLocale', '$pointageLocal', '$equipeVisiteur', '$pointageVisiteur')";

		mysql_query($sqlinsert) or die('Ne peut mettre listing à jour !'.$sqlinsert.'<br>'.mysql_error());






		if($pointageLocal > $pointageVisiteur)
		{
			$gagnant  = (iSset($_POST['equipeLocale']) ? mysql_real_escape_string($_POST['equipeLocale']) : null);
			$perdant  = (iSset($_POST['equipeVisiteur']) ? mysql_real_escape_string($_POST['equipeLocale']) : null);
			$victoire = '1';
			$defaite  = '1';
			$nulle    = '1';
			$erreur   = "Ça ne marche pas";

			$sqlinsertG = "INSERT INTO resultats (equipe, victoire) VALUES ('$gagnant', '$victoire') ON duplicate KEY UPDATE victoire = victoire + 1";
			mysql_query($sqlinsertG) or die('Erreur SQL !'.$sqlinsertG.'<br>'.mysql_error());

			$sqlinsertP = "INSERT INTO resultats (equipe, defaite) VALUES ('$perdant', '$defaite') ON duplicate KEY UPDATE defaite = defaite + 1";
	        mysql_query($sqlinsertP) or die('Erreur SQL !'.$sqlinsertP.'<br>'.mysql_error());



		}
		else
		{
			echo "Ça ne marche pas!";
		}

   }
   else
   {
   		echo "Erreur formulaire";
   }


?>
A+

Re: Concaténation ne marche pas

Posté : 24 janv. 2011, 01:41
par mtherrie
@dunbar:

Si je comprend bien, la modification que tu proposes implique que je doive ajouter une table "resultats" dans la base de donnée "partieJouée" et non dans une base séparée, c'est bien ça?

Marc

Re: Concaténation ne marche pas

Posté : 24 janv. 2011, 04:32
par mtherrie
AVIS À TOUS!!!

Merci de votre précieuse collaboration. J'ai résolu mon problème!

La concaténation fonctionne très bien. L'erreur que je faisais est simple, mais combien agaçante quand tu cherches!!!

Il fallait que je définisse ma variable comme suit:

$database=$categorie.'_'.$classe;

Tout le long, je mettais des "doubles guillemets" au lieu de 'simples guillemets'. Quelle différence ces p'tites bêtes peuvent faire!!

Vous pouvez considérer le problème résolu, jusqu'au prochain!!

Marc

Re: Concaténation ne marche pas

Posté : 24 janv. 2011, 08:47
par dunbar
@dunbar:

Si je comprend bien, la modification que tu proposes implique que je doive ajouter une table "resultats" dans la base de donnée "partieJouée" et non dans une base séparée, c'est bien ça?

Marc
Je n'apporte aucune modification au script juste une amélioration et correction car je ne comprends pas comment tu n'avais pas d'erreur il manquait un }
:)

Re: Concaténation ne marche pas

Posté : 24 janv. 2011, 11:01
par sadeq
Ok, j'ai compris le contexte, donc chaque base $categorie.'_'.$classe contient une table "resultats". Et puisque tu a créé les bases adéquates c'est OK.

Par contre, j'ai une proposition de simplification si bien sûr tu ne comptes pas distribuer les bases de données ailleurs, il suffit tout simplement d'utiliser une seule table "resultats" dans la base de données principale "partie_jouee" dont la structure serait la suivante:
create table resultats (
           categorie varchar(255), 
           classe varchar(255),            
           equipe varchar(255), 
           victoire int, 
           defaite int,
           nulle int,
           primary key (equipe) );
Puis insérer les résultats des matchs dans cette table exactement comme tu fais actuellement dans ton script, qu'on va légèrement modifier au niveau de l'instruction INSERT pour prendre en compte la nouvelle structure.

Voici la portion du script modifié:
$user_name="Marc";
$password="J0nathan";
$database="partie_jouee"; //base de données principale
$server="127.0.0.1";
$db_connect = mysql_connect($server,$user_name,$password) or die (mysql_error()); // Se connecter au serveur MySQL
mysql_select_db($database,$db_connect) or die (mysql_error()); // Se connecte à la base de donnée

//Vérifie si équipe locale a fait match nul et ajoute l'information dans la table de résultats (resultats)
if ($pointageLocal == $pointageVisiteur)
{
   $equipe1 = $_POST['equipeLocale'];
   $equipe2 = $_POST['equipeVisiteur'];
   $nulle = 1;
   $sqlinsertN1 = "INSERT INTO resultats (categorie, classe, equipe, nulle) VALUES ('$categorie', '$classe', '$equipe1', '$nulle') ON duplicate KEY UPDATE nulle = nulle + 1";
   $sqlinsertN2 = "INSERT INTO resultats (categorie, classe, equipe, nulle) VALUES ('$categorie', '$classe', '$equipe2', '$nulle') ON duplicate KEY UPDATE nulle = nulle + 1";
   // Enregistrer un match nul équipe 1
   $requete = mysql_query($sqlinsertN1 , $db_connect);
   if ( !$requete ) echo (mysql_error());
   // Enregistrer un match nul équipe 2
   $requete = mysql_query($sqlinsertN2 , $db_connect);
   if ( !$requete ) echo (mysql_error());
   // Fin de l'enregistrement
   if ($requete) echo "Résultat enregistré : Egalité entre $equipe1 et $equipe2 ($pointageLocal/$pointageVisiteur)";
}
else 
{
	//Vérifie si équipe locale est gagnante et ajoute l'information dans la table de résultats (resultats)
	if ($pointageLocal > $pointageVisiteur)
	{
   		$gagnant = $_POST['equipeLocale'];
   		$perdant = $_POST['equipeVisiteur'];
   		$pointsG = $pointageLocal;
   		$pointsP = $pointageVisiteur;
	}
	else if($pointageLocal < $pointageVisiteur)
	{
   		$gagnant = $_POST['equipeVisiteur'];
   		$perdant = $_POST['equipeLocale'];
   		$pointsG = $pointageVisiteur;
   		$pointsP = $pointageLocal;
	}
	//
	$victoire = 1;
	$defaite = 1;
	$sqlinsertG = "INSERT INTO resultats (categorie, classe, equipe, victoire) VALUES ('$categorie', '$classe', '$gagnant', '$victoire') ON duplicate KEY UPDATE victoire = victoire + 1";
	$sqlinsertP = "INSERT INTO resultats (categorie, classe, equipe, defaite) VALUES ('$categorie', '$classe', '$perdant', '$defaite') ON duplicate KEY UPDATE defaite = defaite + 1";
	// Enregistrer une victoire
	$requete = mysql_query($sqlinsertG , $db_connect);
	if ( !$requete ) echo (mysql_error());
	$requete = mysql_query($sqlinsertP , $db_connect);
	if ( !$requete ) echo (mysql_error());
	// Fin de l'enregistrement
	if ($requete) echo "Résultat enregistré : $gagnant contre $perdant ($pointsG/$pointsP)";
}
Voila et A+