2008-11-25 6 views
0

Je suis en train de développer une application et je veux afficher un formulaire qui sera rempli si vous éditez le formulaire, mais ce ne sera pas le cas si le formulaire sera une nouvelle entrée. Je crois que la façon la moins verbeuse de faire ceci est d'avoir une seule forme et de supprimer toutes les erreurs pour faire écho à mes variables afin que rien ne soit imprimé si c'est une nouvelle forme (puisque les variables n'existeront pas si c'est une nouvelle forme) . Par exemple:Quelle est la meilleure pratique pour sortir une variable qui peut contenir ou non quelque chose en PHP?

<?php 
if (! $new_item) { 
    $variable = 'Example'; 
} 
?> 
<form> 
    <input type="text" name="inputbox" value="<?php echo @$variable; ?>" /> 
</form> 

Est-ce une bonne pratique, ou existe-t-il une meilleure façon de le faire? Dois-je créer des vues séparées pour les nouveaux éléments et pour les éléments à modifier? Quelles sont les répercussions sur les performances de faire cela?

Répondre

1

Je pense que la meilleure façon est de toujours définir la variable

if (! $new_item) { 
    $variable = 'Example'; 
} else { 
    $variable = 'Default value'; 
    //or 
    $variable = ''; 
} 

Utilisation de la suppression d'erreur @ est lente.

modifier Notez que lorsque vous imprimez la variable dans l'attribut de valeur d'entrée, vous devez d'abord appeler htmlentities() ou htmlspecialchars() là-dessus.

2ème édition

Vous dites dans votre commentaire, vous récupérez les données que sur l'objet, dans ce cas, vous pouvez également faire:

class example { 
    public $somefield = 'default value'; 
} 

Ensuite, si elle est un enregistrement existant que vous êtes l'édition faire quelque chose comme ça, ce qui provoque l'objet retourné pour être une instance de « exemple »:

$record = mysql_fetch_object($result, 'example'); 

ou si elle est une nouvelle reco e instancier vous:

$record = new example(); 

Alors, vous savez toujours $record->somefield sera réglé et que vous pouvez faire:

<form> 
    <input type="text" name="somefield" value="<?php echo htmlspecialchars($record->somefield); ?>" /> 
</form> 
+0

ok , bien évidemment, il serait simple de faire cela avec l'exemple, mais mon cas actuel est un peu plus compliqué - je reçois un objet de la base de données s o Je devrais définir chaque membre de l'objet. –

+0

pourquoi ne pas définir l'objet avec des valeurs par défaut alors? et puis les écraser avec des données de la DB s'il y en a? – benlumley

+0

J'utilise CodeIgniter et je ne sais pas s'ils ont un moyen de récupérer un résultat dans mon propre objet personnalisé. Je suppose que je pourrais le faire manuellement, cependant. –

2

i ont tendance à utiliser:

$variable = (isset($new_item) && $new_item) ? 'Example' : 'Default Value'; 

Overkill vraiment, mais je pense aller tout droit! $ new_item renvoie un avis s'il n'est pas défini. Vous pouvez également changer la seconde clause pour! Empty ($ new_item) en fonction du comportement que vous voulez.

4

Vous pouvez utiliser

<?php echo ((isset($value) && $value != '') ? $value : 'Default'); ?> 

Une solution propre à ce problème est de créer une fonction d'assistance qui fait cela pour vous:

function useDefault($value, $default = '') 
{ 
    if (isset($value) && $value != '') 
    { 
     return $value; 
    } 
    else 
    { 
     return $default; 
    } 
} 

Vous pouvez ensuite utiliser

<?php echo useDefault($value, 'default value'); ?> 
+0

Vous devez obtenir $ value par référence, donc il doit être fonction useDefault (& $ value, $ default = '') –

Questions connexes