leger souci d' insertion dans mysql

coyote27
Invité n'ayant pas de compte PHPfrance

15 déc. 2008, 21:11

Bonjour a tous,

voila, j' apprend le php, tout doucement, je ne suis encore qu' une bille et j' ai deja un souci!


j' aimerai faire un catalogue simple (pour que les clients de notre société puisse voir nos produits), pas d' achat en ligne, juste de la consultation.


Je m' occuperai de l' affichage des données mysql aprés, ca ne doit pas etre trop dur.


La je m' occupe de la partie admin, qui consiste simplement a ajouter, modifier, ou effacer un article que nous louons (une fiche article quoi), avec son nom, sa categorie, sa description et son tarif a la journée.


J' ai donc créé une page ajout.php que voici, je ne vous met que la partie concernée car il y a du code que j' ai fait qui securise la page et nécéssite un login passe :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<style type="text/css">
<!--
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
	background-image: url();
	background-repeat: repeat-x;
}
.Style1 {color: #FFFFFF}
.Style2 {
	color: #0000FF;
	font-weight: bold;
	font-size: 14px;
}
.Style3 {
	color: #33FFFF;
	font-weight: bold;
}
-->
</style></head>

<body><form method="post" action="ajout2.php">
 
<p align="center">
	Nom de l' article : <br /><br /><input type="text" name="nom" />
</p>
<p align="center">&nbsp;</p>
<p align="center">Catégories : <br />
    <br />
  <select name="categorie">
    <option value="Mini-pelles">Mini-pelles</option>
    <option value="Rouleaux">Rouleaux</option>
    <option value="Dumpers">Dumpers</option>
    <option value="Groupes et Comprésseurs">Groupes et Comprésseurs</option>
    <option value="Rotovateurs">Rotovateurs</option>
    <option value="Chargeuses">Chargeuses</option>
    <option value="Nacelles">Nacelles</option>
    <option value="Camions-bennes">Camions-bennes</option>
    <option value="Petit outillage">Petit outillage</option>
    <option value="stock à vendre">Stock à vendre</option>	
  </select>
</p>
<p align="center">&nbsp;  </p>
<p align="center">Déscriptif de l' article : <br />
    <br />
  <textarea name="descriptif" rows="8" cols="45">Tapez ici le déscriptif de l' article.</textarea>
</p>
<br /><br />
<p align="center">
	Tarif (par jour si c' est de la location, ou ttc si c' est de l' achat) : <br /><br />
	<input name="tarif" type="text" value="Tapez ici le tarif." size="20" />
  </p><br /><br />
	<p align="center">
	<input type="submit" value="Enregistrer l' article" />
	</p>

</form>

</body>
</html>
Jusqu' ici, rien de bien difficile, j' ai donc créé ensuite pour la récup des infos du formulaire et l' insertion dans mysql ajout2.php que voila :
<?php

$categorie = $_POST['categorie']; 
$nom = $_POST['nom']; 
$descriptif = $_POST['descriptif']; 
$categorie = $_POST['categorie']; 
$nom = $_POST['tarif']; 

mysql_connect("sql.free.fr", "login", "passe")or die ("erreur de connexion"); // Connexion à MySQL
mysql_select_db("ma_base")or die("erreur de connexion base"); // Sélection de la base 

// On ajoute une entrée avec mysql_query
mysql_query("INSERT INTO articles VALUES('', '$categorie', '$nom', '$descriptif', '$categorie', '$tarif')");
echo "La fiche à été ajoutée avec succés"; 


mysql_close(); // Déconnexion de MySQL
?>

Lorsque je remplie la fiche et que je valide, j' ai bien le " La fiche a été ajoutée avec succés", mais je n' ai rien dans mon espace sql. Je vous fais un screenshot de ma base concernée.

coyote27
Invité n'ayant pas de compte PHPfrance

15 déc. 2008, 21:13

Voici le screenshot de la base ma_base, il n' y a rien lorsque je clique sur "afficher"



Je sollicite grandement votre aide :?

desolé
Invité n'ayant pas de compte PHPfrance

15 déc. 2008, 21:14

Desolé je ne peux pas editer, je vais m' inscrire :(

Image

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 déc. 2008, 21:52

Bonjour,

Fais un print de ta requète SQL et teste là dans PHPmyAdmin, cela t'aidera à débuguer et à trouver le problème.

Un "truc" que je te conseille fortement également, c'est d'utiliser toujours mysql_query() avec un affichage des erreurs au cas où.
Concrètement, cela revient à remplacer ta ligne:
mysql_query("INSERT INTO articles VALUES('', '$categorie', '$nom', '$descriptif', '$categorie', '$tarif')"); 
par
mysql_query("INSERT INTO articles VALUES('', '$categorie', '$nom', '$descriptif', '$categorie', '$tarif')") or die("Erreur MySQL : ".mysql_error()); 
Quand tout le reste a échoué, lisez le mode d'emploi...

Invité
Invité n'ayant pas de compte PHPfrance

15 déc. 2008, 22:47

héhé ca alors c' est exactement ce que j' ai testé :P , je commence a me débrouiller ^^, du coup j' avais une variable pas a sa place (bla bla row 1).


Mon script fonctionne, merci de ta réponse, car si j' avais pas trouvé, tu m' aurais grandement aidé ^^


Deuxieme question un poil plus dur.

J' ai donc un formulaire pour ajouter des fiches et qui fonctionne. Comment faire pour que si je crée un formulaire de suppréssion de fiche, il y ai une liste des fiches disponible?

Est ce que je fais simplement:
<?php
$reponse = mysql_query("SELECT * FROM famille 1");
?>

<?php
$reponse = mysql_query("SELECT * FROM famille2");
?>

Et une fois que la liste s' affiche avec les fiches les unes en dessous des autres, créer un petit bouton a coté de chaquefiche pour la supprimer avec un :

heu, la je seche!

Invité
Invité n'ayant pas de compte PHPfrance

15 déc. 2008, 23:08

j' avance au fur et a mesure et je vosu tiens au courant ^^


alors j' ai bien ma liste qui s' affiche si je choisi comme categorie mini-pelles:
$reponse = mysql_query("SELECT id, nom, descriptif, tarif FROM articles WHERE categorie='Mini-pelles'");

while ($donnees = mysql_fetch_array($reponse) )
{
?>


<?php echo $donnees['id']; ?>&nbsp;<?php echo $donnees['nom']; ?>&nbsp;<?php echo $donnees['descriptif']; ?>&nbsp;<?php echo $donnees['tarif']; ?>

Le hic, c' est que:

1 - je ne vois pas comment faire pour qu' il y ai un bouton automatiquement a coté de chaque ligne pour supprimer cette fiche.

2 - c' est moche, est-ce possible d' afficher les ligne mais séparées par plus d' espace entre elles, a la limite dans un tableau ou chaque ligne serait separée par une cellule?


Merci d' avance les gens :)

Eléphant du PHP | 254 Messages

15 déc. 2008, 23:26

Salut

Y a plein de facon de faire, si t'as une liste de choses a administrer, tu peux afficher la liste et mettre un bouton delete a coté de chaque lignes. Tu peux mettre un bouton update aussi, sui reverra sur l'écran d'update préalmablement remplit, et un bouton load qui t'affiche le détail :)

Ou avoir juste une case a cocher sur chaque ligne et faire du traitement de masse avec une rangée de bouton en bas, mais c'est un peu plus comlpliqué

Sinon pour passer les variables, le truc consiste a connaitre l'id que tu manipule au moment ou tu l'affiche, c'est a dire sur chaque ligne, cela te permet de définir ton bouton "delete" comme un lien contenant un parametre GET, que tu pourras récupérer et utiliser dans une requete delete

Code : Tout sélectionner

<a href='tapage.php?varID=tonId'><img scr='imageDelete'></a>
Ainsi, quand l'utilisateur clique dessus, tu peux récupérer $_GET["varID"] et l'effacer en faisant un
$query = sprintf( "DELETE FROM tatable WHERE ID='%s'; ", $_GET["varID"]); 
mysql_query($query); 
Pour le bouton d'update, ca pourrait etre la meme chose, mais en revoyant sur la page qui te sezrt a créer un enregistrement

Code : Tout sélectionner

<a href='formcréation.php?varID=tonId'><img scr='imageUpdate'></a>
En modifiant ta page de formulaire pour qu'il préremplisse celui ci, et deux ou trois autres petites choses mais je crois que je m'égare :)

encore_moi
Invité n'ayant pas de compte PHPfrance

16 déc. 2008, 00:07

lol desolé j' ai pas compris :roll:


Pour mettre en exemple un bouton delete a coté, ce que je ne comprend pas, c' est quel peu-etre le code a mettre pour que le bouton connaisse automatiquement l'id de la ligne (la fiche)?

Eléphant du PHP | 254 Messages

16 déc. 2008, 00:36

Eh bien comme je t'ai mis dans mon précédent message, tu peux mettre ca au bout de chacune de tes lignes
<a href='tapage.php?varID=tonId'><img scr='imageDelete'></a>
Adapté a ton exemple ca donne
printf ( "<a href='tapage.php?varID=%s><img scr='imageDelete'></a>", $donnees['id']; );
Je ne connais pas le nom de ta page php, j'ai donc mis "tapage.php", a toi de remplacer aussi le chemin pour avoir une image, si tu veux tu peux faire sans l'image au début pour piger le truc
printf ( "<a href='tapage.php?varID=%s>delete</a>", $donnees['id']; );
Et ce au bout de chaque ligne, pour chaque article. L'action de cliquer sur ce lien va envoyer une url avec dedasn l'id de l'objet que tu veux effacer. Ainsi un peu comme les variables de formulaire, tu vas pouvoir récupérer cet id grace au tableau de $_GET, en l'occurence ce sera $_GET["varID"] (j'ai mis varID dans l'url mais tu mets ce que tu veux, tant que ca correspond)

Il ne te restera plus qu'a balancer la requete de DELETE

Code : Tout sélectionner

$query = sprintf( "DELETE FROM tatable WHERE ID='%s'; ", $_GET["varID"]); mysql_query($query);

encore_moi
Invité n'ayant pas de compte PHPfrance

16 déc. 2008, 07:57

Hello :D

Bon, j' ai compris le principe, mais pas tout le code, il faut laisser le temps a mon cerveau de déchiffre tout ca. Je n' ai pas encore utilisé la méthode $_get , juste $post.


Je réfléchis a tout ca et je te tiens au courant si j' ai des questions :)




Merci encore :wink:

encore_moi
Invité n'ayant pas de compte PHPfrance

17 déc. 2008, 20:16

Ben je pense avoir a peu prés compris, va juste falloir que je fasse des recherches sur le "fprint", je ne connais pas.


Par contre, je me suis fait chi**** a faire une page par catégorie, avec en haut de chaque page, les liens vers ces pages-categorie (mini_pelles.php, dumpers.php, outillage.php etc etc), et un ami pas trés con sur les bord (hihihoho) m' a dit que c' était stupide puisque le php devait éviter de faire 50 pages, mais plutot de pouvoir consulter visuellement chaque categorie sans vraiment changer de page, je me gausse, parce qu' en fait il a raison ( \o/ ). Quelqu' un pourrait m' expliquer un peu le schema de ceci, c' est a dire, au lieu d' avoir par exemple sur mini-pelles.php une requete:
mysql_query("SELECT id, nom, descriptif, tarifht, tarif FROM articles WHERE categorie='Mini-pelles'");
et de faire de meme, une page pour chaque catégories, pouvoir ajouter cette requete par catégorie sur une meme page, mais comme moi y' en a parler chinois, moi éspère que vous y' en a compris moi huhu :lol:

encore_moi
Invité n'ayant pas de compte PHPfrance

17 déc. 2008, 20:35

visiblement l' ami me conseille la methode "get", ce que j' aime, c' est qu' il me conseille mais ne fais pas le boulot a ma place, je vais regarder ce qu' est ce "get", vos conseils sont toujours bon a prendre hein :D

Eléphanteau du PHP | 20 Messages

17 déc. 2008, 20:41

Salut

Y a plein de facon de faire, si t'as une liste de choses a administrer, tu peux afficher la liste et mettre un bouton delete a coté de chaque lignes. Tu peux mettre un bouton update aussi, sui reverra sur l'écran d'update préalmablement remplit, et un bouton load qui t'affiche le détail :)

Ou avoir juste une case a cocher sur chaque ligne et faire du traitement de masse avec une rangée de bouton en bas, mais c'est un peu plus comlpliqué

Sinon pour passer les variables, le truc consiste a connaitre l'id que tu manipule au moment ou tu l'affiche, c'est a dire sur chaque ligne, cela te permet de définir ton bouton "delete" comme un lien contenant un parametre GET, que tu pourras récupérer et utiliser dans une requete delete

Code : Tout sélectionner

<a href='tapage.php?varID=tonId'><img scr='imageDelete'></a>
Ainsi, quand l'utilisateur clique dessus, tu peux récupérer $_GET["varID"] et l'effacer en faisant un
$query = sprintf( "DELETE FROM tatable WHERE ID='%s'; ", $_GET["varID"]); 
mysql_query($query); 
Pour le bouton d'update, ca pourrait etre la meme chose, mais en revoyant sur la page qui te sezrt a créer un enregistrement

Code : Tout sélectionner

<a href='formcréation.php?varID=tonId'><img scr='imageUpdate'></a>
En modifiant ta page de formulaire pour qu'il préremplisse celui ci, et deux ou trois autres petites choses mais je crois que je m'égare :)
Mouais mais y a une faille dans tout çà, il faut soit échapper varID soit forcer le type à int :
$var = (int) $var;
[/php]

encoire_moi
Invité n'ayant pas de compte PHPfrance

17 déc. 2008, 22:04

bon, ben je comprend a moitié comment faire mon code avec la methode get, surtout pour mettre des requetes en lien, quelqu' un aurait un tuto ou un conseil svp?

Eléphant du PHP | 254 Messages

17 déc. 2008, 22:39

Mouais mais y a une faille dans tout çà, il faut soit échapper varID soit forcer le type à int :
Tout a fait

Bon je donne des pistes a suivre, la solution du bouton sur chaque ligne pour envoyer l'ID a effacer via la variable GET est la plus simple pour qui commence, apres moi je ferais plutot des cases a cocher avec un seul bouton et dasn un formulaire pour faire du post

encoire_moi si t'as des questions sur le principe d'envoie de variables GET grace a un clic sur un lien je t'écoute :)

Sinon pour expliquer un peu, POST et GET sont tres similaires, tu peux tres bien faire du GET avec un formlulaire par exemple, en lui spécifiant, la seule différence alors sera que tes variables apparaitront dans l'url du navigateur, ce qui n'arrive pas avec le POST

Par contre si, au lieu du formulaire, c'est un lien qui envoie une URL avec des parametres dedans, alors ces parametres seront récupérable en GET, ce que je t'ai proposé dans mon exemple (qui n'etais qu'un exemple)

Quoi qu'il en soit, tu veux qu'a chaque ligne dans ta liste, l'utilisateur ai un bouton qui efface la ligne. Tu dois donc envoyer l'ID de ta base de donnée qui correspond a la ligen en question, dans une URL pour pouvoir la récupérer et la traiter par une requete SQL

Pour tes pages de catégories sinon, effectivement si toutes tes pages sont pareil, autant n'en faire qu'une, ou en tout cas qu'un seul fichier, si t'as envie d'avoir dans ton menu toutes tes catégories, tu peux envoyer le meme fichier mais avec un ID catégorie et donc afficher ce qu'il faut