2011-05-16 53 views
6

tengo un formulario de envío php y un conjunto de entradas:HTML/PHP - valor de entrada por defecto

  1. Su nombre
  2. Su apellido
  3. mi nombre

Cada miradas de entrada lo mismo, solo cambian los nombres:

<input type="text" name="your_name" value="<?php echo get_option('your_name'); ?>" /> 

Cómo establecer el valor predeterminado t valores cuando value = no está disponible?

[editar]

Ok, por lo que, normalmente me gustaría hacer algo como:

<input type="text" name="your_name" value="Mike" /> 

Pero en este caso tengo un script PHP que obtiene datos de entradas y lo muestra usando value="<?php echo get_option('your_name'); ?>". Así que no tengo idea de cómo forzar mi formulario para mostrar "Mike" en mi entrada.

+4

No entiendo bajo qué circunstancias 'value =' would ** not ** estaría disponible. ¿Puedes aclarar * por qué * podría no estar disponible? –

+0

@David Thomas, actualizó la pregunta. – Wordpressor

+0

¡Recuerde también escapar de los personajes especiales! http://stackoverflow.com/questions/6249151/how-to-properly-escape-html-form-input-default-values-in-php – Tel

Respuesta

5

Es necesario comprobar el retorno de get_option primero, y algo sustituto si un defecto no está disponible

<?php 
    $default = get_option('your_name'); 
    if($default == "") 
    { 
     $default = <whatever your default value is>; 
    } 
?> 
<input type="text" name="your_name" value="<?php echo $default; ?>" /> 

Cambio get_option para devolver una cadena vacía (o algo más) si el defecto no está disponible.

+0

Puede usar mi pequeña biblioteca [ValueResolver] (https://github.com/LapaLabs/ValueResolver) para hacerlo más simplemente –

0

Puede hacer una declaración de cambio y tener el valor predeterminado para ser lo que quiera que sea.

-2

Establezca una variable al inicio con las variables de publicación.

como

$name_val = ""; 
if(isset($_POST["your_name"]) 
{ 
    $name_val = $_POST["your_name"]; 
} 

<input type="text" name="your_name" value="<?= $name_val?>"> 
+3

Hay un gran agujero XSS en eso. – Quentin

+0

Y, para no ser ridículamente quisquilloso, una línea no terminada de php en el atributo 'value'. –

+0

@David Thomas, ¿qué quiere decir con línea no terminada? –

0

Desde value es el valor por defecto, basta con añadir una condición alrededor de su get_option -función, tal vez algo como esto:

<input type="text" name="your_name" value="<?php $var = get_option('your_name'); if ($var == '') $var = 'your_default'; echo $var; ?>" /> 
+1

no es la mejor práctica escribir toda la lógica dentro del html :) – Teneff

+1

Muy cierto, pero solo estaba demostrando los medios para llegar allí. Se debe suponer una separación estructurada del código php y HTML. – Bjoern

2

Puede cambiar la función get_option() a ser algo así como

function get_option($name) { 
    $defaults = array(
     'fist_name' => 'Mike', 
     'fist_name' => 'Wordpressor', 
     'my_name' => 'Dunno' 
    ); 
    // get the value from the $defaults array 
    $val = $defaults[$name]; 

    // but if the same value has already been posted - replace the default one 
    if (isset($_POST[$name])) { 
     $val = $_POST[$name]; 
    } 
    return $val; 
} 
0

Estoy de acuerdo ingenio h Teneff, pero yo lo rompería.

En el index.php que tendría la siguiente en la parte superior del documento

<? 
$defaultText = include 'default_text.php'; 
?> 

donde sus formas son sería:

<form method="post" action=""> 
<input id="names"><? echo $defaultText; ?> </input> 
</form> 

entonces tendría un archivo separado en el nivel raíz llamado "default_text.php"."

<? 
$Name = <<<EOD Name EOD; 
return $Name; 
?> 
0
<input type="text" name="your_name" value="<?php echo empty(get_option('your_name')) ? "TheDefaultValue" : get_option('your_name'); ?>" /> 
0

usted podría utilizar mi pequeña biblioteca ValueResolver en este caso, por ejemplo:

$default = ValueResolver::resolve(get_option('your_name'), '<whatever your default value is>'); 

y no se olvide de utilizar espacio de nombres use LapaLabs\ValueResolver\Resolver\ValueResolver;

También hay posibilidad de encasillado, por ejemplo, si el valor de su variable debe ser integer, utilice esto:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6 
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value) 

Comprobar la docs para más ejemplos

0

Éste es cómo resuelto este problema en mi problema que creo que es similar, cuando $ _POST es leer el valor se rellena a partir del valor de $ _POST otra establece un valor predeterminado de Mike

value="<?php if (isset($_POST['name'])) echo $_POST['name']; else echo "Mike"?>" > 

Espero que esto ayude a alguien oNEDAY

0

utilizar simplemente un operador ternario. es bastante fácil probar esto

$default = 'Mike'; 

$your_name = get_option('your_name'); 

$condition = !empty($your_name) ? $your_name : $default; 

<input type="text" name="your_name" value="<?php echo $condition; ?>" /> 
Cuestiones relacionadas