Tester une cellule vide dans un champ ?

Signaler
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour à tous,
J'ai 1 table " mairies_web" qui liste toutes les communes qui ont leurs sites sur internet...
Cette table comprend 4 champs:
id mairies tel url
je sais faire une requete et mon tableau fonctionne parfaitement.
Mon tableau affiche le nom de la commune ainsi que son n° de téléphone.
Quand je clique sur le nom de la commune, une fenêtre s'ouvre avec son site.
Mon souci est celui-ci:
Toutes les communes n'ont pas de sites sur internet, alors comment faire pour dévalider
le clic sur le nom de ces communes et mettre un "alt" du type "pas de site" ?
Il faut certainement tester les cellules vides dans le champ "URL" ??
Merci


<?
bla-bla-bla-bla
?>
<table width= '100%' cellspacing="1" border="1" bordercolordark="white" bordercolorlight="maroon">
<?
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$nb_affichage_par_page = 10;

// Préparation de la requête avec le LIMIT
$sql = 'SELECT mairies, tel, url FROM mairies_web ORDER BY mairies ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;


// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());


// on va scanner tous les résultats un par un

while ($row = mysql_fetch_array($req)) {
// on affiches les résultats dans la table
?>
<tr class="classe1" onmouseover="this.className='classe2';" onmouseout="this.className='classe1';">



<td width="693" height="21" align="center">')"> Commune de&nbsp;<? echo $row['mairies'];?>

</td>

<td width ="15" height="21" align="center">


</td>

<td width="386" height="21" align="center">
<? echo $row['tel'];?>

</td>

</tr>
<?
bla-bla-bla-bla
?>

14 réponses

Messages postés
166
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1
Tu n'as qu'à utilisé la fonction mysql_num_rows(). Exemple:

if(mysql_num_rows($result) < 1){

echo 'Vide';

}

else{

// ...

}

----------------

eXon
http://www.lookstrike.com
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,



ou alors tu fais un simple if dans l'affichage de ton tableau



if ($row['url']=="")

affichage sans lien

else

affichage avec lien
Messages postés
166
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1
Je ne crois pas que ça soit une bonne solution il y a plusieurs entrés
et la fonction mysql_num_rows est indiscutablement la fonction la plus
efficace pour vérifé combien d'entré est dans sa requête. Ta façon ne
marche pas en plus dans son cas.

----------------

eXon
http://www.lookstrike.com
Messages postés
166
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1
Ooops après avoir relu ta question je me suis rendu compte que je ne
répondais pas exactement à ta question. La solution serait simplement
utilisé la fonction empty:

if(empty($row['url'])){

echo 'Pas de site';

}

else{

// ...

}

----------------

eXon
http://www.lookstrike.com
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Me disais aussi...lol.
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005

Merci de m'avoir répondu aussi vite !
j'ai 2 scripts identiques sur cette page (français et anglais) et
j'ai une erreur sur le ELSE entre les 2 pages...

?>
<?
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$nb_affichage_par_page = 10;

// Préparation de la requête avec le LIMIT
$sql = 'SELECT mairies, tel, url FROM mairies_web ORDER BY mairies ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());

// on va scanner tous les résultats un par un

while ($row = mysql_fetch_array($req)){

if(empty($row['url'])){ [ code que j'ai rajouté]
echo 'Pas de site';
}
else{

// on affiches les résultats dans la table
?>
----

')">Commune de&nbsp;<? echo $row['mairies'];?>,

,

<? echo $row['tel'];?>,

<?
}

// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
?>



<?php


// on affiche enfin notre barre
echo ''.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
?>

<!--Début script de page modifiée le-->
<?print("Dernière modification le ");?><?print(date("d/m/Y", filemtime($SCRIPT_FILENAME)));?>

<!--Fin du script de page modifiée le-->



<!-- Fin du script en français -->
<?
}
else { ERREUR ICI !!
?>
<!-- Début du script en anglais -->
<?
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



évite les multiples ouvertures/fermetures des balises php (qui ne sont pas au passage <? mais <?php)



Ensuite ça :



<table width= '100%' cellspacing="1" border="1" bordercolordark="white" bordercolorlight="maroon">



toujours mettre entre guillemets doubles les attributs html




<table width="100%" cellspacing="1" border="1" bordercolordark="white" bordercolorlight="maroon">



ensuite tu peux transformer ça en CSS mais bon c'est pas le but de la question (quoi que, ça serait utile)




et
: à remplacer par




ensuite





le suffit normalement ;-)




à remplacer par :







ton mysql_close (); tu peux le mettre juste après avoir fait la requête pour avoir une connexion la plus courte possible.



Ensuite le mysql_fetch_array() peut être remplacé par un mysql_fetch_row() plus rapide.



ça donnerait ça :



dans une CSS :



.a{


width:693px;


}

.b{


width:15px;


}

.a,.b{


height:21px;

text-align:center;


}

.c{


width:386px;

height:21px;

font-weight:bold;


}







while ($row = mysql_fetch_row($req))

{

if(empty($row[2])){
echo 'Pas de site';
}
else{

echo '<tr class ="classe1"
onmouseover="this.className=\'classe2\';"
onmouseout="this.className=\'classe1\';">

<td class="a">Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'entraide informatique (14 catégories)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
tu peux aussi remplacer ça :







par ça :







et rajouter ça dans la CSS :



.d{


border:0;

height:21px;

width:21px;


}


Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'entraide informatique (14 catégories)
Messages postés
166
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1
Pour ton erreur, où est-ce que tu as mis ta première condition? Regarde
bien tu as deux else de suite, ce qui est illogique et fait sortir
innévitablement une erreur par PHP.

----------------

eXon
http://www.lookstrike.com
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005

je reviens sur mon probléme, je n'ai tjrs pas trouvé la solution !!
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005

Personne ? snif !!
Messages postés
166
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1
Tu dis remplacer:



if(empty($row['url'])){
echo 'Pas de site';
}



par:



if(mysql_num_rows($req) < 1){


echo 'Pas de site';
}



----------------

eXon
http://www.lookstrike.com
Messages postés
34
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
15 décembre 2005

// on va scanner tous les résultats un par un

while ($row = mysql_fetch_array($req))
if(mysql_num_rows($req) < 1)
{
echo 'Pas de site';
}
else
{




// on affiches les résultats dans la table
?>
<tr class="classe1" onmouseover="this.className='classe2';" onmouseout="this.className='classe1';">

<td width="693" height="21" align="center">')"> Commune de&nbsp;<? echo $row['mairies'];?>

</td>

<td width ="15" height="21" align="center">


</td>

<td width="386" height="21" align="center">
<? echo $row['tel'];?>

</td>
<?
}

Salut,
Ca ne me crée pas d'erreur et tous les liens sont actifs même si la cellule et vide.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
tu dois mettre ça :



if(mysql_num_rows($req) < 1)
{
echo 'Pas de site';
}
else
{



avant le mysql_fetch_row()



a +


Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'entraide informatique (14 catégories)