2010-06-28 6 views
0

Question par un novice, ici:Comment ajouter une simple instruction IF dans ce fichier PHP?

J'ai une forme simple retournant le nom d'une personne, la compagnie, et l'adresse entre d'autres choses.

À l'heure actuelle, ils sont renvoyés sur des lignes distinctes. S'il n'y a pas d'entrée dans le champ "société", il y a une ligne vide dans l'email envoyé.

Je voudrais faire une déclaration IF de sorte que s'il n'y a pas d'entrée dans le champ "company", cette "adresse" reviendra juste après "name" sans espace supplémentaire, mais inclura la "société "info si ce champ est renseigné.

La partie pertinente du code PHP ressemble à ceci:

$name = $_POST['name']; 
$company = $_POST['company']; 
$address = $_POST['address']; 
$city = $_POST['city']; 
$state = $_POST['state']; 
$zip = $_POST['zip']; 
$email = $_POST['email']; 
$optin = $_POST['optin']; 
$comments = ($_POST['comments']); 



$body = <<<EOD 

Please send samples to: 

$name 
$company 
$address 
$city, $state $zip 

Email: $email 

Opt-In to occasional email list?: $optin 

Comments: $comments 

EOD; 
$headers = "From: $email\r\n"; 
$success = mail($webMaster, $emailSubject, $body, 
$headers); 

je vais vraiment apprécier votre aide!

Répondre

0

J'ai effectué cette option pour utiliser \n au lieu de <br />

$optin = $_POST['optin']; 
$comments = ($_POST['comments']); 



$body = "Please send samples to:"; 
if($_POST['name'] != '') $body .= "\n".$_POST['name']; 
if($_POST['company'] != '') $body .= "\n".$_POST['company']; 
if($_POST['address'] != '') $body .= "\n".$_POST['address']; 
if($_POST['city'] != '') $body .= "\n".$_POST['city']; 
if($_POST['state'] != '') $body .= ", ".$_POST['state']; 
if($_POST['zip'] != '') $body .= " ".$_POST['zip']; 
if($_POST['email'] != '') $body .= "\n\nEmail: ".$_POST['email']; 
$body .= "Opt-In to occasional email list?: $optin"; 
$body .= "\n\nComments: $comments"; 


$headers = "From: $email\r\n"; 
$success = mail($webMaster, $emailSubject, $body, 
$headers); 
+0

vous aurez envie d'utiliser « \ n » s au lieu de "
" s: son script utilise des retours chariot pas des sauts de ligne HTML – Mala

+0

Il ne semble pas vouloir de ruptures HTML. – middus

+0

"\ n" s ça sonne bien! J'avais du HTML, mais on en a parlé plus tôt aujourd'hui. Je vous remercie! – JustBobF

0

Qu'en est-ce?

$name = $_POST['name']; 
//... 

if(empty($company)){ 
    $nameAndCompany = $name; 
}else{ 
    $nameAndCompany = $name."\n".$company; 
} 
// or using the ternary operator, because it's a rather simple if 
$nameAndCompany = (empty($company))?$name:$name."\n".$company; 
$body = <<<EOD 
... 

$nameAndCompany 
$address 
$city, $state $zip 
... 

\ n entre doubles guillemets signifie newline. Voir la documentation de php.net pour plus d'informations sur le ternary operator.

+0

Cela a l'air génial. En les essayant maintenant. Merci beaucoup! – JustBobF

+0

l'astuce array_filter est toujours la solution la plus propre (non IF ...) –

+0

Je suis content d'avoir pu aider. @Yanick: Pourquoi un "IF" n'est-il pas propre? – middus

0

Vous utilisez la syntaxe heredoc dans votre script PHP. Vous ne pouvez pas utiliser les instructions IF ici. Mais vous pouvez utiliser d'autres méthodes:

  • fermer votre balise PHP et utiliser < = $ var> dans votre code
  • modèles d'utilisation et remplacer des mots-clés avec preg_replace(), etc.
  • mis tout? vos chaînes dans un implode de tableau et de l'utilisation (« \ n », $ arr) pour construire une chaîne belle sur ce
  • concaténer votre chaîne directement

la façon la plus simple est le premier (Edited avec array_filter de une autre réponse):

$name = $_POST['name']; 
$company = $_POST['company']; 
$address = $_POST['address']; 
$city = $_POST['city']; 
$state = $_POST['state']; 
$zip = $_POST['zip']; 
$email = $_POST['email']; 
$optin = $_POST['optin']; 
$comments = ($_POST['comments']); 



ob_start(); 
?> 
Please send samples to: 

<?= implode("\n", array_filter($name, $company, $address)) ?> 
<?= $city ?>, <?= $state ?> <?= $zip ?> 

Email: <?= $email ?> 

Opt-In to occasional email list?: <?= $optin ?> 

Comments: <?= $comments ?> 

?> 
$body = ob_get_clean(); // return the output since ob_start() 

$headers = "From: $email\r\n"; 
$success = mail($webMaster, $emailSubject, $body, $headers); 
+0

En fait, l'OP utilise déjà un type de template: une chaîne heredoc. Je dirais que l'utilisation du tampon de sortie est un moyen plutôt original de réaliser ce que le PO veut faire. J'aime la façon dont vous avez suggéré, cependant. – middus

+0

oui, j'utilise des tableaux personnellement. Assez utile quand vous avez de nombreux IF intégrés et que vous avez besoin de construire une sortie avec eux ... –

+0

Mais, j'ai essayé les instructions IF et elles ont fonctionné. Les deux solutions de Middus ont fonctionné. Merci à tous pour votre aide !!!!! – JustBobF

2

Vous devez sortir de heredoc pour cela, ou préparer la valeur à l'avance, mais c'est agréable et courte:

echo join("\n", array_filter(array($name, $company, $address))); 
Questions connexes