Foros del Web » Programando para Internet » PHP »

Código -trasteando menú lista-

Estas en el tema de Código -trasteando menú lista- en el foro de PHP en Foros del Web. Hola, le llevo dando vueltas varios días pero no veo donde cometo el error. La primera parte (la función que hace la consulta a la ...
  #1 (permalink)  
Antiguo 04/10/2004, 10:27
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 21 años
Puntos: 0
Pregunta Código -trasteando menú lista-

Hola, le llevo dando vueltas varios días pero no veo donde cometo el error. La primera parte (la función que hace la consulta a la base de datos) funciona correctamente, luego me muestra el resultado de dicha función dentro del menú (apareciendo los diferentes predecesores correctamente), donde estoy "atascado" es en dos puntos:

1) Una vez me muestra los predecesores dentro del menú, no me aparece seleccionado por defecto el que se supone que debemos poder modificar.
Brrrr... intento explicarme mejor! si quiero modificar un producto cuyo predecesor es "blanco" al darle al botón modificar me deberían de salir dentro del menú blanco, azul, amarillo (y los que haya) y quiero que por defecto salga seleccionado "blanco" ya que es el que hay antes de modificarlo por otro


b) No puedo pasar el parámetro seleccionado a través de menú con el formulario a otro script. Ahora mismo cuando selecciono una opción del menú y le doy al formulario simplemente no me da ningún error pero me lo deja como estaba "no pasando" el valor seleccionado.

Os pego el código a ver que os parece:

Código PHP:
<?php 
// Listamos todos los "predecesores" introducidos en la BD
function minilista_categorias($orden) {
  
open();
  if (!isset(
$orden)) $orden='predecesor';
  
$query "SELECT DISTINCT predecesor FROM categorias ORDER BY $orden";
   
$result mysql_query($query) or die(mysql_error());
  while(
$categ mysql_fetch_array($result)) {
    
$categs[]=$categ;
  }
  return 
$categs;
}
?>
A continuación quiero que aparezca los valores de la minilista dentro del menú, y que el usuario tras seleccionar el que quiera pase dicho valor.

Código PHP:
<form action=cat_res.php method=POST>
<input type=hidden name=p_id value="<?=$categ['id']?>">
<table align=center bgcolor="#CCCCCC" cellpadding="10">
        <td>Categor&iacute;a a la que pertenece</td>
    <td align=left><? minilista_categorias($orden);
     
$categs=minilista_categorias($_GET['p_predecesor']);
?>
      <select name="p_predecesor">
        <? foreach($categs as $categ) { ?>
        <option value="predecesor">
        <?=$categ['predecesor']?>
        <? }?>
        </option>
      </select>    
      <td>&nbsp;</td>
  </tr>
  <tr>
    <td>
    <input type=submit name=p_borrar value="Borrar" onclick="return confirm('Estas segur@o?')">
    </td>
    <td align=left>
    <input type=submit name=p_ok value="Enviar datos">
    </td>
  </tr>
</table>
</form>
Por último os adjunto el fichero cat_res.php por si sirve de más ayuda:

Código PHP:
<?
require 'auth.php';
require 
'fnc_categ.php';

comprueba_autenticacion();

// Borramos o guardamos la categoria, segun el boton que hemos pulsado

if (isset($_POST['p_borrar'])) {
  
borra_categoria($_POST['p_id']);
} else {
  
guarda_categoria($_POST['p_id'],$_POST['p_nombre'],$_POST['p_descripcion'],$_POST['p_fecha'],$_POST['p_predecesor']);
}

// Y saltamos otra vez a la lista

header('Location: lista_admin.php');
?>

Última edición por neofito; 04/10/2004 a las 10:36
  #2 (permalink)  
Antiguo 04/10/2004, 10:51
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Todo esta en
Código PHP:
<select name="p_predecesor">
        <? foreach($categs as $categ) { ?>
        <option value="predecesor">
        <?=$categ['predecesor']?>
        <? }?>
        </option>
      </select>
Primera cosa, esta mal. Con ese codigo creas un select con x opciones, pero todas con el mismo valor: la cadena 'predecesor'. En el value del option tiene que ir el valor que quieres pasar cuando esa opcion sea seleccionada. Tal como tienes ahora siempre pasa la cadena 'predecesor'.

Segundo, la seleccion de un option de un select es simple HTML. Solo tienes que generar el atributo selected en el option que quieres seleccionar. Dentro del foreach, haces un if que compruebe si el elemento a mostrar tiene que estar o no seleccionado. Y en caso de tener que estar seleccionado, sacar el HTML correspondiente.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 04/10/2004, 11:21
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 21 años
Puntos: 0
Hola Josemi, he entendido la primera parte pero no la segunda ¿?

Te pego la modificación hecha me falta sólo la segunda parte que me comentas (lo del if) que no lo entiendo.
Código PHP:
      <select name="p_predecesor">
        <? foreach($categs as $categ) { ?>
        <option value="<?=$categ['predecesor']?>">
        <?=$categ['predecesor']?>
        <? }?>
        <option selected>???????</option>
        </option>
      </select> 
      <td>&nbsp;</td>
Cita:
Solo tienes que generar el atributo selected en el option que quieres seleccionar. Dentro del foreach, haces un if que compruebe si el elemento a mostrar tiene que estar o no seleccionado. Y en caso de tener que estar seleccionado, sacar el HTML correspondiente.
  #4 (permalink)  
Antiguo 04/10/2004, 11:44
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 21 años, 1 mes
Puntos: 1
Solo quiero comentar una cosa que he visto que creo está mal, no?:
Código:
<select name="p_predecesor">
        <? foreach($categs as $categ) { ?>
        <option value="<?=$categ['predecesor']?>">
        <?=$categ['predecesor']?>
        <? }?>
        <option selected>???????</option>
        </option>
      </select>
Ummm, abres en un bucle una tag "<option>" y solo lo cierras una vez (ya fuera del bucle), además de meterle dentro otra opction:
Código:
        <option value="<?=$categ['predecesor']?>">
        <?=$categ['predecesor']?>
        <? }?>
        <option selected>???????</option>
        </option>
Esto debería ser así:
Código:
        <option value="<?=$categ['predecesor']?>">
        <?=$categ['predecesor']?></option>
        <?
        } // Y aquí cierras el bucle
        ?>
        <option selected>???????</option>
Un saludo.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 04/10/2004 a las 11:46
  #5 (permalink)  
Antiguo 04/10/2004, 12:01
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 21 años
Puntos: 0
Es cierto Covids0020, ya lo he arreglado pero me sigue sin funcionar al pasar la opción del menú me da diferentes errores según la opción que selecciono:

- Unknown column 'blanco' in 'field list'
- You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'azul where id=11' at line 1


Código PHP:
<select name="p_predecesor">
        <? foreach($categs as $categ) { ?>
        <option value="<?=$categ['predecesor']?>">
        <?=$categ['predecesor']?></option>
        <? }?>
        <option selected>???????</option>
              </select>

Última edición por neofito; 04/10/2004 a las 12:02
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:18.