[PHP] savoir si un champs est vide ou pas...

savoir si un champs est vide ou pas... [PHP] - PHP - Programmation

Marsh Posté le 24-08-2003 à 14:23:27    

Hello ;)
 
Voila, j'ai une liste de membre, je fais un while de tous mes champs pour afficher tous ça, bon ça fonctionne super bien, mais le pb c'est que quand un champs est vide dans la bdd, il me l'affiche quand meme (c'est tres bien)... mais je voudrais que si un champs ne contient aucune valeur, plutot que de m'fficher un blanc '' j'aimerais avoir un truc du style '&nbsp'  :wahoo:  
 
j'ai pensser à un truc du style :
 
if($row

  • == '')

$row

  • = ' ';


bon en fait c totalement faux  :pfff:  
 
vous voyez ce que je veux faire ?


Message édité par KdZ' le 24-08-2003 à 14:25:17
Reply

Marsh Posté le 24-08-2003 à 14:23:27   

Reply

Marsh Posté le 24-08-2003 à 14:24:21    

KdZ' a écrit :


vous voyez ce que je veux faire ?


 
Avec le jocebug, pas trop [:ddr555]
 

Code :
  1. if($row

    • == '')
    • $row[*] = ' ';


Message édité par kadreg le 24-08-2003 à 14:24:50

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 24-08-2003 à 14:27:42    

:D  
 

Code :
  1. <?php
  2. // CONNEXION & SELECTION DE LA BDD
  3. require('connexion.php');
  4. // SELECTION DE LA TABLE
  5. $req = mysql_query("SELECT * FROM membres" ) or die ("erreur requete" );
  6. print('<table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolor="#000000">
  7. <tr align="center" bgcolor="#0099CC">
  8. <td>ID</td>
  9. <td>Nom</td>
  10. <td>Prénom</td>
  11. <td>Adresse</td>
  12. <td>Code postal</td>
  13. <td>Ville</td>
  14. <td>Tél. fixe</td>
  15. <td>Tél. portable</td>
  16. <td>E-mail</td>
  17. <td>Date de naissance</td>
  18. <td>Statut</td>
  19. </tr>
  20. ');
  21. while ($row = mysql_fetch_row($req))
  22. {
  23. echo ("<tr>
  24. <td>$row[0]</td>
  25. <td>$row[1]</td>
  26. <td>$row[2]</td>
  27. <td>$row[3]</td>
  28. <td>$row[4]</td>
  29. <td>$row[5]</td>
  30. <td>$row[6]</td>
  31. <td>$row[7]</td>
  32. <td>$row[8]</td>
  33. <td>$row[9]</td>
  34. <td>$row[10]</td>
  35. </tr>
  36. " );
  37. }
  38. print('</table>
  39. ');
  40. ?>


 
 
voila, il se trouve que si (dans mon while) $row[x] est vide, je voudrais qu'il print'&nbsp' à la place de rien  :sarcastic:  
 
c plus clair ¿ :pt1cable:


Message édité par KdZ' le 24-08-2003 à 14:29:13
Reply

Marsh Posté le 24-08-2003 à 14:58:46    

clair oui, mais quel intérêt?

Reply

Marsh Posté le 24-08-2003 à 15:05:02    

Arf je debute dans tous ça, et c'est un peu par curiosité, le fait de savoir ça, pourra me resservir pour autre chose...
 
Mais c'est aussi parce que sinon l'affichage de cellules vides sous  nescape c pas tres beau :)
Merci ;)
 
Alors, une idée ?

Reply

Marsh Posté le 24-08-2003 à 15:07:06    

euh... non, en fait, c'est pas clair. t'as combien de champs qui sont retournés par enregistrement? 11 ou 12?

Reply

Marsh Posté le 24-08-2003 à 15:09:29    

 <td>ID</td>
  <td>Nom</td>
  <td>Prénom</td>
  <td>Adresse</td>
  <td>Code postal</td>
  <td>Ville</td>
  <td>Tél. fixe</td>
  <td>Tél. portable</td>
  <td>E-mail</td>
  <td>Date de naissance</td>
  <td>Statut</td>
 
ça fait 11  ;)

Reply

Marsh Posté le 24-08-2003 à 15:11:09    

le champs ID, sera enregistrer automatiquement, et non pas via le forumulaire, il parait que' l'ont peu, je ne c pas comment mais je verrais ça apres :) (autoincrement ou un truc du style si je me trompe pas)

Reply

Marsh Posté le 24-08-2003 à 15:15:25    

Je crois pas qu'il y ait de solution miracle, il faut tester :
 
if (strlen($row[1]) > 0)  
    echo htmlspecialchars($row[1]);
else
    echo '&nbsp;';


Message édité par mrbebert le 24-08-2003 à 15:15:39
Reply

Marsh Posté le 24-08-2003 à 15:15:58    

bah si ca fait onze, comment veux-tu arriver dans ton cas d'avoir tous les champs vide? ta fonction te retournera false et la boucle s'arrètera d'office...

Reply

Marsh Posté le 24-08-2003 à 15:15:58   

Reply

Marsh Posté le 24-08-2003 à 15:18:14    

gizmo a écrit :

bah si ca fait onze, comment veux-tu arriver dans ton cas d'avoir tous les champs vide? ta fonction te retournera false et la boucle s'arrètera d'office...


 
Mais nan, par exemple seul le champs VILLE peut etre vide dans ce cas il affichera &nbsp
Merci quand meme...

Reply

Marsh Posté le 24-08-2003 à 15:19:59    

mrBebert a écrit :

Je crois pas qu'il y ait de solution miracle, il faut tester :
 
if (strlen($row[1]) > 0)  
    echo htmlspecialchars($row[1]);
else
    echo '&nbsp;';


 
c ce que j'ai penser aussi, il faut donc que je test pour chaque ligne, c bien ça ?
 
Par contre, je pige pas bien ton code, j'en avais pondu un un peu plus simple  :kaola: mais je vais quand meme utiliser le tiens, si tu pouvais me l'expliquer ?  :)  
Merci  ;)


Message édité par KdZ' le 24-08-2003 à 15:22:48
Reply

Marsh Posté le 24-08-2003 à 15:22:06    

hum... chui pas bien réveillé.
 
Par contre, le code là est ultra lourd.
un simple row[x] ? echo row[x] : echo '&nbsp;' suffit.

Reply

Marsh Posté le 24-08-2003 à 15:25:52    

gizmo a écrit :

hum... chui pas bien réveillé.
 
Par contre, le code là est ultra lourd.
un simple row[x] ? echo row[x] : echo '&nbsp;' suffit.


 
le code de mrBebert est trop lourd ?
 
donc voila ce que tu proposes :
 

Code :
  1. if(!$row[x]) 
  2.    echo '&nbsp';
  3. else
  4.    echo "$row[1]";


 
c bien ça ? (et ce pour chaque lignes ?)

Reply

Marsh Posté le 24-08-2003 à 15:26:00    

KdZ' a écrit :


 
c ce que j'ai penser aussi, il faut donc que je test pour chaque ligne, c bien ça ?
 
Par contre, je pige pas bien ton code, j'en avais pondu un un peu plus simple  :kaola: mais je vais quand meme utiliser le tiens, si tu pouvais me l'expliquer ?  :)  
Merci  ;)

c'est le htmlspecialchars() qui te pose problème ?
C'est pour éviter que des chaines de caractères ne pose problème dans la mise en page. Si un utilisateur s'amuse à mettre un & ou un <br> dans son nom :D
 
edit : tiens, j'ai tapé <br> dans mon post, mais à l'affichage; il n'y pas de retour à ligne, c'est un effet du htmlspecialchars() :)


Message édité par mrbebert le 24-08-2003 à 15:27:09
Reply

Marsh Posté le 24-08-2003 à 15:30:22    

mrBebert a écrit :

c'est le htmlspecialchars() qui te pose problème ?
C'est pour éviter que des chaines de caractères ne pose problème dans la mise en page. Si un utilisateur s'amuse à mettre un & ou un <br> dans son nom :D
 
edit : tiens, j'ai tapé <br> dans mon post, mais à l'affichage; il n'y pas de retour à ligne, c'est un effet du htmlspecialchars() :)  


 
A oui ça peut etre pratique, à voir pour la suite...
 
J'aimerais aussi que les ",',les balises html et tout le reste ne soit pas prit en compte, je veux du texte brut ça devrait surement etre possible par la suite... ;)

Reply

Marsh Posté le 24-08-2003 à 16:03:44    

Y'a t'il moyen de faire un fonction plutot que de faire ça manuellement à chaques ligne ? parce que, je viens de voir que on ne peut pas mettre de condition dans un print...ça revient à faire un truc plutot lourd...  :(  
Qui à une idée ?

Reply

Marsh Posté le 24-08-2003 à 16:12:15    

oui, tu peux en faire une fonction
 
function miseenforme($str) {
  if (strlen($str) > 0) return htmlspecialchars($str); else return '&nbsp;';
}
 
while (...) {
   ...
   echo '<tr>';
   echo '<td>' . $row[0] . '</td>';
   echo '<td>' . miseenforme($row[1]) . '</td>';
   ...
}


Message édité par mrbebert le 24-08-2003 à 16:13:27
Reply

Marsh Posté le 24-08-2003 à 16:26:49    

Merci bebert, ça marche nikel :)
par la meme occasion je commence à comprendre le fonctionnement de function  :jap:  
 
Juste ne question, à quoi ça sert d'utiliser $strlen ?

Reply

Marsh Posté le 24-08-2003 à 16:32:43    

strlen est une fonction, pas une variable. Elle renvoie le nombre de caractères de la chaîne de caractères passée en paramètres.

Reply

Marsh Posté le 24-08-2003 à 17:59:46    

A oki, et comment on fait pour avoir un champs qui serait auto increment :)

Reply

Marsh Posté le 24-08-2003 à 18:06:25    

ca, c'est lié à la base (MySQL j'imagine), rien à voir avec le PHP.
Il faut définir une colonne avec l'indication "auto_increment". Cette colonne doit être une clé primaire (donc not null), de type entier. A l'insertion, il suffit de ne pas fournir de valeur (ou la valeur NULL) à cette colonne, mysql générera automatiquement une valeur. Pour récupérer cette valeur, tu peux passer la requête : SELECT LAST_INSERT_ID() ou utiliser la fonction mysql_last_insert_id() avec le rsultat du mysql_query qui a réalisé l'insertion.


Message édité par mrbebert le 24-08-2003 à 18:07:00
Reply

Marsh Posté le 24-08-2003 à 18:32:26    

oui, j'ai deja essayer mais je n'arive pas a crée la table..
capture :
http://62.23.2.149/forum/ubbhtml/upload/code.1061742512.JPG

Reply

Marsh Posté le 24-08-2003 à 18:36:06    

faut que ce soit un type entier, pas chaine de caractères :non:  
 
comment veux tu qu'il incrémente une chaine de caractères :??:

Reply

Marsh Posté le 24-08-2003 à 18:41:41    

mrBebert a écrit :

faut que ce soit un type entier, pas chaine de caractères :non:  
 
comment veux tu qu'il incrémente une chaine de caractères :??:  


 
oui, je me doutait bien que c'etait ça  :pfff:  
http://62.23.2.149/forum/ubbhtml/upload/code.1061742997.JPG
que est le parametre qui doit etre utilisé ?

Reply

Marsh Posté le 24-08-2003 à 18:44:59    

int, c'est le plus simple :)  
Si tu sais que tu auras très peu de valeurs, tu peux à la rigueur utiliser smallint ou tinyint. Mais bon, pour gagner 2 ou 3 octets, je pense pas que ca en vaille le coup.

Reply

Marsh Posté le 24-08-2003 à 18:49:18    

Merci mec  :jap:
 
en fait j'avais bien essayer "int" aussi, mais je le faisait en modifiant mon champs, et il ne devait pas etre "primaire", c dommage qu'une fois un champs crée, on ne peut pas modifier s'il est primaire, index, unique etc.
nan ?

Reply

Marsh Posté le 24-08-2003 à 18:52:16    

si, bien sur :)  
(peut être pas par phpmyadmin ? [:figti] )

Reply

Marsh Posté le 24-08-2003 à 19:01:18    

c ce que j'utilise, mais une vielle version (celle par default avec easyphp 1.6) et il n'y a pas moyen de passer un champs en "primaire" une fois le champs cree...

Reply

Marsh Posté le 24-08-2003 à 19:12:19    

:pfff: tiens regarde, c nouveau, voila que ça ne fonctionne plus :

Code :
  1. $sql = "INSERT INTO 'membres' (nom, prenom, date_naissance2, date_naissance3, date_naissance1, adresse_1, adresse_2, adresse3) VALUES ('$nom', '$prenom', '$date_naissance2', '$date_naissance3', '$date_naissance1', '$adresse_1', '$adresse_2', '$adresse3')";
  2. mysql_query ("$sql" ) or die ('Erreur, la fiche n\'a pas été sauvegardée !');


 
ça devrait marcher ça nan ?
avant ça fonctionnait impec, mais j'avais moins de parametres ($prenom...)

Reply

Marsh Posté le 24-08-2003 à 19:15:40    

faut protéger les chaînes de caractères avec addslashes() (même principe que le htmlspecialchars() pour le html)

Reply

Marsh Posté le 24-08-2003 à 19:19:15    

oui, mais rien est enregistrer dans la bdd  :??:  
avant ça marchait... et je n'ai aps mis de caracteres speciaux dans mes champs de formulaire  :pfff:  :pfff:
edit : en fait j'ai mon message Erreur, la fiche n'a pas été sauvegardée ! qui s'affiche...


Message édité par KdZ' le 24-08-2003 à 19:21:15
Reply

Marsh Posté le 24-08-2003 à 19:21:57    

affiche la requête, tu verras bien à quoi elle ressemble [:proy]  
 
(et pourquoi tu mets des doubles quotes dans le mysql_query() ? :heink: )

Reply

Marsh Posté le 24-08-2003 à 19:25:30    

mrBebert a écrit :

affiche la requête, tu verras bien à quoi elle ressemble [:proy]  
 
(et pourquoi tu mets des doubles quotes dans le mysql_query() ? :heink: )


 
comme ça alors : (ça change quelquechose ?)

Code :
  1. $sql = "INSERT INTO 'membres' (nom, prenom, date_naissance2, date_naissance3, date_naissance1, adresse_1, adresse_2, adresse3, ville, code_postal, tel_fixe, tel_portable, email, statut) VALUES ('$nom', '$prenom', '$date_naissance2', '$date_naissance3', '$date_naissance1', '$adresse_1', '$adresse_2', '$adresse3', '$ville', '$code_postal', '$tel_fixe', '$tel_portable', '$email', '$statut')";
  2. mysql_query('$sql') or die ('Erreur, la fiche n\'a pas pu être sauvegardée !');
  3. echo ("Membre enregistré !<br /><br /><a href=\"inscription_membre.php\">NOUVEAU MEMBRE</a><br /><a href=\"membres.php\">LISTE DES MEMBRES</a>" );


Message édité par KdZ' le 24-08-2003 à 19:26:28
Reply

Marsh Posté le 24-08-2003 à 19:32:02    

non, pas de quotes du tout, c'est déja une chaîne de caractères [:proy]

Reply

Marsh Posté le 24-08-2003 à 19:32:52    

Citation :

affiche la requête, tu verras bien à quoi elle ressemble


 
 :heink: oula, trop chaud...
ça :

Code :
  1. print("$nom $prenom $date_naissance2 $date_naissance3 $date_naissance1 $adresse_1 $adresse_2 $adresse3 $ville $code_postal $tel_fixe $tel_portable $email $statut" );

?
si oui, elle s'affiche correctement, j'ai mes champs du formulaire qui s'affiche sur une ligne.


Message édité par KdZ' le 24-08-2003 à 19:33:06
Reply

Marsh Posté le 24-08-2003 à 19:41:48    

non, fais un :
htmlspecialchars($sql);
pour voir exactement ce qui est envoyé à mysql

Reply

Marsh Posté le 24-08-2003 à 19:47:06    

mrBebert a écrit :

non, fais un :
htmlspecialchars($sql);
pour voir exactement ce qui est envoyé à mysql


 
 :jap: a oui...
voila ce qui est envoyé mysql :

Code :
  1. INSERT INTO 'membres' (nom, prenom, date_naissance2, date_naissance3, date_naissance1, adresse_1, adresse_2, adresse3, ville, code_postal, tel_fixe, tel_portable, email, statut) VALUES ('nico', 'jshsgfhs', 'b', 'c', 'a', 'adpr', 'addeux', '', 'pouliguen', 'codeppp', 'fixe', 'portable', 'mail', 'Membre')


 
c normal, hein ? :??:


Message édité par KdZ' le 24-08-2003 à 19:47:40
Reply

Marsh Posté le 24-08-2003 à 19:48:47    

ça se trouve :
 
adresse_1 //c pas autoriser
adrresse1 //c autoriser seulement
non plus ?

Reply

Marsh Posté le 24-08-2003 à 19:55:06    

Tes colonnes date_naissance, elles sont de type DATE ? Dans ce cas, les valeurs passées sont pas correctes. Idem pour le code postal si tu l'as défini en entier.


Message édité par mrbebert le 24-08-2003 à 19:55:16
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed