¿Al ejecutar el ejemplo sale problemas en row en la línea 32 alguien sabe?
¿Al ejecutar el ejemplo sale problemas en row en la línea 32 alguien sabe? El usuario que colgó el código de combos dependientes no esta bien en la linea 32 por favor vor se agradecería mucho si podría especificar el error
1 respuesta
<?
$bd_host = "localhost";
$bd_usuario = "localhost";
$bd_password = "";
$bd_base = "mibase";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
$sql = "SELECT * from empresas";
$rs = mysql_query($sql, $con);
?>
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p>Selección de un select y cambiar los valores de otro select sin tener que submitar (valido según su uso)</p>
<form name="miformulario" method="get">
<table width="249" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Empresa</td>
<td>Departamento</td>
</tr>
<tr>
<td><select name="empresa" id="empresa" onChange="componer_Centros(this.value)">
<option value="">--Seleccione--</option>
<? if(mysql_num_rows($rs)>0)
{
while($row = mysql_fetch_assoc($rs))
{
?>
<option value="<?=$row["Id"]?>" selected><?=$row["descripción"]?></option>
<?
}
}
?>
</select></td>
<td><select name="depto" id="depto">
<option>--seleccione--</option>
</select></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
<script>
function componer_Centros(cod_area)
{
//alert(cod_area);
document.miformulario.depto.length=0;
document.miformulario.depto.options[0] = new Option("-- Seleccione --","","defaultSelected","");
var indice=1;
<?
$sql_depto = "SELECT * from departamentos";
$rs_depto = mysql_query($sql_depto, $con);
if(mysql_num_rows($rs_depto)>0)
{
while($row_depto = mysql_fetch_assoc($rs_depto))
{
?>
if(cod_area=='<?=$row_depto["Id"]?>')
{
document.miformulario.depto.options[indice] = new Option("<?=$row_depto["nombre_depto"]?>","<?=$row_depto["Id_depto"]?>");
indice++;
}
<?
}
}
mysql_close($con);
?>
}
</script>
este es el código en la linea 32
Disculpa por no pedirlo antes, ¿pero me puedes enviar el texto que arroja php para este error? Ya que con eso podría entender de manera directa que sucede.
El código se ve bien, aunque te recomiendo que según la documentación de php cambies de librería a mysqli para trabajar ya que esas funciones están obsoletas.
Puedo, por lo que veo recomendarte que revises esta llamada
<?=$row["Id"]?>
Ya que el indice "Id" está con mayúscula y eso puede provocar el problema. Por lo demás está bastante extraño este problema ya que no encuentro a simple vista, errores en el código. Tratare de instalar ese script en un servidor mio a ver si me arroja el mismo error, te mantendré informado de eso.
muchas gracias ya alle el problema y cometí error de novato
la sintaxis de php.. siempre tiene que usar.. <?php ?> muchas gracias por la pronta respuesta
Para poder usar la sintaxis que estabas trabajando, ve a la configuración del php.ini y ubica la opción short tags (aunque no es recomendado como un estándar de codificación).
No olvides cerrar la pregunta.
muchas gracias me puse a leer muchos pdfs pero bueno quisiera poder consultar algo mas si no es mucha molestia
en relación a los combos dependientes ya que lo quiero utilizar en forma suceciba en un formulario por ejemplo país, departamento, provincia, localidad, zona y colegio de que manera debe ir en mi base para no tener problemas con los códigos ?
Va a depender de tu modelo, pero la idea es que siempre trabajes con la llave foránea de por lo menos el item superior al cual estas trabajando ejemplo
Tabla continente (como no maneja un item superior ya que es la unidad más grande que utilizaremos no tiene llave foránea)
id_cont nombre
1 América
2 Asia
3 Europa
4 Oceanía
5 Africa
Tabla país (contendrá la llave del superior para filtrar los países que correspondan cuando se seleccione un continente)
id_pais nombre id_cont
1 Colombia 1
2 China 2
3 Italia 3
Ya en el siguiente nivel puede tener una característica especial y por eso depende de tu modelo.
Haremos el campo ciudad y deseamos seleccionar todas las ciudades de un país.
Si deseas que esta operación se realice sólo cuando se cambie el combobox de país, agregas la llave foránea del país en la siguiente tabla.
id_ciudad nombre id_pais
Pero si deseas por alguna otra razón que se filtren las ciudades desde el cambio de continente tendrás que agregarle esta llave también
id_diudad nombre id_pais id_cont
Si tienes dudas quedo atento.
bueno si aun no logro entender pero puedo mandarte los códigos para que lo entiendas mejor
la db----------------------------------
CREATE TABLE `zona` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador de la zona',
`nombre` varchar(100) NOT NULL COMMENT 'Nombre de la localidad',
`localidad_id` int(11) NOT NULL COMMENT 'Identificador de la localidad al que pertenece la zona',
PRIMARY KEY (`id`),
KEY `fk_zona_localidad1` (`localidad_id`),
CONSTRAINT `fk_zona_localidad1` FOREIGN KEY (`localidad_id`) REFERENCES `localidad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)
DROP TABLE IF EXISTS `colegio`;
CREATE TABLE `colegio` (
`sie` varchar(100) NOT NULL COMMENT 'código sie',
`nombre` varchar(100) NOT NULL COMMENT 'Nombre de la colegio',
`dependencia` varchar(100) NOT NULL COMMENT 'dependencia',
`iddistrito` int(11) NOT NULL COMMENT 'Identificador del distrito',
`nombredistrito` varchar(100) NOT NULL COMMENT 'Nombre del distrito',
`dirección` varchar(100) NOT NULL COMMENT 'Nombre de la colegio',
`zona_id` int(11) NOT NULL COMMENT 'Identificador de la zona al que pertenece el colegio',
PRIMARY KEY (`sie`),
KEY `fk_colegio_zona1` (`zona_id`),
CONSTRAINT `fk_colegio_zona1` FOREIGN KEY (`zona_id`) REFERENCES `zona` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)
DROP TABLE IF EXISTS `curso`;
CREATE TABLE `curso` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador ',
`nivel` varchar(100) NOT NULL COMMENT 'Nombre del nivel',
`grado` varchar(100) NOT NULL COMMENT 'Nombre del grado',
`cantidad` int(11) NOT NULL COMMENT 'cantidad de estudiantes por curso',
`sie_id` int(20) NOT NULL COMMENT 'Identificador del nivel al que pertenece el grado',
PRIMARY KEY (`id`),
KEY `fk_curso_colegio1` (`sie_id`),
CONSTRAINT `fk_curso_colegio1` FOREIGN KEY (`sie_id`) REFERENCES `colegio` (`sie`) ON DELETE CASCADE ON UPDATE CASCADE
)
la función de mi index.php-------------------------------------------------------
<script type="text/javascript">
$(document).ready(function(){
cargar_zonas();
$("#zona").change(function(){dependencia_colegio();});
$("#colegio").change(function(){dependencia_nivel();});
$("#colegio").attr("disabled",true);
$("#nivel").attr("disabled",true);
});
function cargar_zonas()
{
$.get("scripts/cargar-zona.php", function(resultado){
if(resultado == false)
{
alert("Error");
}
else
{
$('#zona').append(resultado);
}
});
}
function dependencia_colegio()
{
var code = $("#zona").val();
$.get("scripts/dependencia-colegio.php", { code: code },
function(resultado)
{
if(resultado == false)
{
alert("Error");
}
else
{
$("#colegio").attr("disabled",false);
document.getElementById("colegio").options.length=1;
$('#colegio').append(resultado);
}
}
);
}
function dependencia_nivel()
{
var code = $("#colegio").val();
$.get("scripts/dependencia-nivel.php", { code: code }, function(resultado){
if(resultado == false)
{
alert("Error");
}
else
{
$("#nivel").attr("disabled",false);
document.getElementById("nivel").options.length=1;
$('#nivel').appen(resultado);
}
});
}
</script>
/* las dependencias son las sisiguientes en mi tablaba de consultas -----------------------------
var $code = "";
function cargarZona()
{
$consulta = parent::consulta("SELECT nombre,id FROM zona ORDER BY nombre ASC");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$zonas = array();
while($zona = parent::fetch_assoc($consulta))
{
$code = $zona["id"];
$name = $zona["nombre"];
$zonas[$code]=$name;
}
return $zonas;
}
else
{
return false;
}
}
function cargarColegio()
{
$consulta = parent::consulta("SELECT nivel,sie FROM colegio WHERE zona_id = '".$this->code."'ORDER BY nombre ASC");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$zonas = array();
while($zona = parent::fetch_assoc($consulta))
{
$code = $zona["sie"];
$name = $zona["nivel"];
$zonas[$code]=$name;
}
return $zonas;
}
else
{
return false;
}
}
function cargarNiveles()
{
$consulta = parent::consulta("SELECT nivel FROM colegio WHERE zona_id = '".$this->code."' ORDER BY nombre ASC");
$num_total_registros = parent::num_rows($consulta);
if($num_total_registros>0)
{
$colegios = array();
while($colegio = parent::fetch_assoc($consulta))
{
$name = $colegio["nivel"];
$colegios[$name]=$name;
}
return $colegios;
}
else
{
return false;
}
}
ojala me entienda la CUESTIÓN ES QUE NO PUEDO HACER QUE REALIZE O CARGUE EL COMBO DESPUÉS DE LA SEGUNDA EN ESTE CASO DE COLEGIO ME SALE
: Invalid argument supplied for foreach() in
El error que enseñas se debe a que la consulta sql no esta retornando ningún registro, lo que provoca que recorras por foreach un array vacío.
Por otro lado, estoy observando un par de cosas que me dejan dudas en tu código php.
$consulta = parent::consulta("SELECT nivel,sie FROM colegio WHERE zona_id = '".$this->code."'ORDER BY nombre ASC");
Cuando ejecutas esto, estás trabajando como si fuese una clase (pero con todo ese código no he podido localizar la declaración de la clase ni tampoco la asignación de la propiedad $this->code.
Entonces, sospecho que al confundir ciertos términos no estas armando bien la información base para que se ejecute la consulta.
Recomendaciones:
1- Verificar realmente si estas trabajando con clases o con funciones sueltas
2- asignar el valor de $code con la variable $_GET["code"] ya que es la que llega desde la petición.
3- Si tienes dudas de que consulta se está ejecutando haz un echo al sql para que despliegue por pantalla que es lo que se está ejecutando en la base de datos.
Quizá por ahora no sea la solución, pero estoy seguro que podremos tener más información al respecto para poder tener tu código funcionando.
bueno a un me ejecuta problema me gustaría mandarte el trabajo que estoy hacinedo en un comprimido àra que lo pueda revisar si se puede me deja su correo y lo mando lo mas antes posible
Hazlo llegar a [email protected]
- Compartir respuesta