Posté(e) le 25 juillet 201411 a Ca fait maintenant une semaine que j'essaye de me faire une interface web pour alimenter une BDD alimentaire. Rentrer les produits en rentrant des courses et les selectionner avant de faire sa liste pour qu'il sorte quel magasin visiter en fonction des prix des différents produits voulus. Ca allait pas trop mal jusqu'a hier...J'avais tres tres doucement mais j'avancait. Mais hier soir c'est la cata J'ai decouvert que mysql_query() n'est pput d'actualité et qu'il faut passer par PDO (orienté objet hein...) Du coup j'ai tout perdu et j'arrive put a alimenter ma BDD. Comble du code j'ai carrément une page vide. Le <form> fonctionne bien puisque qu'en commentant mon code PHP il s'affiche bien... Bref je vous laisse le code parce que je voit vraiment pas d'ou ca vient (enfin si mais je voit pas comment resoudre) <html> <head> <link rel="stylesheet" href="style.css"><!--Reference a la feuille CSS de style ajout_prod--> <title>Ajout de produits</title> </head> <body> <table> <tr><td><?php include ("menu.php"); ?> </td> <td><h1>Entrez les donnees demandees :</h1> <form name="ajout_prod" method="post" action="ajout_prod.php"> Entrez le produit : <input type="text" name="produit"> <br> Entrez la marque : <input type="text" name="marque"> <br> Catégorie : <select name="cat" size="1"> <option value="pain">Pain/Viennoiserie</option> <option value="conserve">Conserve</option> <option value="legume">Légumes</option> <option value="viande">Viande</option> <option value="charcut">Charcuterie</option> <option value="poisson">Poisson</option> <option value="sante">Beauté/Santé</option> <option value="gateau">Gateaux</option> <option value="fromage">Fromage</option> <option value="fruit">Fruits</option> <option value="alcool">Alcool</option> <option value="apero">Apero</option> <option value="linge">Linge</option> </select><br> Conditionnement : <select name="cond" size="1"><br> <option value="paquet">Paquet</option> <option value="bouteille">Bouteille</option> <option value="piecece">Pièce</option> </select><br> Poid ou contenance :<input type="text" name="quant"> Unité : <select name="unite" size="1"><br> <option value="ml">Ml</option> <option value="l">l</option> <option value="g">g</option> <option value="kg">Kg</option> </select><br> Prix : <input type="text" name="prix"><br> Magasin : <select name="mag" size="1"><br> <option value="lidl">Lidl</option> <option value="aldi">Aldi</option> <option value="superu">Super U</option> <option value="leclerc">Leclerc</option> <option value="carrefour">Carrefour</option> <option value="match">Match</option> <option value="foirfouille">Foire Fouille</option> <option value="baboo">Baboo</option> </select><br> Ville : <input type="radio" name="ville" value="thaon" checked>Thaon<input type="radio" name="ville" value="epinal">Epinal<input type="radio" name="ville" value="golbey">Golbey<br> <input type="submit" name="valider" value="OK"> </form> <?php if (isset ($_POST['OK'])){ //Si le bouton OK est cliquer try{ $connection=new PDO('mysql:host=localhost;dbname=course', 'root', '******', '' ); } catch ( Exception $e ) { die( 'Connection à MySQL impossible : ' .$e->getMessage()); } $req = $connection -> prepare('INSERT INTO produit(produit, marque, type, cond, poid, unite, prix, mag, ville) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)'); $success = $req -> exec(array( 'produit' => $_POST['produit'], 'marque' => $_POST['marque'], 'cat' => $_POST['cat'], 'cond' => $_POST['cond'], 'quant' => $_POST['quant'], 'unite' => $_POST['unite'], 'prix' => $_POST['prix'], 'mag' => $_POST['mag'], 'ville' => $_POST['ville'], )); if($success){ echo ("Vous avez dajouter' .$produit. 'de marque '.$marque. 'du magasin' .$mag. 'de la ville de' .$ville. 'dans la catégorie' .$cat. "; //}; ?> </td></tr></table> </body> </html>
Posté(e) le 25 juillet 201411 a Je voudrais pas dire de bêtises, mais le catch est à mettre à la fin non ? et tout le reste du code est à mettre dans le try { ... } En tout cas, c'est ce que j'ai fait chez moi. PS : si t'as une page blanche, ça peut venir d'une erreur PHP, voire dans les logs du serveur web, c'est souvent très instructif
Posté(e) le 25 juillet 201411 a Oui, tu essaies d'exécuter du code dans le try et si ça sort une erreur, ça exécute le catch.
Posté(e) le 25 juillet 201411 a Auteur J'ai essayer d'arranger la chose mais komodo et apache me sorte une erreur Fri Jul 25 12:49:14 2014] [error] [client ::1] PHP Parse error: syntax error, unexpected end of file in /var/www/ajout_prod.php on line 81, referer: http://localhost/main.php?page=ajout_prod Ca fait reference a la fermeture de balise </html> :reflechise: J'ai pas les yeux en face des trous <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" href="style.css"><!--Reference a la feuille CSS de style ajout_prod--> <title>Ajout de produits</title> </head> <body> <table> <tr><td><?php include ("menu.php"); ?> </td> <td><h1>Entrez les donnees demandees :</h1> <form name="ajout_prod" method="post" action="ajout_prod.php"> Entrez le produit : <input type="text" name="produit"> <br> Entrez la marque : <input type="text" name="marque"> <br> Catégorie : <select name="cat" size="1"> <option value="pain">Pain/Viennoiserie</option> <option value="conserve">Conserve</option> <option value="legume">Légumes</option> <option value="viande">Viande</option> <option value="charcut">Charcuterie</option> <option value="poisson">Poisson</option> <option value="sante">Beauté/Santé</option> <option value="gateau">Gateaux</option> <option value="fromage">Fromage</option> <option value="fruit">Fruits</option> <option value="alcool">Alcool</option> <option value="apero">Apero</option> <option value="linge">Linge</option> </select><br> Conditionnement : <select name="cond" size="1"><br> <option value="paquet">Paquet</option> <option value="bouteille">Bouteille</option> <option value="piecece">Pièce</option> </select><br> Poid ou contenance :<input type="text" name="quant"> Unité : <select name="unite" size="1"><br> <option value="ml">Ml</option> <option value="l">l</option> <option value="g">g</option> <option value="kg">Kg</option> </select><br> Prix : <input type="text" name="prix"><br> Magasin : <select name="mag" size="1"><br> <option value="lidl">Lidl</option> <option value="aldi">Aldi</option> <option value="superu">Super U</option> <option value="leclerc">Leclerc</option> <option value="carrefour">Carrefour</option> <option value="match">Match</option> <option value="foirfouille">Foire Fouille</option> <option value="baboo">Baboo</option> </select><br> Ville : <input type="radio" name="ville" value="thaon" checked>Thaon<input type="radio" name="ville" value="epinal">Epinal<input type="radio" name="ville" value="golbey">Golbey<br> <input type="submit" name="valider" value="OK"> </form> <?php if (isset ($_POST['OK'])){ //Si le bouton OK est cliquer try{ $connection=new PDO('mysql:host=localhost;dbname=course', 'root', '1135nf03', '' ); $req = $connection -> prepare('INSERT INTO produit(produit, marque, type, cond, poid, unite, prix, mag, ville) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)'); $success = $req -> exec(array( 'produit' => $_POST['produit'], 'marque' => $_POST['marque'], 'cat' => $_POST['cat'], 'cond' => $_POST['cond'], 'quant' => $_POST['quant'], 'unite' => $_POST['unite'], 'prix' => $_POST['prix'], 'mag' => $_POST['mag'], 'ville' => $_POST['ville'],));} catch ( Exception $e ) { die( 'Connection à MySQL impossible : ' .$e->getMessage()); } if($success) (print_r ("Vous avez dajouter' .$produit. 'de marque '.$marque. 'du magasin' .$mag. 'de la ville de' .$ville. 'dans la catégorie' .$cat. ")) ?> </td></tr> </table> </body> </html>
Posté(e) le 25 juillet 201411 a Ton if($success) doit se trouver lui aussi dans le try. Normalement, ça ne devrait plus bloquer (en vérifiant, à priori il ne manque pas de fin d'exécution)
Posté(e) le 25 juillet 201411 a Auteur Ca fonctionne j'ai bien mon form qui s'affiche mais au submit ca ajoute rien a la table et ne renvoie aucune erreur....Et rien dans les log de MySQL... Merci quand meme je vais voir ce qui cloche dans la requete <?php if (isset ($_POST['OK'])){ //Si le bouton OK est cliquer try{ $connection=new PDO('mysql:host=localhost;dbname=course', 'root', '1135nf03', '' ); $req = $connection -> prepare('INSERT INTO produit(produit, marque, type, cond, poid, unite, prix, mag, ville) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)'); $success = $req -> exec(array( 'produit' => $_POST['produit'], 'marque' => $_POST['marque'], 'cat' => $_POST['cat'], 'cond' => $_POST['cond'], 'quant' => $_POST['quant'], 'unite' => $_POST['unite'], 'prix' => $_POST['prix'], 'mag' => $_POST['mag'], 'ville' => $_POST['ville'],));} catch ( Exception $e ) { die( 'Connection à MySQL impossible : ' .$e->getMessage()); } if($success) (print_r ("Ajout de' .$produit. 'de marque '.$marque. 'du magasin' .$mag. 'de la ville de' .$ville. 'dans la catégorie' .$cat. ")); } ?>
Posté(e) le 25 juillet 201411 a Je ne sais pas trop si ça peut poser problème mais dans ton INSERT INTO tu utilises la valeur "poid" et plus loin tu mets "quant". De plus dans : if($success) (print_r ("Ajout de' .$produit. 'de marque '.$marque. 'du magasin' .$mag. 'de la ville de' .$ville. 'dans la catégorie' .$cat. ")); Je vois pas où tu as initialisé tes variables $produit, $marque, etc... Modifié le 25 juillet 201411 a par Cronycs
Posté(e) le 25 juillet 201411 a Auteur poid c'est le nom de la colonne dansla table...J'ai d'ailleurs réduit le code. Les $produit $ marque... sont obtenus par $_POST['produit'] Mais pas d'erreur de MySQL et rien dans les logs :( <?php if (isset ($_POST['OK'])){ //Si le bouton OK est cliquer try{ $connection=new PDO('mysql:host=localhost;dbname=course', 'root', '1135nf03', '' ); } catch ( Exception $e ) { die( 'Connection à MySQL impossible : ' .$e->getMessage()); } $req = $connection -> prepare('INSERT INTO `produit` VALUES (NULL,:produit, :marque, :cat, :cond, :quant, :unite, :prix, :mag, :ville)'); $connection->beginTransaction(); $req = $succes -> execute(array( 'produit' => $_POST['produit'], 'marque' => $_POST['marque'], 'cat' => $_POST['cat'], 'cond' => $_POST['cond'], 'quant' => $_POST['quant'], 'unite' => $_POST['unite'], 'prix' => $_POST['prix'], 'mag' => $_POST['mag'], 'ville' => $_POST['ville'],)); if($success) (print_r ("Ajout de' $produit 'de marque '$marque 'du magasin' $mag 'de la ville de' $ville 'dans la catégorie' $cat " )); $connection->commit(); } ?>
Posté(e) le 25 juillet 201411 a Auteur Bon ben on avance !!! Les données arrivent bien dans la table Reste put qu'a trouver pourquoi il m'affiche pas de message en cas de réussite avec un recap rapide des données entrées <?php if (! empty($_POST)){ //Si le bouton OK est cliquer try{ $connection=new PDO("mysql:host=localhost;dbname=course", "root", "1135nf03"); } catch ( Exception $e ) { die( 'Connection à MySQL impossible : ' .$e->getMessage()); } $req = $connection -> prepare('INSERT INTO `produit` VALUES (NULL,:produit, :marque, :cat, :cond, :quant, :unite, :prix, :mag, :ville)'); $connection->beginTransaction(); $req -> execute(array( 'produit' => $_POST['produit'], 'marque' => $_POST['marque'], 'cat' => $_POST['cat'], 'cond' => $_POST['cond'], 'quant' => $_POST['quant'], 'unite' => $_POST['unite'], 'prix' => $_POST['prix'], 'mag' => $_POST['mag'], 'ville' => $_POST['ville'],)); if($success) (print_r ("Ajout de' .$produit 'de marque '.$marque 'du magasin' .$mag 'de la ville de' .$ville 'dans la catégorie' .$cat " )); $connection->commit(); } ?>
Posté(e) le 25 juillet 201411 a Auteur Je ne sais pas trop si ça peut poser problème mais dans ton INSERT INTO tu utilises la valeur "poid" et plus loin tu mets "quant". De plus dans : if($success) (print_r ("Ajout de' .$produit. 'de marque '.$marque. 'du magasin' .$mag. 'de la ville de' .$ville. 'dans la catégorie' .$cat. ")); Je vois pas où tu as initialisé tes variables $produit, $marque, etc... En fait t'avait raison. Je pensait pouvoir recuperer mes $produit, $prix etc... apres la requete mais pas possible... Donc j'ai declarer les variables et ca passe Merci tout plein !! Je colle le code mais laisse ouvert le topic parce que je pense que ce projet risque de durer un bon moment et que ca va etre dur <?php if (! empty($_POST)){ $produit=$_POST['produit']; $marque=$_POST['marque']; $cat=$_POST['cat']; $cond=$_POST['cond']; $quant=$_POST['quant']; $unite=$_POST['unite']; $prix=$_POST['prix']; $mag=$_POST['mag']; $ville=$_POST['ville']; //Si le bouton OK est cliquer try{ $connection=new PDO("mysql:host=localhost;dbname=course", "root", "1135nf03"); } catch ( Exception $e ) { die( 'Connection à MySQL impossible : ' .$e->getMessage()); } $req = $connection -> prepare('INSERT INTO `produit` VALUES (NULL,:produit, :marque, :cat, :cond, :quant, :unite, :prix, :mag, :ville)'); $connection->beginTransaction(); $req -> execute(array( 'produit' => $_POST['produit'], 'marque' => $_POST['marque'], 'cat' => $_POST['cat'], 'cond' => $_POST['cond'], 'quant' => $_POST['quant'], 'unite' => $_POST['unite'], 'prix' => $_POST['prix'], 'mag' => $_POST['mag'], 'ville' => $_POST['ville'],)); echo ("Ajout de' $produit 'de marque '$marque 'du magasin' $mag 'de la ville de' $ville 'dans la catégorie' $cat " ); $connection->commit(); } ?>
Posté(e) le 10 novembre 201410 a Autre piste possible, sans chercher à démonter tout ce qui à été dit (et qui est ma foi fort instructif), personne ne parles de mysqli qui est bien plus souple et est un objet prêt à l'emploi. Perso, je n'en démord plus. Mais cela ne doit rien enlever à cette discussion qui présente une démarche particulièrement pédagogique, on voit tellement de sites soit disant 'pro' qui oublient un peu trop facilement de parler du catch… brrrr Petit exemple : define('SERVER', 'server'); define('USER', 'user'); define('PSWD', 'pswd'); define('BASE', 'base'); $mysqli = new mysqli(SERVER, USER, PSWD, BASE); if ($mysqli->connect_errno) { echo "C‘est la cata ! : " . $mysqli->connect_error; }Ensuite dans le code c'est tout simplement $maRequette = $mysqli->query("SELECT…"); $infos = $maRequette->mysqli_fetch_assoc… $truc = $infos['machin']; Quant à PDO, je vois un peu par-ci par-là qu'il n'est pas franchement poussé par ses utilisateurs, alors que mysqli se développe vraiment fort ses derniers temps, enfin, je dis ça…
Posté(e) le 10 novembre 201410 a PDO a cet avantage d'être abstrait, les commandes PHP sont les mêmes quelque soit la base derrière. Ça demande un poil plus d'investissement (poo oblige), mais ça fonctionne bien.
Posté(e) le 10 novembre 201410 a Si je ne m'abuse, mysqli est justement censé apporter cette partie poo non ? J'avoue, mon niveau "d'abstraction" est très limité, j'ai toujours rêvé pouvoir papoter avec quelqu'un qui maitrise car je bloque vraiment sur les notions de bases, celle qui malheureusement sont très difficiles à appréhender de manière autodidacte, ce que je suis, finalement :/
Posté(e) le 10 novembre 201410 a Allez, un admin pour nous faire une section "le bar des autodidactes" dans le forum code ?
Posté(e) le 10 novembre 201410 a Si je puis me permettre (je tombe sur le topic), c'est normal que tu ne voyais pas ton success, vu que tu n'affecte nul part ton $success , donc il ne risque pas d'être à true Allez, un admin pour nous faire une section "le bar des autodidactes" dans le forum code ? Il faut dire que je pense qu'on est tous un peu auto didacte dans la programmation (même si certains, dont moi, en ont fait leur travail) Sinon, il y a un bar : https://forum.nextinpact.com/topic/45146-le-bar-de-la-programmation/page-37
Posté(e) le 10 novembre 201410 a Ouais, pardon pour le UP involontaire, j'ai vu la date après coup :/
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.