Foros del Web » Programando para Internet » PHP »

Problema con <select> al recargar página

Estas en el tema de Problema con <select> al recargar página en el foro de PHP en Foros del Web. Hola, os comento mi problema: Tengo dos campos tipo <select> que están unidos entre sí, en el primer campo se muestran marcas de coches y ...
  #1 (permalink)  
Antiguo 12/05/2008, 07:04
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Problema con <select> al recargar página

Hola, os comento mi problema:

Tengo dos campos tipo <select> que están unidos entre sí, en el primer campo se muestran marcas de coches y en el segundo los modelos asociados a cada marca de coche, pero tengo otro campo tipo texto en el que ahí pongo el nuevo modelo a editar.

El problema es que cuando elijo la marca el fomulario ejecuta la acción submit y claro da error ya que no se aceptan campos vacíos.

He estado buscando el como hacer que al elegir una opcion del select se recargue la misma página con el valor seleccionado, pero no e encontrado nada claro, todo son métodos con JS y poniendo todos los valores previamente, sin leer de la base de datos.

¿Alguna idea/solución a esto?

Aquí os dejo el código:

Código:
--
-- Estructura de tabla para la tabla `marcas`
--

CREATE TABLE `marcas` (
  `Marca` varchar(50) NOT NULL,
  PRIMARY KEY  (`Marca`),
  KEY `MarcasMarca` (`Marca`)
);

--
-- Volcar la base de datos para la tabla `marcas`
--

INSERT INTO `marcas` (`Marca`) VALUES
('Alfa Romeo'),
('Audi'),
('BMW'),
('Chevrolet'),
('Chrysler'),
('Citroën'),
('Fiat'),
('Ford'),
('Honda'),
('Hyundai'),
('IVECO'),
('Kia Motors'),
('Lancia'),
('Land Rover'),
('Mazda'),
('Mercedes Benz'),
('MG'),
('Mitsubishi'),
('Nissan'),
('Opel'),
('Peugeot'),
('Range Rover'),
('Renault'),
('Rover'),
('Saab'),
('Seat'),
('Skoda'),
('Ssangyong'),
('Suzuki'),
('TATA'),
('Toyota'),
('Volkswagen'),
('Volvo');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `modelos`
--

CREATE TABLE `modelos` (
  `Marca` varchar(50) default NULL,
  `Modelo` varchar(50) NOT NULL,
  PRIMARY KEY  (`Modelo`),
  KEY `marcasmodelos` (`Marca`),
  KEY `ModelosMarca` (`Marca`)
);

--
-- Volcar la base de datos para la tabla `modelos`
--

INSERT INTO `modelos` (`Marca`, `Modelo`) VALUES
('Alfa Romeo', '146'),
('Alfa Romeo', '147'),
('Alfa Romeo', '156'),
('Audi', 'A2'),
('Audi', 'A3'),
('Audi', 'A4'),
('Audi', 'A4 Avant'),
('Audi', 'A6'),
('BMW', '316'),
('BMW', '318'),
('BMW', '320'),
('BMW', '322'),
('BMW', '325'),
('BMW', '330'),
('BMW', '525'),
('BMW', '530'),
('BMW', '535'),
('BMW', 'X3'),
('Chevrolet', 'Kalos'),
('Chevrolet', 'Lacetti'),
('Chevrolet', 'Lanos'),
('Chevrolet', 'Matiz'),
('Chevrolet', 'Nubira'),
('Chevrolet', 'Nubira Station Wagon'),
('Chrysler', 'Cruiser'),
('Chrysler', 'Grand Voyager'),
('Chrysler', 'PT Cruiser'),
('Chrysler', 'Voyager'),
('Citroën', 'Berlingo'),
('Citroën', 'C3'),
('Citroën', 'C4'),
('Citroën', 'C5'),
('Citroën', 'Evasion'),
('Citroën', 'Jumper'),
('Citroën', 'Saxo'),
('Citroën', 'Xantia'),
('Citroën', 'Xsara'),
('Citroën', 'Xsara Picasso'),
('Fiat', 'Barchetta'),
('Fiat', 'Brava'),
('Fiat', 'Bravo'),
('Fiat', 'Punto'),
('Fiat', 'Scudo'),
('Fiat', 'Stilo'),
('Fiat', 'Ulysse'),
('Ford', 'Escort'),
('Ford', 'Fiesta'),
('Ford', 'Focus'),
('Ford', 'Focus C-Max'),
('Ford', 'Focus Wagon'),
('Ford', 'Fusión'),
('Ford', 'Ka'),
('Ford', 'Maverick'),
('Ford', 'Mondeo'),
('Ford', 'Mondeo Wagon'),
('Ford', 'Transit'),
('Honda', 'Accord'),
('Honda', 'Civic'),
('Honda', 'Civic Coupé'),
('Honda', 'HR-V'),
('Honda', 'Prelude'),
('Hyundai', 'Accent'),
('Hyundai', 'Atos'),
('Hyundai', 'Coupé'),
('Hyundai', 'Galloper Excced'),
('Hyundai', 'Lantra'),
('Hyundai', 'Santa Fé'),
('IVECO', 'Daily'),
('Kia Motors', 'Carens'),
('Kia Motors', 'Carnival'),
('Kia Motors', 'Cerato'),
('Kia Motors', 'Joice'),
('Kia Motors', 'Picanto'),
('Kia Motors', 'Rio'),
('Kia Motors', 'Sepia'),
('Kia Motors', 'Sportage'),
('Lancia', 'Lybra SW'),
('Land Rover', 'Freelander'),
('Land Rover', 'Range Rover'),
('Mazda', '323'),
('Mazda', 'MX5'),
('Mazda', 'Premacy'),
('Mazda', 'Serie 3'),
('Mazda', 'Serie 6'),
('Mazda', 'Serie 6 SW'),
('Mercedes Benz', 'Clase E-270'),
('Mercedes Benz', 'ML 270'),
('MG', 'MGF'),
('MG', 'ZR'),
('Mitsubishi', 'Galant'),
('Mitsubishi', 'Space Star'),
('Mitsubishi', 'Space Wagon'),
('Nissan', 'Almera'),
('Nissan', 'Almera Tino'),
('Nissan', 'Micra'),
('Nissan', 'Primera'),
('Nissan', 'Serena'),
('Nissan', 'Terrano II'),
('Opel', 'Agila'),
('Opel', 'Astra'),
('Opel', 'Astra Caravan'),
('Opel', 'Astra Coupé'),
('Opel', 'Calibra'),
('Opel', 'Corsa'),
('Opel', 'Corsa Combo'),
('Opel', 'Frontera'),
('Opel', 'Meriva'),
('Opel', 'Signum'),
('Opel', 'Tigra'),
('Opel', 'Vectra'),
('Opel', 'Vectra Caravan'),
('Opel', 'Zafira'),
('Peugeot', '106'),
('Peugeot', '206'),
('Peugeot', '206 CC'),
('Peugeot', '306'),
('Peugeot', '306 Break'),
('Peugeot', '306 Cabrio'),
('Peugeot', '307'),
('Peugeot', '307 Break'),
('Peugeot', '307 SW'),
('Peugeot', '406'),
('Peugeot', '407'),
('Peugeot', '607'),
('Peugeot', '806'),
('Peugeot', '807'),
('Peugeot', 'Partner'),
('Range Rover', 'Range'),
('Renault', 'Clio'),
('Renault', 'Grand Scénic'),
('Renault', 'Kangoo'),
('Renault', 'Laguna'),
('Renault', 'Laguna Grand Tour'),
('Renault', 'Laguna Ranchera'),
('Renault', 'Megane'),
('Renault', 'Megane Classic'),
('Renault', 'Megane Coupé'),
('Renault', 'Scénic'),
('Renault', 'Scénic Rx4'),
('Renault', 'Space'),
('Rover', '200'),
('Saab', '93'),
('Saab', '95'),
('Seat', 'Alhambra'),
('Seat', 'Córdoba'),
('Seat', 'Córdoba Curpa'),
('Seat', 'Córdoba SX'),
('Seat', 'Ibiza'),
('Seat', 'Ibiza Cupra'),
('Seat', 'Ibiza SX'),
('Seat', 'Inca'),
('Seat', 'León'),
('Seat', 'Toledo'),
('Skoda', 'Fabia'),
('Skoda', 'Felicia'),
('Skoda', 'Octavia'),
('Ssangyong', 'Rodius'),
('Suzuki', 'Jimmi'),
('Suzuki', 'Swift'),
('TATA', 'Safari'),
('Toyota', 'Avensis'),
('Toyota', 'Celica'),
('Toyota', 'Corolla'),
('Toyota', 'Land Cruiser'),
('Toyota', 'Yaris'),
('Volkswagen', 'Bora'),
('Volkswagen', 'Golf'),
('Volkswagen', 'Golf Cabrio'),
('Volkswagen', 'New Bettle'),
('Volkswagen', 'Passat'),
('Volkswagen', 'Passat Variant'),
('Volkswagen', 'Polo'),
('Volvo', 'S-40'),
('Volvo', 'S-60');
Código PHP:
<?php
$resultado 
mysql_query("SELECT Marca FROM marcas ORDER BY Marca ASC");
$modelo_validar $_POST["modelo"];
$marca $_POST["marca"];
if (isset(
$modelo_validar)){
    if(empty(
$modelo_validar)){ 
        echo 
"No se pueden insertar campos vacíos"
    }else{
        
$existe_modelo mysql_num_rows(mysql_query("SELECT * FROM modelos WHERE Modelo LIKE '".$modelo_validar."'"));
        if (
$existe_modelo == 0){
            
mysql_query("INSERT INTO modelos (Marca, Modelo) VALUES ('".$marca."', '".$modelo_validar."')");
            echo 
"El modelo ".$modelo_validar." se a insertado correctamente en la marca ".$marca."";
        }else{
            echo 
"El modelo ".$modelo_validar." de la marca ".$marca." ya existe";
        }
    }
}else{
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="TextoNegro">
    <tr>
        <td align="center">
            <br><br>Editar Modelo<br><br><br><br>
<?php
echo "<form action='".$_SERVER["PHP_SELF"]."?op=editar&editar=modelo' method='post' name='modelos'>";
echo 
"<select name='marca' onChange='this.form.submit()'>";
echo 
"<option value=''>Selecciona marca</option>";
echo 
"<option value=''>-------------------</option>";


$consulta_marca mysql_query("SELECT * FROM Marcas"); 

while (
$lista_marcas mysql_fetch_assoc($consulta_marca)){ 
    if (
$marca == $lista_marcas["Marca"]){ 
        echo 
"<option value='".$lista_marcas["Marca"]."' selected>".$lista_marcas["Marca"]."</option>"
    } else { 
        echo 
"<option value='".$lista_marcas["Marca"]."'>".$lista_marcas["Marca"]."</option>"
    } 

echo 
"</select> "
mysql_free_result($consulta_marca); 

echo 
"<select name='modelo'>"
if (!empty(
$marca)){ 
$consulta_modelo mysql_query("SELECT * FROM Modelos WHERE Marca='".$marca."'"); 
    if (
mysql_num_rows($consulta_modelo) != 0){
        echo 
"<option value=''>Selecciona un Modelo</option>";
        echo 
"<option value=''>-------------------</option>";
        while (
$lista_modelos mysql_fetch_assoc($consulta_modelo)){ 
            echo 
"<option value='".$lista_modelos["Modelo"]."'>".$lista_modelos["Modelo"]."</option>"
        } 
    } else { 
        echo 
"<option value=''>No hay modelos</option>"
    } 
} else { 
echo 
"<option value=''>Selecciona marca primero</option>"


mysql_free_result($consulta_modelo);

echo 
"</select><br>";
?>
            <input name="modelo" type="text">
            <input name="editar" type="submit" value="Editar">
            <input name="borrar" type="reset" value="Borrar">
            </form>
        </td>
    </tr>
</table>
<?php
}
?>
Saludos y gracias

Última edición por Malocado; 12/05/2008 a las 07:10
  #2 (permalink)  
Antiguo 12/05/2008, 07:14
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Problema con <select> al recargar página

http://www.forosdelweb.com/f18/relle...0/#post2400149
__________________
» Presupuesto Pagina Web
  #3 (permalink)  
Antiguo 12/05/2008, 09:41
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Problema con <select> al recargar página

Ese post ya lo ví, pero ahí no recoge datos de ninguna base de datos si no que los muestra de los que tiene en el script, lo que necesito es que recoja los datos de una base de datos MySQL.

Saludos y gracias
  #4 (permalink)  
Antiguo 12/05/2008, 09:44
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Problema con <select> al recargar página

con PHP los metes en javaScript :S xD
__________________
» Presupuesto Pagina Web
  #5 (permalink)  
Antiguo 13/05/2008, 03:28
 
Fecha de Ingreso: abril-2008
Mensajes: 58
Antigüedad: 16 años
Puntos: 1
Re: Problema con <select> al recargar página

esta misma duda la tuve yo, y tuve que buscarme mis propias soluciones. porque por aqui decian cosas sin sentido y demas historias. t voy a pasar el codigo de mi select para que cuando recargues la pagina no se pierda la informacion ya introducida.

Código PHP:
<td class="td">Tipo</td>
   <td><?php
    
if(isset ($_REQUEST["tipo1"])){
        if(
$_REQUEST['tipo1']=='P'){
            
printf("<select name='tipo1'>");
            
printf("<option value='R'>Realizado</option>");
            
printf("<option value='P' selected>Planificado</option>");
            
printf("</select>");
        }else if(
$_REQUEST['tipo1']=='R'){
            
printf("<select name='tipo1'>");
            
printf("<option value='R' selected>Realizado</option>");
            
printf("<option value='P'>Planificado</option>");
            
printf("</select>");
    }}else{
        
printf("<select name='tipo1'>");
        
printf("<option value='R'>Realizado</option>");
        
printf("<option value='P' selected>Planificado</option>");
        
printf("</select>");}    
        
?>
        </td>
  #6 (permalink)  
Antiguo 13/05/2008, 04:29
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Problema con <select> al recargar página

Dime si te va esto, y si no te va, y te tira algun error, dimelo e intento arreglarlo.

Si te tira, ya le metes lo q necesitas:

Código PHP:


<?php

// TODO EL CODIGO QUE CONECTA A LA SQL

$arrayMarcas = array() ;

$qry mysql_query("Select Distinct Marca from modelos order by Marca ASC") ;

while (
$res mysql_fetch_array($qry))
{
    
$arrayMarcas[count($arrayMarcas)] = $res[0] ;
}

$arrayModelos = array() ;

foreach (
$arrayMarcas as $marca)
{
    
    
$qry mysql_query("Select modelo from modelos where marca='$marca' order by modelo ASC") ;
    
    while (
$res mysql_fetch_array($qry))
    {
        if (!
$arrayModelos[$marca])
        
$arrayModelos[$marca] = array() ;
        
        
$numRegistro count($arrayModelos[$marca]) ;
        
        
$arrayModelos[$marca][$numRegistro] = $res[0] ;
        
    }
    
}

// A partir de Aqui tendrias todos los datos recuperados de la base de datos, es decir, en $arrayMarcas, todas las marcas,
// y en arrayModelos, todos los modelos indexados por marca, es decir $arraModelos['Audi'] es un array
// de todos los Modelos Audi que tienes en la base de datos.

// Voy a Pasar todos los Datos a JavaScript y para ello, voy a crear los mismos arrays, pero en javascript

$lineaArrayMarcas "" ;

foreach (
$arrayMarcas as $marca)
{
    if (
$lineaArrayMarcas == "")
    
$lineaArrayMarcas .= "'".$marca."'" ;
    else
    
$lineaArrayMarcas .= ",'".$marca."'" ;
    
}

$lineaArrayMarcas "var arrayMarcas = array(" .$lineaArrayMarcas.") ; " ;

// con esto obtendriamos la variable $lineaArrayMarcas con este valor: var arrayMarchas = array('fiat','seat','audi')  etc...

$lineaArrayModelos "" ;

foreach (
$arrayMarcas as $marca)
{
    if (
$lineaArrayModelos == "")
    
$lineaArrayModelos "var arrayModelos['$marca'] = array(" ;
    else
    
$lineaArrayModelos .= "var arrayModelos['$marca'] = array(" ;
    
    
$modelos "" ;
    
    foreach (
$arrayModelos[$marca] as $modelo)
    {
        if (
$modelos == "")
        
$modelos "'".$modelo."'" ;
        else
        
$modelos ",'".$modelo."'" ;
    }
    
    
$lineaArrayModelos .= $modelos .") ; " ;
}

// Esto obtendrias 1 linea por cada Marca, y en cada linea este codigo : var arrayModelos['Audi'] = array('A3','A4','A5')  etc..

// Entonces ahora para crear nuestros arrays en javaScript seria :

echo '<script>' ;
    echo 
$lineaArrayMarcas ;
    echo 
$lineaArrayModelos ;
echo 
'</script>' ;
?>
<html>
    <head>
        <title>Cosas de Cochecitos</title>
        
        <script>
            
            function rellenarSelectMarcas()
            {
                var i=0 ;
                var cod = '<select id="marca" name="marca" onChange="rellenaModelos()" onClick="rellenaModelos()" onKeyPress="rellenaModelos()">' ;
                    while (i < arrayMarcas.length)
                    {
                        cod += '<option value="' + arrayMarcas[i] + '">' + arrayMarcas[i] + '</option>' ;
                        i++ ;
                    }
                    
                cod += '</select>' ;
                document.getElementById('MARCAS').innerHTML = cod ;
            }
            
            function rellenaModelos()
            {
                var marcaElegida = document.getElementByid('marca').value ;
                
                var i=0 ;
                var cod = '<select id="modelo" name="modelo">' ;
                    while (i < arrayModelos[marcaElegida].length)
                    {
                        cod += '<option value="' + arrayModelos[marcaElegida][i] + '">' + arrayModelos[marcaElegida][i] + '</option>' ;
                        i++ ;
                    }
                    
                cod += '</select>' ;
                document.getElementById('MODELOS').innerHTML = cod ;
                
            }
        </script>
    </head>
    <body>
        
        <div id="MARCAS"></div>
        <div id="MODELOS"></div>
        
        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="TextoNegro">
            <tr>
                <td align="center" colspan=2>Editar Modelo</td>
            </tr>
            <tr>
                <td id="MARCAS"></td>
                <td id="MODELOS"></td>
            </tr>
        </table>
    </body>
</html>
__________________
» Presupuesto Pagina Web
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 02:45.