Vérification dans la table

Nedek
Invité n'ayant pas de compte PHPfrance

13 oct. 2013, 18:12

Bonjour à tous. Je suis à la recherche d'une solution. (C'est pour un exo de cours)
J'ai dans une page un champ ou l'utilisateur peut rentrer le nom d'un légume à ajouter dans la table. J'aimerais vérifier si le nom que l'utilisateur rentre n'existe pas dans la table et s'il n'existe pas, qu'il soit ajouter à cette table. Voilà ce que j'ai fait qui ne marche pas (L'erreur est peut être stupide mais en tant que débutant, je ne vois pas du tout)
<?php require 'includes/connect.php' 
$nomLegume=$_POST['nomLegume'];

$legume="SELECT nomLegume FROM legume";
$result = $connection -> query ($legume);
$tableau = $result -> fetchAll (PDO::FETCH_OBJ);

foreach ($tableau as $ligne)
{
	if (.nomLegume=$nomLegume)
	{
		alert "Ce nom existe déjà";
	}
	else{
		$ajout="INSERT INTO legume  (nomLegume) VALUES ( ".$nomLegume.")"
		$result = $connection -> query ($ajout);
		alert "Votre legume à été ajouté";
	}
};


?>
PS: Ma connection à la base fonctionne bien, et le $_POST['nomLegume'] vient d'une autre pas d'un champ name:nomLegume.
Merci pour votre aide ;)

Eléphant du PHP | 116 Messages

13 oct. 2013, 18:36

Salut,

As tu une erreur ? Si tu n'en as pas :
 error_reporting(E_ALL); 
 ini_set("display_errors", 1); 
if (.nomLegume=$nomLegume)
1/ En php les variables commencent par un $.
2/ La comparaison est avec ==. Là tu fais une affectation.

Alert ? Non non non... Essaye avec un echo ou un print ;-)

Bon courage !
@+,
Computarelier

Petit nouveau ! | 4 Messages

13 oct. 2013, 19:07

Bien vu ;)
J'ai encore un peu de mal...
Avec les modifications, j'ai toujours la même erreur :
Parse error: syntax error, unexpected '$nomLegume' (T_VARIABLE) in C:\xampp\htdocs\tp3\ajouterLegume.php on line 2

Eléphant du PHP | 116 Messages

13 oct. 2013, 19:37

Ah oui, tu as oublié de fermer ta première ligne avec ; :-)

(prends un IDE un peu sympa... Ce genre d'erreur ne t'arriverai pas avec un Netbeans ou autre !)
@+,
Computarelier

Petit nouveau ! | 4 Messages

13 oct. 2013, 20:24

Oh la la!! Quel boulet :/
Merci, j'ai maintenant la même erreur avec $result :'(

Pour netbeans, je l'utilise quand je ne suis pas en local, mais quand je veux l'utiliser en local, j'arrive pas à le configurer comme il faut...

Petit nouveau ! | 4 Messages

13 oct. 2013, 20:27

Autant pour moi, la ligne d'avant n'était pas fermé non plus...
Par contre, si le légume n'est pas dans la table, il ne s'ajoute pas avec mon else...
Merci beaucoup pour ton aide ;)

Eléphant du PHP | 116 Messages

13 oct. 2013, 21:06

1. Rajoute un try/catch pour voir les erreurs.
2. (Revois comment on fait une requête d'insert ;-))

Bon courage !
@+,
Computarelier

antoine94200
Invité n'ayant pas de compte PHPfrance

14 oct. 2013, 09:31

if (.nomLegume=$nomLegume)
        {
                alert "Ce nom existe déjà";
        }
        else{
                $ajout="INSERT INTO legume  (nomLegume) VALUES ( ".$nomLegume.")"
je ne suis pas sur pour .nomLegume , j'aurai plutot mis $ligne["nomLegume"].

.nomLegume=$nomLegume là non , trouve comment faire une comparaison et non une affectation

[php>$ajout="INSERT INTO legume (nomLegume) VALUES ( ".$nomLegume.")"[/php]
à moins que ton champ soit numérique, il te manque quelque chose autour de ".$nomLegume." , comme une quote par exemple...

Sinon tu peux aussi ajouter un where dans ton premier select et ne pas faire de foreach...

Bon courage

Petit nouveau ! | 4 Messages

14 oct. 2013, 13:32

Dans l'énoncé, il nous demande de faire comme ça pour la première requête.

Mon code après vos remarque (j'essai de les mémoriser pour éviter de les reproduire)
<?php require 'includes/connect.php';
$nomLegume=$_POST['nomLegume'];

$legume="SELECT nomLegume FROM legume";
$result = $connection -> query ($legume);
$tableau = $result -> fetchAll (PDO::FETCH_OBJ);

foreach ($tableau as $ligne) {
	if ($ligne["nomLegume"]==$nomLegume)
	{
		echo "<script>alert(\"Le légume existe déjà.\")</script>"; 
	}
	else{
		$ajout="INSERT INTO legume  (nomLegume) VALUES ( '".$nomLegume."')";
		$resultAjout = $connection -> query ($ajout);
		echo "<script>alert(\"Votre légume à été ajouté.\")</script>"; 
	}
};
?>
Ca me met cette erreur maintenant :
Fatal error: Cannot use object of type stdClass as array in C:\xampp\htdocs\tp3\ajouterLegume.php on line 9

Et j'ai vu sur un autre forum qu'il faudrait plutôt utiliser fetch_assoc, mais quand je le fait ça me rentre le nom autant de fois que j'ai d'entrées dans ma table (même s'il existe déjà d'ailleurs)

Eléphant du PHP | 116 Messages

14 oct. 2013, 13:44

Hellow,

Regarde :
$tableau = $result -> fetchAll (PDO::FETCH_OBJ);
...
if ($ligne["nomLegume"]==$nomLegume)
Un fetchAll avec pour paramètre PDO::FETCH_OBJ tu l'exploites comment après ?

Bon courage,
@+,
Computarelier