8722 sujets

Développement web côté serveur, CMS

Bonjour,
Je dois faire une page dont le contenue est afficher via la bdd. J'essaie de faire une vérification du genre "Si toutes les lignes de la colonne "etat" valent 0 affiche ça, sinon affiche celles qui valent 1" J'arrive pas à faire la vérification sur toutes les lignes.

Voici où j'en suis:
<?php $sql="SELECT
		C.*,
		DAY(C.date_debut) as jour,
		MONTH(C.date_debut) as mois,
		YEAR(C.date_debut) as annee
	FROM career C";
$infos = $DB->get_data($sql);

	$mois = array(
				1 => 'janvier',
				2 => 'février',
				3 => 'mars',
				4 => 'avril',
				5 => 'mai',
				6 => 'juin',
				7 => 'juillet',
				8 => 'août',
				9 => 'septembre',
				10 => 'octobre',
				11 => 'novembre',
				12 => 'décembre');

foreach($infos as $info){ 
		if ($info[1] == '0'){
			echo '<p><strong>Tout nos postes sont présentement comblés</strong></p>';
		}  
		else { 
			if( $info->etat == 1 ){
			?>
    <article class="bdr-orange-top" id="<?php echo $info->id;?>">
        <h2 class="is-left bdr-orange-bottom"><?php echo $info->poste;?></h2>
        <p><strong>Nombres de poste&nbsp;:</strong> 
			<?php
				if(!empty($info->nombre)){
					echo $info->nombre;
				}
            ?>
        </p>
        <p><strong>Lieu de travail&nbsp;:</strong> Victoriaville, Qc</p>
        <p><strong>Statut&nbsp;:</strong> 
        	<?php
				if(!empty($info->statut)){
					echo ucfirst($info->statut);
				}
            ?>
             - 
			<?php
				if(!empty($info->type)){
					echo 'Temps '.$info->type;
				}
            ?>
        </p>
        <p><strong>Date de début&nbsp;:</strong> 
			<?php
				if($info->date_debut == '0000-00-00'){
					echo 'le plus tôt possible';
				}
				else{
					echo $info->jour.' '.$mois[$info->mois].' '.$info->annee;
				}
            ?>
        </p>
			<?php
            $am = explode("\r\n", $info->description);
            $bm = explode("\r\n", $info->exigences);
            $cm = explode("\r\n", $info->exigences2);
            $dm = explode("\r\n", $info->infos);
            
            	if(!empty($info->description)){
				?>
		<h3 class="is-left">Description du poste&nbsp;:</h3>
		<p>Dans le cadre de ses fonctions, le ou la titulaire du poste aura, entres autres, à :</p>
                <?php
                echo('<ul>');
                	foreach($am as $a) {
                    	echo ('<li>'.stripslashes($a).'</li>');
                	}
                echo('</ul>');
            	}
            
            	if(!empty($info->exigences)){
				?>
		<h3 class="is-left">Exigences&nbsp;:</h3>
                <?php
                echo('<ul>');
					foreach($bm as $b) {
						echo '<li>'.(stripslashes($b).'</li>');
					}
                echo('</ul>');
				}
				
				if(!empty($info->exigences2)){
					foreach($cm as $c) {
						echo '<p>'.(stripslashes($c).'</p>');
					}
				}
            
            	if(!empty($info->infos)){
				?>
		<h3 class="is-left">Information suplémentaire&nbsp;:</h3>
                <?php
					foreach($dm as $d) {
						echo '<p>'.(stripslashes($d).'</p>');
					}
				}
            ?>
        <p>Ce poste vous intéresse? <a href="contact-carriere.php?poste=<?php echo $info->poste;?>" class="bouton">Soumettez votre candidature!</a></p>
    </article>
        <?php
			}
		} 
	} ?>

Mais ça m'affiche : Fatal error: Cannot use object of type stdClass as array in /home/ggteleco/public_html/dev2014/FR/carrieres.php on line 72

Si je mets if ($info-etat[1] == '0'), il ne va chercher que le else...

Une piste?
Tu devrai mettre ta condition dans ta requête SQL du genre

SELECT
C.*,
DAY(C.date_debut) as jour,
MONTH(C.date_debut) as mois,
YEAR(C.date_debut) as annee
FROM career C
WHERE C.etat=1

ensuite tu teste si le résultat de ta requête est vide alors tu fait afficher « Tout nos postes sont présentement comblés » sinon tu fais une boucle avec le traitement de ton "else"
Comme ça:
<?php $sql="SELECT
		C.*,
		DAY(C.date_debut) as jour,
		MONTH(C.date_debut) as mois,
		YEAR(C.date_debut) as annee
	FROM career C
	WHERE C.etat=1";
$infos = $DB->get_data($sql);

foreach($infos as $info){ 
		if (empty($info->etat)){
			echo '<p><strong>Tout nos poste sont présentement comblé</strong></p>';
		}  
		else { 
			if( $info->etat == 1 ){
			 bla bla bla
			}
		}
}
?>


Si tout est à 0, ça n'affiche rien...


EDIT: Forcément puisque qu'on ne sélectionne que ceux qui sont à 1 dans la requête...
Modifié par juliesunset (05 Jun 2014 - 19:21)
Normal, tu ne sélectionnes que que les lignes qui ont etat = 1 donc tu n'as aucune ligne où etat = 0 dans ton résultat.
FraiseTagada99, On c'est chevauché! Smiley langue

<?php
if ($infos[1] == '0'){
		echo '<p><strong>Tout nos poste sont présentement comblé</strong></p>';
	}  
	else { 
	
	foreach($infos as $info){ 
			if( $info->etat == 1 ){
			     bla bla bla
			}
?>


Je n<ais plus de fatal error, mais la phrase ne s'affiche pas plus
Plutôt du style

<?php $sql="SELECT
C.*,
DAY(C.date_debut) as jour,
MONTH(C.date_debut) as mois,
YEAR(C.date_debut) as annee
FROM career C
WHERE C.etat=1";
$infos = $DB->get_data($sql);

Si $infos est vide affiche '<p><strong>Tout nos poste sont présentement comblé</strong></p>'
sinon exécute la boucle
foreach($infos as $info){

bla bla bla

}
Modifié par marginus (05 Jun 2014 - 19:39)
juliesunset a écrit :
EDIT: Forcément puisque qu'on ne sélectionne que ceux qui sont à 1 dans la requête...


FraiseTagada99 a écrit :
Normal, tu ne sélectionnes que que les lignes qui ont etat = 1 donc tu n'as aucune ligne où etat = 0 dans ton résultat.



Smiley rolleyes Donc non...
Je ne suis pas un pro de php mais ça doit être quelque chose comme ça :

<?php $sql="SELECT
		C.*,
		DAY(C.date_debut) as jour,
		MONTH(C.date_debut) as mois,
		YEAR(C.date_debut) as annee
	FROM career C
	WHERE C.etat=1";
$infos = $DB->get_data($sql);

if(isset($infos)) {
    foreach($infos as $info){ 
        bla bla bla
    } 
} else {
    echo '<p><strong>Tout nos poste sont présentement comblé</strong></p>';
}
?>
J'ai essayé ce truc et ça semble fonctionné!

<?php
$sql="SELECT
		C.*,
		DAY(C.date_debut) as jour,
		MONTH(C.date_debut) as mois,
		YEAR(C.date_debut) as annee
	FROM career C
	WHERE etat = 1";
$infos = $DB->get_data($sql);

	if (!$infos){
		echo '<p><strong>Tout nos poste sont présentement comblé</strong></p>';
	}  
	else {
		foreach($infos as $info){ 
			if( $info->etat == 1 ){
			Bla bla bla
			}
		}
	}
?>
Juste un petit truc le test if( $info->etat == 1 ){ } est inutile car toutes les valeurs pour etat valent 1 car tu ne sélectionne que celle-ci dans ta requête.