¿Hay alguna forma de pasar el valor de una variable al value de un input mediante PHP?

publicado por: Anonymous

Buenas, tal y como muestra la pregunta, quería saber si es posible solo con PHP ya que veo ejemplos pero lo hacen con JavaScript. Les agradecería su pudieran poner un ejemplo para tomarlo como referencia.

    <?PHP
        if(isset($_POST['enviar'])){
            $nombre = $_POST['nombre'];
            $apellidos = $_POST['apellidos'];
            $edad = $_POST['edad'];
            $provincia = $_POST['provincias'];
            $dni = $_POST['dni'];
            $sexo = $_POST['sexo'];
            $cp = 0;

            switch($provincia){
                case "Palencia":   $cp = 1010;
                      break;

                case "Valladolid": $cp = 1020;
                      break;

                case "Salamanca": $cp = 1030;
                      break;

                case "Burgos": $cp = 1040;
                      break;

                case "Avila": $cp = 1050;
                      break;

                case "Soria": $cp = 1060;
                      break;

                case "Segovia": $cp = 1070;
                      break;

                case "Zamora": $cp = 1080;
                      break;       
            }
       }
    ?>

  <form action="<?PHP echo $_SERVER['PHP_SELF']?>" method="post">
       <div>
            <label for="nombre">Nombre</label>
            <input type="text" name="nombre" size="15"><br/><br/>
            <label for="apellido">Apellidos</label>
            <input type="text" name="apellido" size="25"/><br/><br/>
            <label for="edad">Edad</label>
            <input type="text" name="edad" size="4"/><br/><br/>
            <label for="proincias">Pais</label>
            <select id="" name="provincias">
                <option value = "Palencia">Palencia</option>
                <option value = "Valladolid">Valladolid</option>
                <option value = "Salamanca">Salamanca</option>
                <option value = "Burgos">Burgos</option>
                <option value = "Avila">Avila</option>
                <option value = "Soria">Soria</option>
                <option value = "Segovia">Segovia</option>
                <option value = "Zamora">Zamora</option>
            </select><br/><br/>
            <label for="cp">CP</label>
            <input type="text" name="cp" value="<?PHP ?>" size="10" disabled /><br/><br/>
            <label for="dni">DNI</label>
            <input type="text" name="dni" size="10"/><br/><br/>
            <input type="radio"  id="" name="sexo" value="hombre" />Hombre
        <input type="radio" name="sexo" value="mujer" />Mujer<br/><br/>
        <input type="submit" name="enviar"/>
        </div>
    </form> 
</body>

Lo que intento es que según valla seleccionando cada provincia me muestre el codigo de provincia pero establecido en un input en la que le llamo CP (Código Postal). Ahí en el value lo estaba intentando pero lo deje a media XD

solución

El código que necesitas es el siguiente:

<input type="text" name="cp"
  value="<?= isset($cp)?htmlspecialchars($cp):'' ?>"
  size="10" disabled />
<br/><br/>

Fíjate en el uso de htmlspecialchars para que los caracteres especiales de HTML como las comillas (“) se conviertan en entidades HTML como &quote; y así no te rompa la etiqueta HTML ni sufras ataques XSS.

Aunque el valor de $cp está acotado y lo tienes controlado, siempre es buena práctica usar dicha función para que en caso de que cambies el código o la forma en la que calculas el código postal no abras un agujero en la seguridad de tu página.

Además, he hecho uso de isset para evitar un mensaje de advertencia diciendo que la variable no está definida cuando la página se carga antes de enviar el formulario y definirse el valor de ésta.

El operador ternario ?: (isset($cp)?htmlspecialchars($cp):'') se usa para evitar un bloque if comprobando si existe $cp y si lo está muestra su contenido y en caso contrario mostrará una cadena vacía (o lo que tú quieras, simplemente debes cambiar el '' por cualquier otra cosa como '00000', por ejemplo).

Si no quieres que el usuario sepa qué valor tiene ese campo puedes ocultarlo de la siguiente manera:

<input type="hidden" name="cp"
  value="<?= isset($cp)?htmlspecialchars($cp):'' ?>"
  size="10" disabled />
<br/><br/>

El código completo queda:

<?php
    if(isset($_POST['enviar'])){
        $nombre = $_POST['nombre'];
        $apellidos = $_POST['apellidos'];
        $edad = $_POST['edad'];
        $provincia = $_POST['provincias'];
        $dni = $_POST['dni'];
        $sexo = $_POST['sexo'];
        $cp = 0;

        switch($provincia){
            case "Palencia":   $cp = 1010;
                  break;

            case "Valladolid": $cp = 1020;
                  break;

            case "Salamanca": $cp = 1030;
                  break;

            case "Burgos": $cp = 1040;
                  break;

            case "Avila": $cp = 1050;
                  break;

            case "Soria": $cp = 1060;
                  break;

            case "Segovia": $cp = 1070;
                  break;

            case "Zamora": $cp = 1080;
                  break;       
        }
   }
?>

<form action="<?PHP echo $_SERVER['PHP_SELF']?>" method="post">
   <div>
        <label for="nombre">Nombre</label>
        <input type="text" name="nombre" size="15"><br/><br/>
        <label for="apellido">Apellidos</label>
        <input type="text" name="apellido" size="25"/><br/><br/>
        <label for="edad">Edad</label>
        <input type="text" name="edad" size="4"/><br/><br/>
        <label for="proincias">Pais</label>
        <select id="" name="provincias">
            <option value="Palencia">Palencia</option>
            <option value="Valladolid">Valladolid</option>
            <option value="Salamanca">Salamanca</option>
            <option value="Burgos">Burgos</option>
            <option value="Avila">Avila</option>
            <option value="Soria">Soria</option>
            <option value="Segovia">Segovia</option>
            <option value="Zamora">Zamora</option>
        </select><br/><br/>
        <label for="cp">CP</label>
        <input type="text" name="cp"
          value="<?= isset($cp)?htmlspecialchars($cp):'' ?>"
          size="10" disabled />
        <br/><br/>
        <label for="dni">DNI</label>
        <input type="text" name="dni" size="10"/><br/><br/>
        <input type="radio"  id="" name="sexo" value="hombre" />Hombre
    <input type="radio" name="sexo" value="mujer" />Mujer<br/><br/>
    <input type="submit" name="enviar"/>
    </div>
</form> 
</body>
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *