Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 08/01/2012, 22h42   #1
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
Par défaut demande de renseignement sur le isset

Bonsoir,

voila j'ai un formulaire avec des checkbox que je voudrais mettre en bdd mais quand je met ceci

Code php :
1
2
3
4
5
6
7
8
9
 
 
if(empty($_POST['autoriser'])&&isset($_POST['non_autoriser']) &&isset($_POST['mp'])&&isset($_POST['non_mp']))
 { 
                   $membre_id = $_SESSION['id'];
		   $autoriser = implode(',', $_POST['autoriser']); 
		   $non_autoriser = implode(',', $_POST['non_autoriser']);
		   $mp  = implode(',', $_POST['mp']);
		   $non_mp  = implode(',', $_POST['non_mp']);


la requête insert ne se fais pas et le isset me dit que j'ai quand mêmes des indéfini index,je pensais qu'il enlèverait les notices lié au case vide


merci pour l'aide
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 23h21   #2
Nouveau Membre du Club
 
Homme Franck Theeten
Inscription : mars 2005
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Theeten
Localisation : Belgique

Informations forums :
Inscription : mars 2005
Messages : 33
Points : 27
Points : 27
Bonjour,

J'ai été confronté à des problèmes comparables sur Ubuntu 10.04, Apache2.2 et PHP 5.3.
Pour des champs de type "input='text'les champs "null" n'existent pas, ce sont des chaînes de caractères de longueur 0 et donc je teste la longueur.

Code :
1
2
3
4
5
6
 
if(strlen($_POST['mon_champ'])>0)
 
ou 
 
if(strlen($_POST['mon_champ'])===0)
(apparemment votre clé est bien un champs texte)

Pour les checkbox le problème est légèrement différent chez moi; il considère que le champs n'existe pas dans le tableau $_POST retourné au serveur uniquement si la case est cochée. Si elle n'est pas cochée le champs n'est aps dans le tableau $_POST. Je teste via array_key_exists:

Code :
1
2
3
 
if(array_key_exists('mon_champ'), $_POST)
...
Le mieux est sans doute de créer sa propre fonction "custom_http_isset($key, $array)" retournant un booléen pour parer au risque de changement de comportement sur une autre plateforme.


Attention le traitement des formulaires est complètement différent si vous utilisez des CMS comme Drupal.
CetTer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 13h34   #3
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Bonjour,
Il te faut contrôler tes sessions

Code :
1
2
3
4
5
6
<?php
session_start();
$id = (isset($_SESSION['id'])) ? $_SESSION['id'] : '';
if ($id=="") $_SESSION['id']="";
 
?>
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 18h02   #4
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
merci pour toute ses réponses,j'aurais voulu savoir s'il était possible de de delete un seul champ par exemple il y a la colonne mp avec la variable mp,est ce que c'est possible de delete pour le laisser vide sans pour autant effacer toute la colonne,par contre je ne vois pas comment utiliser array_key_exits sur mes $_post(pas faute d'avoir cherché)

j'ai bien essayer ceci

Code php :
1
2
3
4
5
6
7
 
 
 
          $query=$db->prepare('DELETE FROM forum_membres WHERE mp = :mp');
             $query->bindValue(':mp',$_POST['mp'],PDO::PARAM_STR);
             $query->execute();
             $query->CloseCursor();

mais sois sa efface bien la variable inséré ou bien sa m'efface toute ma ligne
merci
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 20h16   #5
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Ta question me dis qu'il te faut relire nos TOPOS (cherches en haut de cette page tutoriels
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h13   #6
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
en faite se que je voudrais c'est que si par exemple le membre a cocher le checkbox 'oui' pouvoir le delete et update par le nouveau checkbox cocher si il a cocher le checkbox non,

un peu comme sur les forum ou on peut cocher oui ou non si on veut suivre le fil du post
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h15   #7
Membre Expert
 
Inscription : septembre 2010
Messages : 1 245
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 245
Points : 1 569
Points : 1 569
Tu peux tester ce petit script dans une page séparée pour mieux comprendre

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
echo '<pre>';
print_r($_POST);
echo '</pre>';
?>
<form action = "#" method="post">
<input type = "checkbox" name="check1" value="chekbox1" />chekbox 1
<input type = "checkbox" name="check2" value="chekbox2" />chekbox 2
<input type = "radio" name="rad" value="radio1" />radio 1
<input type = "radio" name="rad" value="radio2" />radio 2
<input type = "text" name="text" value="" />
<input type = "submit" name="envoi" value = "envoyer" />
 
</form>
Les types checkbox et radio ne sont renvoyés que s'ils sont cochés. Les types text sont toujours renvoyés ainsi que le bouton du formulaire de type submit.

Pour info, à la place de faire
Code :
if (isset($toto) && isset($titi) && isset($tata))
pour le même résultat tu peux écrire
Code :
if (isset($toto,$titi,$tata))
mais ce n'est pas possible avec empty()
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 22h23   #8
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
je n'y comprend plus rien,si je met le if isset il insère rien, et si je l’enlève il me met cette erreur


Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'non_autoriser' cannot be null in C:\wamp\www\traitement\preferences_1.php on line 44


je ne vois pas comment faire
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h12   #9
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Attention à ne pas confondre isset et empty. Isset vérifie que la variable existe, et empty vérifie qu'il ya quelque chose dedans.
Par exemple pour les variables suivantes :
Code :
1
2
$tata = "coucou";
$titi = "";
on aura les résultats suivants :
// $toto n'a pas été initialisé et est donc vide
isset($toto) => false
empty($toto) => true

// $tata est initialisé et contient une valeur
isset($tata) => true
empty($tata) => false

// $titi est initialisé avec une chaine vide
isset($titi) => true
empty($titi) => true
Donc pour être sûr d'avoir une valeur à insérer, il faut combiner isset et empty
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h53   #10
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
merci pour les réponses mais si je met soit isset soit empty,le reste du code ne se fais pas car il y a des variables vides,je vois pas comment je peux faire car il y aura toujours des variables vides du au 'case a cocher'.

car j'ai un formulaire avec quatre radio,deux oui et deux non,un oui et un non pour les mp et un oui et un non pour les messages posté,donc il y aura toujours des variables vide ou bien j'ai mal fais le traitement
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h58   #11
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
A priori, il ya un truc qui cloche : soit le champ du formulaire n'est pas obligatoire et dans ce cas, le champ correspondant en base peut être null (et donc c'est ta base qui est mal fichue), soit le champ est obligatoire et c'est ton formulaire qui devrait renvoyer une erreur du type "Vous devez renseigner le champ machin".

On peut voir ton formulaire ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 12h32   #12
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
pas de soucis

Code html :
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
 
 
<fieldset>
       <form method="post" action="../traitement/preferences_1.php">
 
         <p>Toujours m'avertir des réponses :</p> 
 
 
            <label for="autoriser">oui</label><input type="radio" name="autoriser" value="autoriser" id="autoriser"/>
             <label for="non_autoriser">non</label><input type="radio" name="non_autoriser" value="non_autoriser" id="non_autoriser"/> 
 
<br/>
 
        <p> M'avertir des nouveaux Messages Privés :</p> 
 
			 <label for="mp">oui</label><input type="radio" name="mp" value="non_mp" id="mp"/>
			 <label for="non_mp">non</label><input type="radio" name="non_mp" value="non_mp" id="non_mp"/>
 
 
   </fieldset>
 
	 <br/>
		  <br/>
			 <i><input type="submit" name"envoyer" value="enregistré"/></i> 
		</form>
 
	 </body>
</html>
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 12h44   #13
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Ah oui tout est la !!
Dans les <FORM avec check-box ou radio bouton le name est identique (unique) et les values différent
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 13h18   #14
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
donc je dois mettre autre chose dans le value,par contre je vais paraitre bête mais $_POST récupère quoi,j'ai toujours cru que c’était le id
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 13h33   #15
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Non le Name,
Tu as
Code :
1
2
3
4
5
6
7
 
 
<label for="autorise">oui</label><input type="radio" name="autorise" value="autoriser" id="autorise"/>
             <label for="autorise">non</label><input type="radio" name="autorise" value="non_autoriser" id="autorise"/> 
//============ ainsi tu reçois============
$autorise = (isset($_POST['autorise'])) ? $_POST['autorise'] : '';
//==== qui contient le value coche !===========
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 13h53   #16
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
merci,merci,sa marche,pppfff compliqué les radio et checkox,par contre comment je peux laisser le radio cochée et le décoché quand on coche une autre radio
arckaniann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 14h06   #17
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Le principe des groupes de radios c'est que tous les radios d'un groupe portent le même nom et qu'un seul peut être sélectionné à la fois. Donc dès que tu en coches un, ça décoche automatiquement le précédent.
Tu as donc "juste" à cocher le bon par défaut. Pour cela, tu récupères la valeur et tu testes si c'est la valeur du radio en cours :
Code :
1
2
<label for="autorise">oui</label><input type="radio" name="autorise" value="autoriser" id="autorise" <?php if ($valeur == "autoriser") echo 'checked="checked"';?> />
<label for="autorise">non</label><input type="radio" name="autorise" value="non_autoriser" id="autorise"  <?php if ($valeur == "non_autoriser") echo 'checked="checked"';?> />
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 23h39   #18
Membre Expert
 
Inscription : septembre 2010
Messages : 1 245
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 245
Points : 1 569
Points : 1 569
Citation:
Envoyé par arckaniann Voir le message
donc je dois mettre autre chose dans le value,par contre je vais paraitre bête mais $_POST récupère quoi,j'ai toujours cru que c’était le id
Dis... je t'avais fais un bout de code sur mesure ici pour que tu comprenne. Un petit copié collé pour tester aurait été plus rapide et éloquent que de reposer la question et attendre une réponse
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 23h52   #19
Membre Expert
 
Inscription : septembre 2010
Messages : 1 245
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 245
Points : 1 569
Points : 1 569
Citation:
Envoyé par Celira Voir le message
Attention à ne pas confondre isset et empty. Isset vérifie que la variable existe, et empty vérifie qu'il ya quelque chose dedans.
...
Comme je sais (par expérience) que certains débutants trop pressés n'iront pas lire tes liens, je me permet de compléter :
- Isset vérifie que la variable existe et est différente de null.

Code :
1
2
$a = null,
isset($a) => false
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 23h56   #20
Futur Membre du Club
 
Inscription : janvier 2011
Messages : 155
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 155
Points : 16
Points : 16
merci pour toute c'est réponse,j'avais regardé le test que tu m'avais donnée mais j'avais pas remarqué,désolé mais sa fonctionne donc merci
arckaniann 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 09h01.


 
 
 
 
Partenaires

Hébergement Web