Insérer "if null print Non disponible" dans ma requête

Résolu
goingup Messages postés 45 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 14 janvier 2010 - 12 déc. 2009 à 15:39
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 13 déc. 2009 à 15:56
Bonjour,

Je suis débutante en php et en mysql et je rencontre quelques petits désagréments dans la construction de ma base et de mes requêtes.

Je suis en train de monter une base d'indicateurs géographiques (population, taux natalité, IDH...) pour tous les pays du monde. Ces champs, sous phymyadmin, sont renseignés comme ceci : decimal(11,1) NULL (ils peuvent être NULL si la donnée est non disponible. Or, lorsque j'importe ma base (en CSV), les cases vides (là ou l'indicateur n'est pas disponible) se transforme en 0.0 (par contre, il n'y a pas de problème avec les VARCHAR qui restent bien vides). Ma première question est la suivante : peut-on laisser les champs de type décimal vides (sans valeur, ni 0 car 0 peut ici être une valeur comme par exemple 0 pour le taux de natalité d'un pays).

Voici comment j'affiche mes données sur mon site :
<?php
// ma requete avec mes champs
$query = sprintf("SELECT pays, pop, agemoy, denspop, espvie, espviehom, espviefem, idh, txnata... FROM bddpays WHERE pays='France'" );
$statistiques = mysql_query($query) or die("Erreur SQL : $query
".mysql_error());
while($stat = mysql_fetch_array($statistiques))
{
echo '
Population : '.$stat['pop'].',

----

IDH : '.$stat['idh'].',

----

Taux de natalité: '.$stat['txnata'].'
';
}
?>

Ma seconde question est la suivante : comment imprimer un texte "Non disponible" s'il n'y a pas de valeur dans cet indicateur?

----------GoingUP

7 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 déc. 2009 à 09:47
J'ai toujours un unexpected ";" ou ",". Y-a-t-il des choses à changer pour pouvoir l'insérer correctement ?

Tu peux l'insérer (juste pour le test), comme ça :

[...]
<tr>
<td>Taux de natalité: ';
if (empty($stat['txnata'])) echo 'Non Disponible'; else echo $stat['txnata'];
echo '</td>
</tr>
[...]


je l'ai défini en tant que NULL mais rien ni fait

As tu contrôlé qu'il y avait bien des NULL dans le csv généré ?

Qu'est ce que ça raconte si tu entres cette requête SQL dans PMA :
SHOW CREATE TABLE bddpays



Cordialement,

Kohntark -
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 déc. 2009 à 16:44
Salut GoingUp,

... je ne vois pas trop pourquoi tu obtiens un 0.0, il n'y a pas de raison.
Je n'ai pas trop compris l'histoire de l'import csv, mais le problème peut venir de là (il y a notamment une option dans phpMyAdmin qui permet le remplacement des valeurs NULL) ... à moins qu'il ne vienne des INSERT.

Il faudrait que tu en dises un peu plus.

comment imprimer un texte "Non disponible" s'il n'y a pas de valeur dans cet indicateur?

Logiquement tu devrais avoir une valeur vide avec PHP lorqu'elle apparait en "NULL" sous PMA, donc très simplement :

<?php
if (empty($stat['txnata'])) echo 'Non Disponible'; else echo $stat['txnata'];
?>



Cordialement,

Kohntark -
0
goingup Messages postés 45 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 14 janvier 2010
12 déc. 2009 à 18:11
La structure de ma table sous phpmyadmin indique dans la colonne NULL des "Oui" et dans la colonne Défaut il y a "NULL". J'ai essayé toutes les combinaisons possibles mais rien n'y fait à chaque importation de base csv, les cellules vides se transforment en 0.0

Voici un aperçu d'une ligne de ma base en csv :
France;Europe;64094658;38;0.7;112;79.9;76.2;83.7;16;;16;63085101;70000000;27098341;23;77;;;210;0.33;1.84;95;9.2;4.2;11.8;;3968000;100;100;2.1;33.6;-1.4;72;0.8;0;6;43.8;595920;431005;410700;789.5;575;117;401.24;587;625.8;63473;917041;2.6;5.6;2.2;21.71;255;59;75910;2126630;34936;2.2;20.9;76.9;1888410;34600;980780;-2.8;7.5;1.2;11;16;99;;;367712;10;-0.47;3427;543965;100;;3550;116;57772;;29286;891290;495;"France (forme longue) ; France (forme courte)";Paris;français;"catholicisme ; islam ; protestantisme ; judaïsme";république;Aucune;La Constitution du 4 octobre 1958 a été modifiée à de nombreuses reprises, notamment en 1962 pour permettre l'élection du président de la République au suffrage universel. Dans les années quatre-vingt-dix, elle a été révisée en vue de la ratification du traité de Maastricht (1992), afin de permettre les réformes du Conseil supérieur de la magistrature et de la Haute Cour de justice ainsi qu'une refonte du droit d'asile (1993), pour étendre le recours au référendum au bénéfice du chef de l'État (1995) et en vue de la ratification du traité d'Amsterdam (1999).;suffrage universel à partir de 18 ans;1 euro (EUR) 100 centimes (1 euro 6,55957 francs);"machines et matériel de transport ; produits agricoles ; denrées alimentaires ; produits chimiques ; produits sidérurgiques ; textile";"matières premières (hydrocarbures ; minerais ; charbon) ; produits manufacturés (informatique ; machines-outils ; hi-fi ; électroménager) ; produits agricoles";"Allemagne ; Benelux ; Italie ; Royaume-Uni ; États-Unis ; Espagne ; Japon ";"Allemagne ; Benelux ; Italie ; Royaume-Uni ; États-Unis ; Espagne ; Japon ";"machines et matériel de transport ; agroalimentaire ; sidérurgie ; métallurgie de l'aluminium ; textile ; automobile ; armement ; aéronautique ; télécommunications ; ingéniérie informatique ; grande distribution; tourisme ";"Principales cultures : céréales (blé ; maïs ; orge) ; pommes de terre ; betteraves à sucre ; oléagineux (tournesol ; colza) ; vigne ; fruits et légumes ; tabac --- Élevage : bovins ; porcins ; volailles ";"charbon ; minerai de fer ; bauxite ; nickel ; uranium ; cuivre ; zinc ; sel ";FR


Vous pouvez voir que lorsqu'une cellule est vide il y a bien ceci ;; (rien à l'intérieur du délimiteur). Je me demande si les champs de type décimal sous PMA accepte vraiment les champs vides.

----------GoingUP
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 déc. 2009 à 18:54
Je viens de faire un test d'import via phpmyadmin avec des ";;" => ça plante (erreur, aucune données importée) Il y a sans doute une histoire de paramétrage ou de version.

Je disais juste avant :
[...] de l'import csv, mais le problème peut venir de là (il y a notamment une option dans phpMyAdmin qui permet le remplacement des valeurs NULL)

A quoi est définie cette option ? Elle est vraisemblablement vide.
Que ce passe t il si tu la définie à NULL ? (tes ";;" donneront donc des ";NULL;" dans le fichier généré)

Kohntark -
0

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

Posez votre question
goingup Messages postés 45 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 14 janvier 2010
12 déc. 2009 à 20:12
Je suis phpmyadmin 2.11.5 et j'ai contacté OVH mais mon interlocuteur me répond dans le vide.

En ce qui concerne l'option sur phpmyadmin, je l'ai défini en tant que NULL mais rien ni fait, le résultat de l'import reste toujours le même 0.0

Alors je me suis dit que peut être PMA affiche 0.0 quand le champ est vide puisse que le type est un entier ou un décimal et j'ai décidé de tester ton petit code php pour lui demande d'imprimer un "Non disponible" si le champs est vide mais je ne parviens pas à l'insérer correctement dans mon code initial. J'ai toujours un unexpected ";" ou ",". Y-a-t-il des choses à changer pour pouvoir l'insérer correctement ?

Merci,


----------GoingUP
0
goingup Messages postés 45 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 14 janvier 2010
13 déc. 2009 à 15:36
Merci, merci beaucoup Kohntark. Tu as raison, il faut rajouter les NULL dans les cellules vides du csv et bien évidemment cocher la case appropriée dans la structure de phpmyadmin

Ca fonctionne parfaitement, quelque soit le type de champs.

Encore MERCI !!


----------GoingUP
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 déc. 2009 à 15:56
Heureux de t'avoir mis sur la voie.

Bonne continuation,

Kohntark -
0
Rejoignez-nous