Array en select solo me muestra el primer dato (php)

Muy buenas, llevo varias horas y no se donde estoy fallando.

El codigo del select:

<form action="pruebadospalabras.php" method="POST" enctype="multipart/form-data">
<label for="sistema">Seleccionar desarrolladora</label></br>
<?php
include 'conexion.php';


echo '<select name="status2[]">';

$desarrolladora=$_POST["status2"];
      //CONSULTA
      

      $sqldesarrolladora="Select * From datos_desarrollador order by nombre";
      $resultdesa=mysqli_query($con, $sqldesarrolladora);
      //Mostramos los registros en forma de menú desplegable
      
      while ($row = mysqli_fetch_array($resultdesa))
      
      {
         
         $nombre= $row['nombre'];
         
         echo "<option value=".$nombre.">".$row['nombre']."";
      }
      
      echo '</select>';?></br></br>
      
<input type="submit"  value="enviar"/>
      
</form>


El codigo para mostrar el resultado:

<?php



for ($i=0;$i<count($desarrolladora);$i++)
{
   echo "<br> Desarrolladora " . $i . ": " . $desarrolladora[$i];
   
}

?>


El problema es que, en una desarrolladora como por ejemplo Naughty Dog, solo me muestra Naughty, es decir la primera palabra.

Entiendo que el problema está en el echo "<option value=".$nombre.">".$row['nombre']."";, lo que no entiendo es por qué si que me muestra las dos palabras en el combobox, pero luego al seleccionarla solo me muestra la primera... He probado varias cosas y nada, no doy con ello. Si alguien sabe la solución le estaré eternamente agradecido.

Un saludo!!
Primero te recomendaría no meter todo ese trozaco de PHP dentro de la etiqueta <select>. Lo más limpio es hacer la petición a la DB antes y luego usas los datos donde los necesites.

while ($row = mysqli_fetch_array($resultdesa))
     
      {
         
         $nombre= $row['nombre'];
         
         echo "<option value=".$nombre.">".$row['nombre']."";
      }
     


Ahí estás cometiendo dos errores. El primero es que al hacer value=".$nombre.">, estás cerrando las comillas del echo para concatenar una cadena, pero dicha cadena debe tener sus comillas, es decir, cuando tú lo escribes en HTML plano es así value="nombre" y lo tuyo imprimiría value=nombre. Además las cadenas que tienen comillas dobles aceptan variables, por lo que podría quedar así: echo "<option value='$nombre'>". Date cuenta que ahí he añadido unas comillas simples para el value. También lo podrías hacer con comillas dobles escapadas echo "<option value=\"$nombre\">". En estos casos se suele recomendar meter la variable entre llaves así evitas algunos problemas y te admite también sacar valores de arrays tipo echo "Nombre: {$row['nombre']}";

El segundo error que veo es que no estás cerrando la etiqueta option.

echo "<option value='{$nombre}'>{$nombre}</option>";
Alecs7k escribió:Primero te recomendaría no meter todo ese trozaco de PHP dentro de la etiqueta <select>. Lo más limpio es hacer la petición a la DB antes y luego usas los datos donde los necesites.

while ($row = mysqli_fetch_array($resultdesa))
     
      {
         
         $nombre= $row['nombre'];
         
         echo "<option value=".$nombre.">".$row['nombre']."";
      }
     


Ahí estás cometiendo dos errores. El primero es que al hacer value=".$nombre.">, estás cerrando las comillas del echo para concatenar una cadena, pero dicha cadena debe tener sus comillas, es decir, cuando tú lo escribes en HTML plano es así value="nombre" y lo tuyo imprimiría value=nombre. Además las cadenas que tienen comillas dobles aceptan variables, por lo que podría quedar así: echo "<option value='$nombre'>". Date cuenta que ahí he añadido unas comillas simples para el value. También lo podrías hacer con comillas dobles escapadas echo "<option value=\"$nombre\">". En estos casos se suele recomendar meter la variable entre llaves así evitas algunos problemas y te admite también sacar valores de arrays tipo echo "Nombre: {$row['nombre']}";

El segundo error que veo es que no estás cerrando la etiqueta option.

echo "<option value='{$nombre}'>{$nombre}</option>";



MUCHÍSIMAS GRACIAS. Eran las comillas, tantas horas para un error tan tonto. A partir de ahora haré caso a todo lo que me has dicho, de verdad que me has servido de gran ayuda. De nuevo, mil gracias amigo.
2 respuestas