Pbs de variables dans une zone admin

cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010 - 25 août 2004 à 16:30
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005 - 26 août 2004 à 17:31
salut !!!!
voila mon probleme j'ai une premiere page (formulaire.php) qui me permet de recuperer des données afin de les modifier, supprimer ou ajouter un enregistrement(grace a la variable action)jusque la pas de probleme ou presque (du moins j'arrive a recuperer le detail de chaque enregistrement dans le champs du formulaire).
mais la ou ca se complique C au traitement des données. je m'explique ...ce formulaire renvoie vers la page action.php
formulaire.php et si $action=supprimer on supprime l'enregitrement, si $action=modifier on le modifie,...
mais là, pb sur la page action.php :
Undefined index: action a la ligne 3
Undefined variable: resultatscollections a la ligne 5

je ne comprends pas, merci de bien vouloir me donner un coup de main pour que ca marche ... parce que la, je ne vois pas

voici le code de mes 2 pages

**************************************
//actions.php

<?
$action=$_GET['action'];
//initialisation
$message="la collection " . $resultatscollections['nom_collection'] . " a été ";
if ($action =="modifier"){
$requeteMYSQL="UPDATE ...etc;
$message .=" modifiée.";}

if ($action =="ajouter"){
$requeteMYSQL= "INSERT INTO ...etc ;
$message .=" ajoutée.";}
if ($action =="supprimer"){
$requeteMYSQL= "DELETE FROM ...etc;
$message .=" supprimée.";}
//alimentation de la base
$connexion=mysql_connect('localhost', 'root','');
mysql_select_db('ma_base', $connexion);
?>
<html><head></head>
<?
//message de confirmation
echo $message;
?>
</html>

************************************
//formulaire.php

<?
$connexion = mysql_connect('localhost', 'root', '');
mysql_select_db('ma_base', $connexion);
$collection_id=$_GET['collection_id'];
$action=$_GET['action'];
$req_collections = mysql_query("select* FROM collections WHERE collection_id='$collection_id'");

mysql_close($connexion);
?>
<html>
<head>
<title><? echo $action; ?> une collection</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<? echo $action; ?> une collection

<?
//recuperer les donnees
$resultatscollections =mysql_fetch_array($req_collections);
//insertion des donnees
?>
<form action="actions.php" method="post">
nom de la collection : ">

">
</form>

</html>

************************************

@+

ATTENTIO
debutant malgré lui :shy)

11 réponses

blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
25 août 2004 à 17:51
Salut !

Dans ta première page (formulaire.php) tu ne passe à aucun moment la variable $action, ni par POST, ni par GET. Par conséquent rajoute un champs

" />


Tu pourra récupérer cette variable avec $action = $_POST["action"];

Seconde choses, tu utilises la variable $resultatscollections alors que tu passe par le fourmulaire nom_collection;

Il te suffit donc de remplacer


$message ="la collection " . $resultatscollections['nom_collection'] . " a été ";



par


$message= "la collection " . $_POST['nom_collection'] . " a été ";



Je te conseil aussi de vérifié que les variables ont bien été initialisé avec isset($var) pour éviter les erreurs du type "Notice: Undefined variable..."

Exemple :


if (isset($_POST["action"]))
{
$action  = $_POST["action"];
}



Dernière chose, tu semble aussi confondre $_POST et $_GET. $_POST est pour ce qui provient d'un formulaire avec method="post". $_GET est pour ce qui provient de l'url (un formulaire en method=get transforme l'url pour passer les arguments)

En espérant avoir pu t'aider

bLiNkSeB - Anciennement sebastienbro
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
25 août 2004 à 20:52
salut !

merci infiniment de ton aide seb ! C vraiment tres clair ce que tu m'as fait ...mais G encore quelques petits soucis : :blush)
C vrai je me melange pas mal les pinceaux entre le post et le get... en fait dans la page precedant formulaire.php G ma liste de toutes mes collections et pour chaque enregistrement j'ai des boutons modifier, supprimer du type :

 Modifier


donc j'imagine que pour la recuperation de $action C du get ?

avec ton aide j'ai reussi a recuperer le nouveau nom de la collection modifiée dans action.php
$_POST['nom_collection']

mais par contre pour le $action pas moyen de la recuperer.
j'ai un truc du genre :
"la collection nouveau_nom_de_la_collection a été"

autre chose : si je veux ajouter une collection j'ai la variable collection_id qu'il ne reconnait pas, pourtant j'ai mis comme tu m'as dis une reconnaissance de variable
if (isset($_POST['collection_id']))
{
$collection_id=$_POST['collection_id'];
}
a la ligne

$req_collections = mysql_query("select* FROM collections WHERE collection_id='$collection_id'");

je te redonne le nouveau code des 2 pages:
(avec surement beaucoup de fautes get/post)

<code>
//action.php

<?
$action=$_POST['action'];
//initialisation
$message="la collection " . $_POST['nom_collection'] . " a été ";
if ($action =="modifier")
{
$requeteMYSQL="UPDATE ...
$message .=" modifiée.";
}

if ($action =="ajouter")
{
$requeteMYSQL= "INSERT INTO ..
$message .=" ajoutée.";
}

if ($action =="supprimer")
{
$requeteMYSQL= "DELETE FROM ...
$message .=" supprimée.";
}
$message .="
 Merci de votre collaboration.";

//alimentation de la base
$connexion=mysql_connect('localhost', 'root','');
mysql_select_db('db', $connexion);
?>

<html><head></head>
<?
//message de confirmation
echo $message;
?>
</html>



//formulaire.php

<?
$connexion = mysql_connect('localhost', 'root', '');
mysql_select_db('bd', $connexion);

if (isset($_POST['collection_id']))
{
$collection_id=$_POST['collection_id'];
}

if (isset($_GET["action"]))
{
$action = $_GET["action"];
}

$req_collections = mysql_query("select* FROM collections WHERE collection_id='$collection_id'");
$req_univers = mysql_query("select* FROM univers ");
$univers_id['univers_id']="";
mysql_close($connexion);
?>
<html><head></head>
<?
//recuperer les donnees
$resultatscollections =mysql_fetch_array($req_collections);
//insertion des donnees
?>
<form action="actions_collections.php" method="post">
" />
nom de la collection : ">

">
</form></html>


merci de ton aide ...

ATTENTIO
debutant malgré lui

A+
0
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
25 août 2004 à 21:11
Salut :)

Donc premièrement dans la page avant formulaire.php :


 Modifier



Tu passes tes deux variables par l'URL, donc methode GET. If faut donc coriger la ligne :


if (isset($_POST['collection_id']))
{
$collection_id= $_POST['collection_id'];
}



par


if (isset($_GET['collection_id']))
{
$collection_id=$_GET['collection_id'];
}



puisque tu passes par l'url.

Deuxièmement tu écris :

</gras>" />


Tu as un problème au niveau du php. En effet tu spécifie seulement une variable. Il faut soit rajouter un echo() pour afficher c'est variable, ou alors un " =" ce qui donne :


" />
ou
" />



Voilà la normalement tout marche :)

Il y a aussi une technique pour ne plus t'embêter avec les $_GET ou $_POST il suffit de faire comme ça :


if (isset($_GET["var"]))
{
$var = $_GET["var"];
} else if (isset($_POST["var"])) {
$var = $_POST["var"];
}



Cette méthode est cependant à exclure, car elle enlève toute la sécurité introduite par l'usage de GET ou POST !

Voilà bonne prog !

bLiNkSeB - Anciennement sebastienbro
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
25 août 2004 à 23:08
salut !

bon... alors pour la variable action C cool, ca a l'air de marcher,mais maintenant j'ai autre soucis dans la page action.php :

if ($action =="modifier")
{
$requeteMYSQL="UPDATE collections SET nom_collection='$nom_collection', univers_id='$univers_id' WHERE collection_id='$collection_id'";
$message .=" modifiée.";
}

la variable collection_id n'est toujours pas reconnu (ainsi que les autres)

j'uis chiant .... :blush)

merci encore

attentio

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
25 août 2004 à 23:53
Ah oui exact c'est normal :)

En faite, tu ne passe à aucun moment les variables récupérés dans "formulaires.php" à "action.php".

Pour ce faire, tu as deux choix, soit l'url (GET) ou le formulaire (POST). Tu utilises le formulaire! Donc, vu que tu connais déjà tes valeurs, et que l'utilisateur n'a pas à les voir, ni à les modifier, tu doit utiliser des champs "hidden"

donc dans ton formulaire ça donnera :


<form action="actions_collections.php" method="post">
" />
" />
" />

nom de la collection : ">

">

</form>



Rajoute autant de champ hidden que de variable à faire passer !

Et pour récupérer les valeurs sur l'autre page, c'est $_POST[] qu'il faut utiliser !


$collection_id = $_POST["collection_id"];
$univers_id = $_POST["univers_id"];



J'espère que tu as compris mon exemple !

bLiNkSeB - Anciennement sebastienbro
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
26 août 2004 à 00:58
salut !!!

Merci de ta patience seb ....
bon en ce qui concerne la recuperation des variables je n'ai plus d' Undefined variable sauf si je veux ajouter une collection
sur la page formulaire.php avec la variable collection_id :shy)

$req_collections = mysql_query("select* FROM collections WHERE collection_id='$collection_id'");


Deuxieme chose que je fasse un INSERT TO, un UPDATE, un DELETE FROM rien ne se passe dans ma base de donnée, cad que dans la page action j'ai bien une confirmation de mon action mais apres ca suit pas ???? :sad) moi pas comprendre ...

Je te renvoie donc le code des deux pages a nouveau modifiées

//action.php

<?
$action=$_POST['action'];
$collection_id=$_POST['collection_id'];
$univers_id=$_POST['univers_id'];
$nom_collection=$_POST['nom_collection'];
//initialisation
$message="la collection " . $_POST['nom_collection'] . " a été ";
if ($action =="modifier")
{
$requeteMYSQL="UPDATE collections SET nom_collection='$nom_collection', univers_id='$univers_id' WHERE collection_id='$collection_id'";
$message .=" modifiée.";
}

if ($action =="ajouter")
{
$requeteMYSQL= "INSERT INTO collections VALUES('','$nom_collection', '$univers_id')";
$message .=" ajoutée.";
}

if ($action =="supprimer")
{
$requeteMYSQL= "DELETE FROM collections WHERE collection_id='$collection_id'";
$message .=" supprimée.";
}
$message .="
 Merci de votre collaboration.";

//alimentation de la base
$connexion=mysql_connect('localhost', 'root','');
mysql_select_db('db', $connexion);
?>

<html><head></head>
<?
//message de confirmation
echo $message;
?>
</html>



<?
$connexion = mysql_connect('localhost', 'root', '');
mysql_select_db('bd', $connexion);
if (isset($_GET['collection_id']))
{
$collection_id=$_GET['collection_id'];
}

if (isset($_GET["action"]))
{
$action = $_GET["action"];
}
$req_collections = mysql_query("select* FROM collections WHERE collection_id='$collection_id'");
$req_univers = mysql_query("select* FROM univers ");
$univers_id['univers_id']="";
mysql_close($connexion);
?>
<html><head></head>
<?
//recuperer les donnees
$resultatscollections =mysql_fetch_array($req_collections);
//insertion des donnees
?>

<form action="actions_collections.php" method="post">S
" />
" />
" />
" />
nom de la collection : ">

univers : <select name="univers">
<?
//affichage des univers
$selection="";
for($n=0;$n<mysql_num_rows($req_univers);$n++)
{
$resultatsunivers =mysql_fetch_array($req_univers);
$selection="";
if($resultatsunivers['univers_id']  ==  $resultatscollections['univers_id'])
{
$selection = " selected";
}
else
{
$selection="";
}

echo"<option value='" . $resultatsunivers['univers_id'] ."'" . $selection . ">" . $resultatsunivers['nom_univers'] ."</option>";
}

?>
</select>
">
</form></html>



merci encore mille fois

attentio

A+
0
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
26 août 2004 à 01:39
Il est fort probable que le Undefined variable vienne d'ici :

if (isset($_GET['collection_id']))
{
$collection_id=$_GET['collection_id'];
}


En effet si la variable n'est pas passer en GET, elle n'est pas initialisé.

Il faut donc être sûr que ton URL d'appel de la page est bien
http://www.monsite.com/formulaire.php?collection_id=10 par exemple. Sinon la variable $collection_id n'existe pas.

Pour contrer celà, tu peux faire

if (isset($_GET['collection_id']))
{
$collection_id=$_GET['collection_id'];
} else
$collection_id = 0;


Ici si la variable n'existe pas, elle est crée avec comme valeur 0

Ton second problème découle du faite que $connection_id n'étant pas défini dasn formulaire.php, la variable passé à action.php est vide.

Enfin

" />


Cette ligne n'est pas nécessaire, puisque tu redéfini après un TEXT avec le même nom, donc les données seront transmises, donc enlève le HIDDEN !

Tiens moi au courant !

bLiNkSeB - Anciennement sebastienbro
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
26 août 2004 à 14:11
salut !

bon ben voila les nouvelles ...
alors pour les variables tout passe :) mais toujours pas moyen d'interagir sur la base de données ... est ce que ca vient de $requeteMYSQL ???? je n'en sais rien....

merci de ton aide

attentio
0
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
26 août 2004 à 14:18
Ah mais bien sûr, je suis bête :)

Tu créé ta requête avec $requeteMYSQL, mais tu ne l'envoit jamais à mysql avec mysql_query() !

Il faut donc faire :


$connexion=mysql_connect('localhost', 'root','');
mysql_select_db('db', $connexion);

mysql_query($requeteMYSQL) or die
 ("Erreur MySQL : " . mysql_error()); //Envoie des infos à la base

mysql_close($connexion); // fermeture de la connection



Voilà, cette fois si je pense que c'est la bonne :)

bLiNkSeB - Anciennement sebastienbro
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
26 août 2004 à 14:41
T un chef seb !!!!! ;)

merci et encore merci pour tout

biz

attentio
0
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
26 août 2004 à 17:31
:) Voilà ça marche maintenant :)

J'espère que tout ceci t'a été bénéfique !

bLiNkSeB - Anciennement sebastienbro
0
Rejoignez-nous