8795 sujets

Développement web côté serveur, CMS

Bonjour, je n'y connais pas grande chose en PHP, mais j'ai une fonction normalement assez simple à faire pour un petit plugin Wordpress que je suis en train de me créer.

Voici ce que je souhaite faire :

Si les champs des variables logo, prix, dispo sont remplies, alors on peut afficher la table. Le tout stoker dans une variable $vide

Voici ce que je pensais faire, mais bien entendu, cela ne marche pas Smiley cligne


Je vérifie que les 3 variables sont bien remplies et je les stocke dans une variable $vide
$vide = if ((!isset($logo) && !isset($prix) && !isset($dispo)));  


Si la variable $vide est vérifier (c'est à dire que les 3 variables sont bien remplis) alors je peux afficher ma table.

if (isset($vide)) echo '<table><tr><td>' .logo . '</td><td>' .prix . '</td><td>' .dispo . '</td></tr></table>';



Merci pour votre aide
Modifié par dreadstock (23 Jan 2013 - 15:41)
Alors première chose, tu n'as pas besoin de if à la déclaration de ta variable $vide, if sert à vérifier une condition ou un booléen, pas à la "créer".

Deuxième chose, si ton but est comme tu le dis que $vide soit vrai si les trois champs sont renvoyés (un peu bizarre comme nom de variable du coup non ?) il faudra utiliser isset(), et ne pas l'inverser avec !isset(). Du coup ça donne :

$vide =(isset($logo) && isset($prix) && isset($dispo));  


Troisième chose, isset sert à vérifier qu'une variable existe et est définie, mais ne vérifie pas si elle est vide ou non. Donc si ton formulaire contient les trois champs et que l'utilisateur n'en rempli aucun, $logo, $prix et $dispo existeront bien (si tu les sort tel quel de $_POST), mais seront nuls.
Tu pourrais par exemple vérifier qu'ils ne sont pas vides :

$vide =(!empty($logo) &&!empty($prix) && !empty($dispo));  


Même remarque pour ton test suivant avec isset : $vide existera toujours (tu viens de la déclarer au dessus), ce que tu veux vérifier c'est qu'elle est vraie :

if ($vide === true){
    //affichage du tableau
} 


Moins rigoureux mais qui fonctionnera tout aussi bien ici :

if ($vide){
    //affichage du tableau
} 


Tu considère directement $vide comme un booléen (qu'il est), et tu vérifies s'il est vrai ou faux. Ici c'est très bien, mais ce type d'utilisation peut parfois être trompeuse quand on ne sait pas à l'avance si la variable est un booléen ou non : Par exemple le nombre zéro ou une chaine de caractère vide seront considérés comme "faux" alors qu'ils ne sont pas strictement faux.



Voilà, j'espère avoir répondu à ta question Smiley smile
Merci pour cette réponse, elle est vraiment parfaite et très pédagogique !
Je vais essayer tout cela et vous tiens au courant, un grand merci !
Aie aie aie, je coince un peu du coup pour arriver à intégrer ces fonctions dans mon code ci-dessous. Il faudrait que je sépare le php du code html pour arriver, non ?
En fait, je ne veux pas afficher la partie qu'il y a entre tbody, si les variables logo prix dispo et lienaff ne sont pas remplies.

<?php
class myTinyMceButton_Client {
	function __construct() {
				add_shortcode( 'my-listing' , array( &$this, 'shortcode' ) );
	}

	function shortcode( $atts, $content = null ) {
		extract(shortcode_atts(array(
          'logo' => '',
          'prix' => '',
          'dispo' => '',
          'reduction' => '',
          'lienaff' => '',
         ), $atts));
         
         
              
              return '<table width="100%" style="margin:20px 0 20px 0; border:1px dashed #d1d1d2;" border="0" cellspacing="1" cellpadding="0"><thead><tr>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE; font-size:14px; padding:10px 5px"><span><strong>Marchands</strong></span></td>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE;font-size:14px; padding:10px 5px"><span><strong>Prix & Dispo</strong></span></td>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE;font-size:14px; padding:10px 5px"><span><strong>Réduction</strong></span></td>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE;font-size:14px; padding:10px 5px"><span><strong>Lien</strong></span></td>
</tr>
</thead>
<tbody>
<tr>
<td width="20%" style="vertical-align:top; border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px; padding:5px 5px"><img src="'.$logo.'" style="margin:auto; max-height:50px; max-width:120px;"/></td>
<td width="30%" style="border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px; vertical-align:middle">'.$prix.'<br/><span style="font-size:11px; font-style:italic">'.$dispo.'</span></td>
<td width="24%" style="border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px; vertical-align:middle">'.$reduction.'<br/></td>
<td width="25%" style="border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px;  vertical-align:middle"><a style="color:#fff; text-decoration:none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width:70px; margin:0 auto; background:#F9A41E;display:block; padding:4px 0px;" target="_blank" href="'.$lienaff.'">Acheter</a></td>
</tr>
</tbody>
</table>';
  }
 }
?>


Merci par avance pour votre aide
En effet, mélange comme ça html et php ne se fait plus trop pour des questions de lisibilité. Après je connais pas du tout wordpress, mais je suis persuadé qu'on peut faire les choses plus proprement.

Bref, à vue de nez et sans connaitre du tout la fonction shortcode_atts, je proposerais bien ça :

<?php
class myTinyMceButton_Client {
	function __construct() {
		add_shortcode( 'my-listing' , array( &$this, 'shortcode' ) );
	}

	function shortcode( $atts, $content = null ) {
		extract(shortcode_atts(array(
          'logo' => '',
          'prix' => '',
          'dispo' => '',
          'reduction' => '',
          'lienaff' => '',
        ), $atts));


        if (!empty($logo) && !empty($prix) && !empty($dispo)){
            $tbody = '<tr>
<td width="20%" style="vertical-align:top; border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px; padding:5px 5px"><img src="'.$logo.'" style="margin:auto; max-height:50px; max-width:120px;"/></td>
<td width="30%" style="border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px; vertical-align:middle">'.$prix.'<br/><span style="font-size:11px; font-style:italic">'.$dispo.'</span></td>
<td width="24%" style="border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px; vertical-align:middle">'.$reduction.'<br/></td>
<td width="25%" style="border-collapse:collapse; border:1px solid #ECECEE;
text-align:center; background:#fff; font-size:14px;  vertical-align:middle"><a style="color:#fff; text-decoration:none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width:70px; margin:0 auto; background:#F9A41E;display:block; padding:4px 0px;" target="_blank" href="'.$lienaff.'">Acheter</a></td>
</tr>';
        } else {
            $tbody = "";
        }

        return '<table width="100%" style="margin:20px 0 20px 0; border:1px dashed #d1d1d2;" border="0" cellspacing="1" cellpadding="0"><thead><tr>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE; font-size:14px; padding:10px 5px"><span><strong>Marchands</strong></span></td>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE;font-size:14px; padding:10px 5px"><span><strong>Prix & Dispo</strong></span></td>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE;font-size:14px; padding:10px 5px"><span><strong>Réduction</strong></span></td>
<td style="border-collapse:collapse; text-align:center;border:1px solid #fff; background:#ECECEE;font-size:14px; padding:10px 5px"><span><strong>Lien</strong></span></td>
</tr>
</thead>
<tbody>'.$tbody.'</tbody>
</table>';
    }
}


Je ne sais pas si ça fonctionne, mais ça ne doit pas être très loin Smiley cligne

Bon courage !
Modifié par BlueScreenJunky (27 Jan 2013 - 21:06)