$_GET no muestra datos en el cuadro de texto con espacio entre palabra en url

Tengo una pagina index.php y estoy obteniendo los valores de url para una palabra.

<a href="index.php?skills=software engineer">Software Job</a>

En el código a continuación, muestra el valor completo de $_GET, pero no se muestra en el cuadro de texto

y la URL es

http://localhost/mysite/index.php?skills=software%20engineer


<?php

    if (isset($_GET['skills']) and !empty($_GET['skills'])) {
        $is_skill = 1;  // true and has value
        $skill_data = $_GET['skills'];
        echo "The searched skills : " . $skill_data; // Here its displaying full values
    } else {
        $is_skill = 0;  // false and has no value
    }

?>



<input type="text" name="textbo1" <?php if ($is_skill == 1) { echo "value=" . $skill_data; } ?> />

Ahora, en el cuadro de texto, no muestra el valor completo, es decir software engineer donde como en la salida del código php es

The searched skills : software engineer

y valor en el cuadro de texto: software

No sé cuál es el problema, necesito ayuda sobre por qué no acepta

preguntado el 22 de mayo de 12 a las 10:05

reemplace echo "valor" . $habilidad_datos; con echo '"value='.$skill_data.'"'; -

4 Respuestas

Los valores de atributo con espacios en ellos se deben citar.

value=software engineer

… se analiza como "Un atributo de valor con el valor 'software' y 'Un atributo de ingeniero'

También es vulnerable a un ataque XSS y su URL no es válida.

Código corregido:

<a href="index.php?skills=software%20engineer">Software Job</a>

y

<input type="text" name="textbo1" <?php 
    if ($is_skill == 1) { 
        echo 'value="' . htmlspecialchars($skill_data) . '"'; 
    } 
?> />

Tenga en cuenta que necesita hacer todos los instancias de datos externos seguros para HTML con htmlspecialchars, no solo el que arreglé en este ejemplo.

contestado el 22 de mayo de 12 a las 10:05

<input type="text" name="textbo1" value="<?php if ($is_skill == 1) { echo $skill_data; } ?>" />

Su marcado html no es correcto. Tienes que encerrar tu valor entre comillas. Si $is_skill es 0, no habrá ningún valor en el campo de texto.

contestado el 22 de mayo de 12 a las 10:05

El valor de su atributo debe estar entre comillas. Use barras adicionales para escapar y comillas dobles en la cadena misma.

Prueba esto:

<?php if ($is_skill == 1) { echo 'value="' . addslashes($skill_data) . '"'; } ?>

contestado el 22 de mayo de 12 a las 10:05

Necesitas cotización

<input type="text" name="textbo1" <?php if ($is_skill == 1) { echo "value=\"" . $skill_data . "\""; } ?> />

contestado el 22 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.