IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Positionnement null or not null


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut Positionnement null or not null
    Bonjours a vous les amis

    j'ai une BDD avec section utilisateur qui contient : nom, prénom, age, cinema(checkBox), adresse

    j'ai créé un code qui exporte les donnés des utilisateurs en .cvs ce qui fonctionne très bien.

    voici un aperçus, on voit la BDD , mon bouton exporter CVS et le fichier final en .csv regarder bien Cinéma et Adresse ils sont bien positionné (vous allez comprendre pourquoi je parle de ca )





    Dans mon App Web j'ai une section créer un utilisateur sur l'image suivante a votre gauche le checkbox Cinéma n'est pas cocher donc ca valeur est égal a 0 mais dans le fichier .CSV on constate que Cinéma se retrouve après adresse ? mais pourquoi donc ? vous pouvez voir que sur l'image à droite le checkbox Cinéma est cocher donc ca valeur est égal a 1 et dans le fichier .CSV il est exactement au bon endroit il se situe entre âge et adresse.
    [/url]

    Donc comment se fait-il que cinéma se retrouve a la fin si mon checkbox est NULL ?



    Voici un peu de code

    ForumulaireUser.php est le form pour créer un utilisateur quand je clique sur copie Local le value est égal à "copie" et rediriger vers createUpdateDeleteUser.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
     
    <?php
    include 'mesFunctionsSQL.php';
    include 'afficherUser.php';
     
    //Verification de l'id dans le URL si vide ou remplis
    $id = isset($_GET['id']) ? $_GET['id'] : '';
     
    //si le ID recupérer est egal à 0 l'action sera de créer un User Sinon mise a jours
    if ($id==0) {
    	$user = getNewUser();
    	$action = "CREATE";
    	$libelle = "Creer";
    } else {
    	$user = readUser($id);
    	$action = "UPDATE";
    	$libelle = "Mettre a jour";
    }
     
     
    //Affiche tout les erreurs dans le form
    if (isset($_GET['erreurs']) ){
    $erreurs=json_decode($_GET['erreurs']);
    }
    ?>
     
    <html>
    <header>
    	<link rel="stylesheet" href="../styles/formulaireUser.css">
    </header>
     
    <body>
    	<form action="createUpdateDeleteUser.php" method="post">
    			<a href="mainPageUser.php">Liste des utilisateurs</a>
     
    			<input type="hidden" name="id" value="<?php if(isset($user['id'])) {echo $user['id']; } ?>" />
    			<input type="hidden" name="action" value="<?php echo $action;  ?>" />
    		<div>
    			<label for="name">Nom :</label>
    			<input type="text" id="nom" name="nom" value="<?php if(isset($user['nom'])) { echo $user['nom'];} ?>">
    			<span class="error"> <?php if(isset($erreurs->nomErr)){ echo $erreurs->nomErr; }  ?></span>
     
    		</div>
    		<div>
    			<label for="prenom">Prenom</label>
    			<input type="text" id="prenom" name="prenom" value="<?php if(isset($user['prenom'])) { echo $user['prenom'];  }?>" >
    			<span class="error"> <?php if(isset($erreurs->prenomErr)){ echo $erreurs->prenomErr; }  ?></span>
     
    		</div>
    		<div>
    			<label for="age">Age:</label>
    			<input type="text" id="age" name="age" value="<?php if(isset($user['age'])) { echo $user['age']; } ?>">
    			<span class="error"> <?php if(isset($erreurs->ageErr)){ echo $erreurs->ageErr; }  ?></span>
    		</div>
    		<div>
    			<label for="cinema">cinema :</label>
    			<input type="checkbox" id="cinema" name="cinema" <?php if ($user['cinema'] == 1) $user['cinema'] = "checked"; echo $user['cinema'] ?>>
    		</div>
    		<div>
    			<label for="adresse">adresse :</label>
    			<input id="adresse" name="adresse" value="<?php if(isset($user['adresse'])) { echo $user['adresse']; } ?>" ></input>
    			<span class="error"> <?php if(isset($erreurs->adresseErr)){ echo $erreurs->adresseErr; }  ?></span>
    		</div>
     
    		<div class="button">
    			<button type="submit" name="envoi"><?php echo $libelle;  ?></button>
    			<button type="submit" name="action" value="copie" formaction="createUpdateDeleteUser.php">Copie Local</button>
    		</div>		
    	</form>
     
    	<br>
     
    	<!-- si l'id recupérer n'est pas egal a 0 l'option Supprimer sera afficher -->
    	<?php if ($action != "CREATE") { ?>
    		<form action="createUpdateDeleteUser.php" method="post">
    			<input type="hidden" name="action" value="DELETE" />
    			<input type="hidden" name="id" value="<?php echo $user['id'];  ?>" />
    			<p>
    			<div class="button">
    				<button type="submit">Supprimer</button>
    			</div>
    			</p>
    		</form>
    	<?php } ?>
     
    </body>
     
    </html>


    CreateUpdateDeleteUser.php Récupère la valeur de action dans notre cas c'est "copie" et dans la condition si égal à copie je récupère un tableau et j'appelle la class CSV qui contient la static function export
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    <?php
    include 'mesFunctionsSQL.php';
    include 'afficherUser.php';
    //recupération des données du form
    // quel type d'action sera choisi
    $action = $_POST["action"];
     
     
    if ($action == "DELETE") {
    	$id = $_POST["id"];
    } else {
    	$id = $_POST["id"];
    	$nom = $_POST["nom"];
    	$prenom = $_POST["prenom"];
    	$age = $_POST["age"];
    	$adresse = $_POST["adresse"];
    	if (isset($_POST["cinema"]) == NULL) {
    		$_POST["cinema"] = 0;
    	} else {
    		$_POST["cinema"] = 1;
    	}
     
    }
     
     
     
     
     
    //  Creation du ficher excel pour sauvegarde local.
    if ($action == "copie") {
    	$datas = array($_POST);
    	//Supprime lelement action dans le tab.
    	unset($datas[0]["action"]);
    	require '../class/class.csv.php'; 
    	CSV::export($datas,'utilisateurs');
    	exit;
    }
     
     
    if ($action == "CREATE") {
    	validate_fields();
     
    	createUser($nom, $prenom, $age, $adresse,$_POST["cinema"]);
    	header("location:mainPageUser.php?message=User Created Successfully...!");
    	exit;
    }
     
    if ($action == "UPDATE") {
    	validate_fields();
     
    	updateUser($id, $nom, $prenom, $age, $adresse,$_POST["cinema"]);
    	header("location:mainPageUser.php?message=User Updated Successfully...!");
    	exit;
    }
    if ($action == "DELETE") {
    	deleteUser($id);
    	header("location:mainPageUser.php?message=User Deleted Successfully...!");
    }
     
     
    //Validation des champs du formulaire de la page formulaireUser.php
    function validate_fields()
    {
    	$erreurs = array();
    	$flag = false;
    	if (isset($_POST['id'])) {
    		$id = $_POST['id'];
    	} else {
    		$id = 0;
    	}
    	// validation du champ nom si il est vide
    	if (empty($_POST["nom"])) {
    		$flag = true;
    		$erreurs['nomErr'] = "Please enter a valid nom";
    	}
    	// validation du champ nom si conforme au preg_match
    	if (!empty($_POST["nom"]) && !preg_match('/^[a-zA-Z-\s]+$/', $_POST['nom'])) {
    		$flag = true;
    		$erreurs['nomErr'] = "Only letters and white space allowed";
    	}
    	// validation du champ prenom si il est vide
    	if (empty($_POST["prenom"])) {
    		$flag = true;
    		$erreurs['prenomErr'] = "Please enter a valid nom";
    	}
    	// validation du champ prenom si conforme au preg_match
    	if (!empty($_POST["prenom"]) && !preg_match('/^[a-zA-Z-\s]+$/', $_POST['prenom'])) {
    		$flag = true;
    		$erreurs['prenomErr'] = "Only letters and white space allowed";
    	}
     
    	// validation du champ age si il est vide
    	if (empty($_POST["age"])) {
    		$flag = true;
    		$erreurs['ageErr'] = "Please enter a valid age";
    	}
    	// validation du champ age si conforme au preg_match
    	if (!empty($_POST["age"]) && !preg_match('/^[1-9][0-9]*$/', $_POST['age'])) {
    		$flag = true;
    		$erreurs['ageErr'] = "Only number allowed";
    	}
     
    	// validation du champ age si il est vide
    	if (empty($_POST["adresse"])) {
    		$flag = true;
    		$erreurs['adresseErr'] = "Please enter a valid adresse";
    	}
    	// validation du champ adresse si conforme au preg_match
    	if (!empty($_POST["adresse"]) && !preg_match('/^[a-z0-9 .\-]+$/i', $_POST['adresse'])) {
    		$flag = true;
    		$erreurs['adresseErr'] = "Only number allowed";
    	}
    	//si un des champ est egale a true retour une erreur dans le champ.
    	if ($flag == true) {
     
    		header("location:formulaireUser.php?&id=$id&erreurs=" . json_encode($erreurs));
    		exit;
    	}
    }

    class.csv.php ici je fais le nettoyage pour que le contenue sort tres bien visuellement dans un fichier .CSV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
    class CSV{
     
         static function export($datas,$filename){
            header('Content-Type: text/csv;');
            header('Content-Disposition: attachement; filename="'.$filename.'.csv"');
     
             $i = 0;
             foreach($datas as $v){
                 if($i == 0) {
                     echo '"'.implode('";"',array_keys($v)).'"'."\n";
                 }
                 echo '"'.implode('";"',$v).'"'."\n";
                 $i++;
             }
         }
    }
    ?>

    Donc si vous pouvez m'expliquer le pourquoi a mon probleme j'aimerais bien comprendre....

    mon git avec les fichiers au besoin : https://github.com/MI7QC/CRUD

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Le problème vient d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if ($action == "DELETE") {
    	$id = $_POST["id"];
    } else {
    	$id = $_POST["id"];
    	$nom = $_POST["nom"];
    	$prenom = $_POST["prenom"];
    	$age = $_POST["age"];
    	$adresse = $_POST["adresse"];
    	if (isset($_POST["cinema"]) == NULL) { // PS : Pourquoi NULL ? isset() ne retourne JAMAIS NULL
    		$_POST["cinema"] = 0;
    	} else {
    		$_POST["cinema"] = 1;
    	}
    }
    Quand $_POST['cinema'] n'existe pas tu l'ajoutes à $_POST => Quand on ajoute un élément à un tableau associatif l'élément est ajouté à la fin du tableau

    Je te conseille de modifier l'appel à CSV::export() en spécifiant le tableau que tu souhaites écrire dans ton CSV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CSV::export([
        ...
        'age' => $_POST['age'],
        'cinema' => $_POST['cinema'],
        ...
     
    ], 'utilisateurs');
    Ainsi le même ordre sera toujours respecté, quelque soit l'état de $_POST ou l'ordre des éléments de ton <FORM>.


    Sinon attention à ton CSV. Tu crées un CSV potentiellement mal formé (que se passe-t-il si l'utilisateur saisit un " ou un ; ?). Utilise plutôt fputcsv().

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    hahaha j'avais pas pensé a ca mais du tout. donc le probleme vient de ma condition.

    Pour répondre au sujet du isset() -> j'avais utilisé isset parce que si le checkbox était vide il me retournait une erreur Undefined index: cinema et j'ai cru bon de dire si == NULL parce que null c'Est un champ vide ?

    peut être que empty() serait plus approprier ?

    je suis encore un apprentie du PHP il y a tant de chose a decouvrire.


    merci de ta réponse demain a mon réveil je vais faire la correction et regarder fputcsv()

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Pour répondre au sujet du isset() -> j'avais utilisé isset parce que si le checkbox était vide il me retournait une erreur Undefined index: cinema et j'ai cru bon de dire si == NULL parce que null c'Est un champ vide ?
    Tu ne testes pas le contenu de la variable, mais le retour de isset().

    Si tu regardes la signature de isset() dans la doc https://php.net/isset tu verras :

    isset(mixed $var, mixed ...$vars): bool
    Le "): bool" signifie que la fonction retourne une valeur de type booléen, ce que confirme le détail un peu plus bas :

    Valeurs de retour
    Retourne true si var existe et a une valeur autre que null. false sinon.
    Tester "== NULL" en retour de isset() n'est donc pas pertinent

    peut être que empty() serait plus approprier ?
    empty() est un faux-ami, je te conseille de ne JAMAIS l'utiliser.

    Ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST["cinema"]) == NULL) {
        $_POST["cinema"] = 0;
    } else {
        $_POST["cinema"] = 1;
    }
    Peut être réécrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['cinema'] = isset($_POST['cinema']) ? 1 : 0;

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    sa bien avancé aujourd'hui j'ai fait des test et le fichier fonctionne tel que désirer j'ai du apporté des modifications sur ma class CSV.

    Tout fois sa demande plus d'écriture et j'ai un autre form qui lui contient environs 50 checkbox haha

    donc pour le moment écrire ceci pour la section utilisateur c'est pas trop long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //  Creation du ficher excel pour sauvegarde local.
    if ($action == "copie") {
    	require '../class/class.csv.php'; 
    	CSV::export([
    		'nom' => $_POST['nom'],
    		'prenom' => $_POST['prenom'],
    		'age' => $_POST['age'],
        	        'cinema' => $_POST['cinema'],
    		'adresse' => $_POST['adresse'],
    	],'utilisateurs');
    	exit;
    }
    mais en plus je dois aussi faire le traitement manuellement du coté de ma class CSV

    class.csv.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    class CSV{
     
         static function export($datas,$filename){
             header('Content-Type: text/csv;');
             header('Content-Disposition: attachement; filename="'.$filename.'.csv"');
     
     
            echo '"'."nom".'";"'."prenom".'";"'."age".'";"'."cinema".'";"'."adresse".'"';
            echo "\n".'"'.$datas["nom"].'";"'.$datas["prenom"].'";"'.$datas["age"].'";"'.$datas["cinema"].'";"'.$datas["adresse"].'"';
     
         }
    }
    ?>
    c'est peut-etre pas optimal mais l'important c'est que cela fonctionne, si jamais tu as une idée pour sauver du temps je suis preneur. merci

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 655
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 655
    Par défaut
    vous pouvez définir une liste de champs comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $champs = ["nom", "prenom", "age", "cinema", "adresse"];
    et ensuite à partir de cette liste vous pouvez construire ce dont vous avez besoin avec des boucles "foreach".

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    J'ai fini par tout régler mes problèmes pour sa soit moins pénible

    Aujourd'hui quel que chose ma vraiment sauté aux yeux sur la première photo que j'ai posté on voit très bien que tout commence a la premier ligne dans le fichier excel (j'exportes tous les utilisateur de la bdd) mais sur la seconde photo quand j'exporte le fichier en local pour un utilisateur il commence a la ligne 3 ?

    export.php sert uniquement a récupérer tous les informations de la table utilisateurs et appelle la class CSV::export
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    //connection a la BDD
    require 'mesFunctionsSQL.php'; 
     
        $con = getDatabaseConnexion();
        $req = $con->prepare('SELECT * FROM utilisateurs');
        $req->execute();
        $data = $req->fetchAll();
     
       require '../class/class.csv.php'; 
       CSV::export($data,'utilisateurs');
    ?>
    class.csv.php va créer le fichier excel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
    class CSV{
     
         static function export($datas,$filename){
              header('Content-Type: text/csv;');
              header('Content-Disposition: attachement; filename="'.$filename.'.csv"');
     
             if ($filename !== "utilisateurs") {
              $datas = array($datas);
             }
     
             $i = 0;
             foreach($datas as $v){
                 if($i == 0) {
                     echo '"'.implode('";"',array_keys($v)).'"'."\n";
                 }
                 echo '"'.implode('";"',$v).'"'."\n";
                 $i++;
             }
     
         }
    }
    ?>

    createUpdateDeleteUser.php j'organise les données pour qu'ils soient dans le bon ordre et j'appelle la class CSV::export probleme : le fichier saute 2 lignes dans le file.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Creation du ficher excel pour sauvegarde local.
    if ($action == "copie") {
    	require '../class/class.csv.php'; 
    	CSV::export([
    		'nom' => $_POST['nom'],
    		'prenom' => $_POST['prenom'],
    		'age' => $_POST['age'],
        	        'cinema' => $_POST['cinema'],
    		'adresse' => $_POST['adresse'],
    	],'utilisateursSolo');
    	exit;
    }

    donc comment je peux faire pour corrigé les sauts de ligne ? plutôt étrange que le document commence a la ligne 3 ? est-ce qu'il existe une fonction php pour remédier au probleme ?

Discussions similaires

  1. Listbox : répétition de SelectedItem si positionné null - Pourquoi?
    Par bourrin_on_ze_net dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 08/01/2016, 11h17
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. Alter column => passer de NOT NULL à NULL
    Par JohnGT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2003, 11h16
  4. Réponses: 8
    Dernier message: 24/07/2003, 10h45
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo