Création de formulaire -champs automatique- [Résolu/Fermé]

Signaler
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
-
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
-
Bonjour,

Je souhaite mettre en place un formulaire assez courant (étant debutant en php je ne voit pas vraiment par quoi commencer)

pour simplifier :

Mon fomulaire contient une liste déroulante" LD1" avec plusieurs valeurs,
en fonction de la valeur de cette liste déroulante "LD1" , soit je n'affiche pas une autre liste LD2, soit j'affiche LD2 et si c'est le cas, la valeur de ce champs LD2 dépendra de la valeur de ma liste déroulante LD1 ...

En gros :


liste déroulante :

LD1 LD2

Glace
----->Vanille
----->Fraise
----->Pistache
------> //Aucune valeur, l'utilisateur peu entrer une valeur dans le menu déroulante



Frites
------> Mayo
-----> Ketchup
-----> barbec
------> //Aucune valeur, l'utilisateur peu entrer une valeur dans le menu déroulante


Malbouffe
----->Sandwich
----->Hamburger
----->Kebab
------> //Aucune valeur, l'utilisateur peu entrer une valeur dans le menu déroulante




Sachant que LD1 Auras toujours des valeurs (definit dans mon <select> <option ...>
) mais LD2 contient une valeur vide qui permet à l'utilisateur de saisir sa propre valeur !!

J'ai commencer a regarder sur les tutaux pour la création de dossier, le listage de dossiers (car en fait chaque nom 'frites' 'pistache' 'kebab'... correspondent a un repertoir) ma je n'ai pas trouvé de reponses..

J'espere avoir été compris si ce n'est pas le cas faite moi le savoir !

Merci.

17 réponses

Messages postés
1054
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
30 juin 2013
149
AFFICHER UNE LISTE DÉROULANTE EN FONCTION D'UNE AUTRE SANS RECHARGER LA PAGE.
http://www.comscripts.com/scripts/php.combobox-avec-ajax.1888.html
La création d'un site commence par la réflexion de son devenir...
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
891
salut,

si tu veux y comprendre quelque chose, mieux vaut peut être un tuto.
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
je regarde sa de près, ce n'est pas faisable en php ?

MErci
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
ps: le script est payant :(

sinon j'ai trouver un script ici http://www.editeurjavascript.com/scripts/scripts_formulaires_3_167.php
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
beaucoup plus compliqué maintenant... (enfin beaucoups plus compliqué pour moi)

J'ai reussi a faire apparaitre mes deux listes déroulantes une en fonction de l'autre .. tout va bien ,merci ;)

Maintenant ce que je souhaite réaliser c'est :
les valeurs de ma listes déroulantes ne douvent pas être entré en dur dans le code de cette manière :


script
//fruits
liste[1] = new Array("banane","pomme","poire");
liste[2] = .....;


body
<SELECT id=listeA onchange=changeliste() name=listeA>

<OPTION value=1> Fruits </OPTION>
<OPTION value=2> Légumes </OPTION>
<OPTION value=3> plats </OPTION>
<OPTION value=4> boissons </OPTION>
<OPTION value=5> vins </OPTION>
</SELECT>
<A id=listeB_div><SELECT id=listeB name=listeB>


mais plutôt par lecture de dossier,

script
//fruits
liste[1] = "une fonction qui va parcourir le dossier fruits et afficher les tout les répertoires enfants";
......
//vins
liste[5] = "une fonction qui va parcourir le dossier fruits et afficher les tout les répertoires";


Ma fonction delistage sera surement celle ci : https://phpsources.net/code/php/fichiers-repertoires/119_lister-un-repertoire-par-ordre-alphabetique-en-php ..

J'ai juste du mal a faire l'imbrication des fonction (l'appel de la fonction listé repertoires via la fonction change liste ).
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
j'arrive donc a faire le changement de valeur en fonction de ma liste déroulante ...voici en gros mon code

script
liste=new Array();

liste[1] = new Array("bananes","pomme");
liste[2] = new Array("tomate","carottes");
liste[3] = new Array("eau","vin");


//fonction pour le changement de valeur de la deuxième liste déroulante //
function changeliste()
{
	choix=document.getElementById("listeA").value;
	t='<select name="listeB" id="listeB">';
	for(i=0;i<liste[choix].length;i++)
	{
	t+="<option value=\""+liste[choix][i]+"\">"+liste[choix][i]+"</option>";
	}
	document.getElementById("listeB_div").innerHTML=t+'</select>';
}


body
<SELECT id=listeA onchange=changeliste() name=listeA>
	<OPTION value=1> fruits           </OPTION>
	<OPTION value=2> legumes      </OPTION> 
	<OPTION value=3> boissons      </OPTION>
</SELECT>

<A id=listeB_div><SELECT id=listeB name=listeB></SELECT></A>



Ce que je souhaite réalisé maintenant est un peu plus complexe, au lieu d'inscrire en dur les valeur de mes new array dans mon code, je veu que ces valeur soit en variables, elle correspondrons aux sous repertoires trouvées dans les répertoires fruits, legumes ou boissons ...

je pense utiliser ce code pour le listage de répértoires : https://phpsources.net/code/php/fichiers-repertoires/119_lister-un-repertoire-par-ordre-alphabetique-en-php

Comment imbriquer les deux fonctions ??
merci
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Oups,

Désolé pour le doublons ... Gros bug du forum ou de moi même ...
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
891
salut,

à priori du forum, j'en ai fait tout à l'heure à l'insu de mon plein clavier…

signale le post en double aux modos à l'aide du bouton avec un point d'exclamation dans un panneau jaune (en haut à gauche du post) !
-;o)
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
c'est fait ;)

Sinon sa ne te dit rien comment afficher la liste des répertoires dans une liste déroulante ?
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
891
re,

de tête et sans avoir testé je te propose quelque chose comme :
function print_list()
{
	$return = '';
	$dirs = glob('mon/repertoire/', GLOB_ONLYDIR);
	if(is_array($dirs) && !empty($dirs))
	{
		$return .= "<select>\n";
		foreach($dir as $dirs)
		{
			$return .= "<option>$dir</option>\n";
		}
		$return .= "</select>\n";
	}
	return $return;
}

et dans le HTML :
<?php echo print_list(); ?>
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Merci a toi je vais tester et j'esserais de modifier si sa ne va pas.., en ce moment j'essai de faire un truc mais je ne sais pas si je post une autre sujet ou si je peu te deemander sa direct ement ... :

C'est assez simple a mon avis pour ceux qui y connaissent plus que moi .. !
Cette fonction crée des repertoires :


<?php 

function IsDir_or_CreateIt($path) 
{
   if(is_dir($path)) 
    {echo "<script>alert('Dossier déjà existant : création du répertoire interrompue');</script>"; 
     return true;
    } 
else 
   { if(mkdir($path)) 
	{ return true;
        }
else  {return false;
        };
    };
}
?>



mais moi en faite j'essaie de créer un répertoire dans un répertoire definit par la variable $type que je récupere demon formulaire .. j'ai essayé :


<?php

function IsDir_or_CreateIt($path)
{
if(isset($_POST['type']))
$type=$_POST['type'];
else $type="";

if(is_dir($path))
{
echo "<script>alert('Dossier déjà existant : création du répertoire interrompue');</script>";
return true;
}
else
{
if(mkdir($type.$path)) // j'ai aussi essayé if(mkdir($type/$path))
{
return true;
}
else
{
return false;
};
};
}
?>

mais sa ne marche pas ... y'a t-il un moyen de créer un repertoire ailleur qu'a la racine ??
Merci pour cet aide :)
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Avec :

if(isset($_POST['type']))
$type=$_POST['type'];
else $type="";

......

" if(mkdir('../docs/'.$type.'/'.$path)) "



mon dossier est créé ici : ../docs/DOSSIER CREE

le $type n'est pas pris en compte .. :s, un petit coups de main?

-----------------------------------------------------
EDIT :

par contre


if(isset($_POST['type']))
$type=$_POST['type'];
else $type="pas_dossier";

avec un repertoire " pas_dossier" sous "docs" sa marche très bien, la création se fait bien sous "pas_dossier", je n'arrive pas a récuperer la valeur de mon $type apparament c'est un dialogue box :s
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
problemes reglé avec un switch car ma variable me retournais des chiffres et non la valeur de ma liste déroulante ...

j'ai juste un souci de variable
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Bonjour, comment lui dire que si le dossier existe, continuer l'acction, carj'ai une erreur de ce type :


Warning: mkdir() [function.mkdir]: File exists in C:\Program Files\EasyPHP 2.0b1\www\fonction.php on line 574
Une erreur est survenue lors de la creation du dossier
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
Comment declarer une variable en global dans ce cas precis :


Formulaire.php


include code.php

si appuie sur le boutons
$GAINS = Champs du formulaire' €'

fonction(convertir euros en patates)

--------------------------------------------------

code.php


fonction (convertire euros en patates)
multiplier le $GAIN par 000





je n'arrive pas a passer ma variable $GAIN de mon formulaire.php vers mon code.php
Si je fait un include formulaire.php dans mon code.php j'ai toute la page qui s'affiche !!

J'ai essayer de mettre global $gain, sa ne marche pas.. comment faire svp?
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
891
salut,

tu devrais ouvrir un nouveau fil pour les nouvelles questions.

soit tu déclares ta variable dans le script appelé en premier. comme par exemple dans 'index.php' avec des 'include()'
de 'header.php' et 'footer.php'. les variables instanciées avant les 'include()' seront accessibles dans les scripts inclus puis dans le reste de 'index.php'.

soit tu utilises une variable de session en pensant à démarrer ta session au tout début du script, un peu bourrin mais utile parfois…
session_start();
$_SESSION['toto'] = 'tata';
$var = $_SESSION['toto'];
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
salut,

dès ce problème resolu, je posterais de nouveau post !

pour la solution avec include(toto.php); j'ai testé le souci c'est que j'ai mon fichier toto.php qui est entierement afficher sur ma page !!

variable de session : erreur ..

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\EasyPHP 2.0 .....

sa viendrais de quoi ? merci
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
891
salut,

qu'est-ce qu'il y a dans 'toto.php' ?

pourquoi affiche-t-il quelque chose ?
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
toto.php c'est mon formulaire avec quelques png et mes champs ....
Le faite de faire un "include" l'affichai toute ma page !



voici le code sa va être plus simple :

formulaire.php :

<?php

include '../fon
ctions.php'; // necessaire pour faire appel aux fonctions contenus dans ce fichier

if( isset($_POST['envoi']) )// si formulaire envoyé
{
// transformer la valeur de la liste déroulante 1 en type de documents
if(isset($_POST['listeA']))
{ $type=$_POST['listeA'];
switch($type)
{ case 0:
$type="";
break;
case 1:
$type="G";
break;
case 2:
$type="R";
break;
case 3:
$type="M";
break;
case 4:
$type="N";
break;

}
}else $type="";
................
.............
............
.........
.....
.{ // si le champs "nouveau dossier" n'est pas vide, le dossier sera créé
if(IsDir_or_CreateIt($new_rep))
{ // si le champs "nouveau dossier" n'est pas vide --> le chemin sera " .../docs/type/nouveau_dossier/document.doc "
$content_dir= '../docs/'.$type.'/'.$new_rep.'/';
echo "<script>alert('DEBUGAGE creer dossier --> $content_dir');</script>"; //*******************// DEBUGAGE
}
</code>


fonction.php


<?php

// transformer la valeur de la liste déroulante 1 en type de documents 
		if(isset($_POST['listeA']))      
	{ 	$type=$_POST['listeA'];
		switch($type)
		{	case 0:
			$type="";
			break;
			case 1: 
			$type="G";
			break;
			case 2:  
			$type="R";
			break;
			case 3: 
			$type="M";
			break;
			case 4:  
			$type="N";
			break;
			
		}
	}else $type="";
................	
.............
............
.........

// ****//   FONCTION CREER UN DOSSIER ET TESTER SI IL EXISTE DEJA  //****//
function IsDir_or_CreateIt($path) 	
{
	if(is_dir($path)) 
	{	echo "<script>alert('Dossier déjà existant : création du répertoire interrompue');</script>"; 
		return true;
	} 
	else 
	{	if(mkdir('../docs/'.$type.'/'.$path)) 
		{	return true;}
		else 
		{echo "<script>alert('Erreur inconnu lors de la création du répertoire');</script>"; }
	};
}


et je voudrais eviter de faire deux switch case identique et en faite récuperer me $type de mon formulaire pour l'utiliser dans fonction.php .... :(
Merci
Messages postés
929
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
16 juin 2013
79
J'ai tout effacer pour me refaire une fonction toute propre sur mon formulaire... elle marche beaucoup mieux (vive l'algorithme )

Merci :)

A++