Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2012, 10h44   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Par défaut en tableau array

Bonjour.

On m'a suggéré de mettre en tableau mon code que j'ai résumé à ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php 
 
$vop_a = "item 1";  // sera affiché dans le formulaire et affiché si sélectionné             
$vop_b = "item 2"; //...
$vop_c = "item 3"; //...
 
// traitement
$op_z  = (isset($_POST['op_a'])) ? $_POST['op_a']."\r\n" : null;
$op_z .= (isset($_POST['op_b'])) ? $_POST['op_b']."\r\n" : null;
$op_z .= (isset($_POST['op_c'])) ? $_POST['op_c']."\r\n" : null;
 
echo $op_z.'<br>';
 
?>
 
<form action="tab.php" method="POST">
    <fieldset>
    <legend><strong>Nous contacter</strong></legend><p>
 
        <table border="0">
        <tr>
        <td colspan="4">
          <div class="opz">
            <input type="checkbox" name="op_a" id="op_a" value="<?php echo $vop_a; ?>" /> <label for="op_a"><?php echo $vop_a; ?></label><br><br>
            <input type="checkbox" name="op_b" id="op_b" value="<?php echo $vop_b; ?>" /> <label for="op_b"><?php echo $vop_b; ?></label><br>
            <input type="checkbox" name="op_c" id="op_c" value="<?php echo $vop_c; ?>" /> <label for="op_c"><?php echo $vop_c; ?></label><br>
          </div>
        </td>
        </tr>
        <tr>
        <td width="30%" align="center">
            <input style="width:66px" type="submit" name="envoye" value="Envoyer" />
            <input style="width:66px" type="reset" name="annuler" value="Annuler" />
        </td>
        </tr>
        </table>
 
    </fieldset>
</form>
Les options (items) doivent être affiché dans un courriel, mais pour les fins de test, en affichage écran.

items doit être cumulatif, c'est pour cela les ".=".

J'ai une base simple des tableaux.
Images attachées
Type de fichier : jpg asdf.jpg (8,0 Ko, 3 affichages)
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h00   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par dancom5 Voir le message
On m'a suggéré de mettre en tableau mon code que j'ai résumé à ceci :
Tu as mal résumé
Tu aurais du mettre en tableau ainsi :
Code :
1
2
3
4
5
6
7
<td colspan="4">
   <div class="opz">
      <input type="checkbox" name="opz[]" id="op_a" value="<?php echo $vop_a; ?>" /> <label for="op_a"><?php echo $vop_a; ?></label><br><br>
      <input type="checkbox" name="opz[]" id="op_b" value="<?php echo $vop_b; ?>" /> <label for="op_b"><?php echo $vop_b; ?></label><br>
      <input type="checkbox" name="opz[]" id="op_c" value="<?php echo $vop_c; ?>" /> <label for="op_c"><?php echo $vop_c; ?></label><br>
   </div>
</td>
Et du coup ton traitement se résume à :
Code :
1
2
// traitement
$opz = implode("\r\n", $_POST['opz']);
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h28   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Merci.

Je croyais que je devais aussi transformer en array mes variables et les input.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
$vop_a = "item 1";
$vop_b = "item 2";
$vop_c = "item 3";
 
$opz = implode("\r\n", $_POST['opz']);
 
print_r($opz);
?>
 
<form action="tab.php" method="POST">
	<input type="checkbox" name="opz[]" id="op_a" value="<?php echo $vop_a; ?>" /> <label for="op_a"><?php echo $vop_a; ?></label><br><br>
	<input type="checkbox" name="opz[]" id="op_b" value="<?php echo $vop_b; ?>" /> <label for="op_b"><?php echo $vop_b; ?></label><br>
	<input type="checkbox" name="opz[]" id="op_c" value="<?php echo $vop_c; ?>" /> <label for="op_c"><?php echo $vop_c; ?></label><br>
 
	<input style="width:66px" type="submit" name="envoye" value="Envoyer" />
	<input style="width:66px" type="reset" name="annuler" value="Annuler" />
</form>
Je me demande s'il y aurait pas moyen de faire en sorte qu'il ait le nombre de INPUT en fonction du nombre de variable et ce automatiquement.

Exemple : $var1, $var2 va générer input1 et input2
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h42   #4
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Je pense avoir compris quelque chose.

Si j'ai défini mes variables au début, c'est que je ne voulais pas les définir directement dans value="" du formulaire. Autrement, j'aurais moins de code.

C'est apprécié, merci pour l'aide
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h46   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par dancom5 Voir le message
Je me demande s'il y aurait pas moyen de faire en sorte qu'il ait le nombre de INPUT en fonction du nombre de variable et ce automatiquement.

Exemple : $var1, $var2 va générer input1 et input2
Bah si un tableau et foreach() : un court exemple
Code :
1
2
3
4
5
$data = array('Item 1', 'Item 2');
$inputs = array();
foreach($data as $item) {
   $inputs[] = '<input type="checkbox" name="opz[]" value="'.$item.'" />';
}
T'arrêtes pas à la présentation, ce n'est qu'une piste.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h06   #6
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Je l'ai pas correct. Ça m'affiche pas le contenu à cocher.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
$data = array('Item 1', 'Item 2');
 
if(isset($_POST['opz'])){
$opz = implode("<br>", $_POST['opz']);
 
echo $opz;
}
?>
 
<form action="tab.php" method="POST">
<?php
$inputs = array();
 
foreach($data as $item) {
   $inputs[] = '<input type="checkbox" name="opz[]" value="'.$item.'" />';
}
?>
 
	<input style="width:66px" type="submit" name="envoye" value="Envoyer" />
	<input style="width:66px" type="reset" name="annuler" value="Annuler" />
</form>
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h13   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Euh, il faut quand même faire echo() à un moment.
Code :
echo implode("\n", $inputs)
ou tu présentes différemment ton code :
Code :
1
2
3
4
5
6
7
<form action="tab.php" method="POST">
   <?php foreach($data as $item): ?>
   <input type="checkbox" name="opz[]" value="<?php echo $item; ?>" />
   <?php endforeach; ?>
   <input style="width:66px" type="submit" name="envoye" value="Envoyer" />
   <input style="width:66px" type="reset" name="annuler" value="Annuler" />
</form>
Faut quand même phosphorer un peu
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h13   #8
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Tien, j'ai réussi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php
 
$data = array('Item 1', 'Item 2');
 
if(isset($_POST['opz'])){
$opz = implode("<br>", $_POST['opz']);
 
echo $opz;
}
?>
 
<form action="tab.php" method="POST">
<?php
$inputs = array();
 
foreach($data as $item) {
   $inputs[] = $item.' <input type="checkbox" name="opz[]" value="'.$item.'" />';
}
echo implode("<br>", $inputs);
 
?>
	<input type="submit" name="envoye" value="Envoyer" />
	<input type="reset" name="annuler" value="Annuler" />
</form>
merci.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h28   #9
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Oui, celui-la fait bien ce que je veux.
Je vais l'adapter à mon code dans ma page.

Avec ce bout de code, c'est faisable aussi :
Code :
1
2
3
4
5
6
7
8
9
10
$couleur = array("yellow","green","blue","red","gray","pink","black");
	$color = $couleur[rand(0,5)];
	if($color == "yellow") $code = "jaune";
	if($color == "green")  $code = "vert";
	if($color == "blue")   $code = "bleu";
	if($color == "red")    $code = "rouge";
	if($color == "gray")   $code = "gris";
	if($color == "pink")   $code = "rose";
	if($color == "black")  $code = "noir";
  $captcha = '<div style="width:20px;"><div style="float:right;width:20px;height:20px;background-color:'.$color.'"></div></div>';
Code :
												<input class="form" style="width:75px" type="text" id="color" name="color" value="" size="10" />
C'est mon captcha. Quand blue apparait, je vais écire bleu. Et ça va passer.
C'est minimal mais c'est un plus.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h35   #10
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Ton code avec les couleurs n'est pas terrible.
Tu peux faire comme ça :
Code :
1
2
3
4
5
6
7
<?php
$colors   = array('yellow', 'green', 'blue', 'red', 'gray', 'pink', 'black');
$couleurs = array('jaune', 'vert', 'bleu', 'rouge', 'gris', 'rose', 'noir');
$i = mt_rand(0, count($colors)) - 1;
$color = $colors[$i];
$code  = $couleurs[$i];
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h47   #11
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
C'est cool.
Le raisonnement, c'est quoi?

Comment il fait le array pour connaitre le correspondant?
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h54   #12
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Mon captcha complet :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php 
session_start();
 
$colors   = array('yellow', 'green', 'blue', 'red', 'gray', 'pink', 'black');
$couleurs = array('jaune', 'vert', 'bleu', 'rouge', 'gris', 'rose', 'noir');
$i = mt_rand(0, count($colors)) - 1;
$color = $colors[$i];
$code  = $couleurs[$i];
 
  $captcha = '<div style="width:20px;"><div style="float:right;width:20px;height:20px;background-color:'.$color.'"></div></div>';
 
if (isset($_POST['color'], $_SESSION['color'])) {
    if ($_POST['color'] == $_SESSION['color']) {
        echo 'OK';
    }
    else {
        echo 'Error<br><br>';
        echo 'post: '.$_POST['color'].'<br>';
        echo 'sess: '.$_SESSION['color'];
    }
}
 
unset($_SESSION['color']);
$_SESSION['color'] = $code;          
?>
 
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
            <input style="width:66px" type="submit" name="envoye" value="Envoyer" />
            <input style="width:66px" type="reset" name="annuler" value="Annuler" />
 
                Quelle est cette couleur?
                <?php	 echo $captcha; ?>								
            <input class="form" style="width:75px" type="text" id="color" name="color" value="" size="10" />
</form>
Si je fais juste cliquer, j'obtiens cette erreur :
Code :
Notice: Undefined offset: -1 in D:\wamp\www\cchat\captcha.php on line 7 Notice: Undefined offset: -1 in D:\wamp\www\cchat\captcha.php on line 8 Error
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h56   #13
Membre actif
 
Inscription : janvier 2006
Messages : 204
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 204
Points : 151
Points : 151
Envoyer un message via AIM à zecreator Envoyer un message via MSN à zecreator Envoyer un message via Yahoo à zecreator
Ton code mélange 2 types de scripts. perso, j'aime bien séparer le code client du code serveur.

J'ai jamais compris comment on arrivait à maintenir une appli en développant comme ça.

C'est mon avis. Chacun ces méthodes
__________________
Je ne suis pas qu'un développeur, je suis aussi un être humain...
zecreator est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/01/2012, 13h07   #14
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Les commandes HTML séparées du PHP

genre :

Code :
echo '<input ... value="'.$test.'">';
et

Code :
<input ... value="<?php echo $test; ?>">
que vous voulez dire?

Il semble que c'est préférable.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 13h11   #15
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Oui j'ai fait une petite erreur (j'ai mal placé le -1):
Code :
$i = mt_rand(0, count($colors) - 1);
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 13h13   #16
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Citation:
Envoyé par rawsrc Voir le message
Oui j'ai fait une petite erreur (j'ai mal placé le -1):
Code :
$i = mt_rand(0, count($colors) - 1);
Il fait quoi le -1?

ok.. ça fonctionne.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 13h17   #17
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Les tableaux sont indexés par défaut de [0] à [nombre elements - 1]
Le -1 te permet de ne pas dépasser la limite supérieure de l'index.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 21h46   #18
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
si j'ai array("1","2","3","4","5");

Le -1 fera que ça serait 12345
ou bie 01234?

Citation:
Envoyé par rawsrc Voir le message
Les tableaux sont indexés par défaut de [0] à [nombre elements - 1]
Le -1 te permet de ne pas dépasser la limite supérieure de l'index.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 21h55   #19
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Ce code
Code :
1
2
3
$a = array('1', '2', '3', '4', '5');
// est équivalent à : 
$a = array(0 => '1', 1 => '2', 2 => '3', 3 => '4', 4 => '5');
Le tableau contient 5 éléments "numérotés" de 0 à 4 : 0 1 2 3 4
Le -1 ne concerne pas les valeurs mais les clés
si tu fait un mt_rand(0, count($a)) count($a) = 5 or les clés du tableau vont de 0 à 4 d'où le -1.
Tu suis ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 21h59   #20
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Citation:
Envoyé par rawsrc Voir le message
Ce code
Code :
1
2
3
$a = array('1', '2', '3', '4', '5');
// est équivalent à : 
$a = array(0 => '1', 1 => '2', 2 => '3', 3 => '4', 4 => '5');
Le tableau contient 5 éléments "numérotés" de 0 à 4 : 0 1 2 3 4
C'est bon ?
Alors le moins -1, va reporter la valeur correspondante à la clé.

1 à 1

je pense comprendre le principe.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h49.


 
 
 
 
Partenaires

Hébergement Web