Hola Sebastián,
Vamos a ver si resolvemos esto.
Primero, no puedes tener tan mezclado el html con el php, es un lio bárbaro. Declara las funciones por separado e intenta limpiar lo más posible el código.
Mirá, cuando vas a imprimir en pantalla directamente un código html, no conviene que lo hagas así
echo "<table><th><td>";
porque en la vista previa del editor web no puedes ver el resultado.
Tu estas pidiendo ayuda pero es muy dificil ver donde puede estar el error de la ubicación html de la función. Y ame hice lio?
Conviene imprimir el html así
Código PHP:
<?php
// funcionhes codigo blablabla
?>
<table><tr><td>
<?php
// mas codigo
?>
De esa manera puedes ver exactamente cómo va quedando.
Fue eso lo que yo hice con tu código y simplemente /despues de esto) cambie de posición la llamada a la funcion que genera tus categorías.
Código PHP:
<html>
<head>
<title>CONTROL DE GASTOS</title>
<script type="text/javascript" src="select_dependientes.js"></script>
<script language="javascript" type="text/javascript" src="seleccionafecha.js"></script>
</head>
<body>
<?php
function generaCategorias()
{
include 'conexion.php';
conectar();
$consulta=mysql_query("SELECT id, opcion FROM categoria");
desconectar();
// Voy imprimiendo el primer select compuesto por los paises
?>
<select name='categorias' id='categorias' onChange='cargaContenido(this.id)'>
<option value='0'>Elige</option>
<?
while($registro=mysql_fetch_row($consulta))
{
?>
<option value='<?= $registro[0] ?>'><?= $registro[1] ?></option>";
<?
}
?>
</select>
<?
}
?>
</p>
<p> <?php
$dp=mysql_connect("localhost", "root", "");
mysql_select_db("gastos", $dp);
if (isset($_POST['submit'])){
if (empty($_POST['monto'])){
echo "Debe ingresar el item.";
} else if (strlen($_POST['fecha'])<1) {
echo "El monto debe estar ingresado.";
} else {
$sql = "INSERT INTO insertagastox| (id, items, categorias, monto, fecha) VALUES ('$_POST[id]', '$_POST[items]', '$_POST[categorias]', '$_POST[monto]', '$_POST[fecha]')";
$resultado= mysql_query($sql);
if ($resultado){
echo "Datos fueron ingresados";
}else{
echo "Los datos <b>no</b> fueron agregados.";
}
}
?>
<br><br>
<a href='javascript:history.back()'>Volver</a> - <a href='<?= $_SERVER[PHP_SELF] ?>'> Introducir nuevo gasto</a>
<?
}else{
$sql2 = "select * from item";
$resultado2 = mysql_query($sql2);
$campoitem="";
while ($row = mysql_fetch_assoc($resultado2)){
?><option value='<?= $row[id] ?>'><?= $row[nombreitem] ?></option>
<?
}
?>
<form action="<?= $_SERVER[PHP_SELF] ?>" method="post">
<table>
AQUI QUIERO QUE VAYA ESE COMBOBOX DE LA FUNCION "generaCategoria"
<tr>
<td>CATEGORIA</td>
<td><?php generaCategorias();?>
<tr><td>ITEM:</td><td><select disabled="disabled" name="items" id="items"><option value="0">Selecciona opción...</option></select>
<tr><td>MONTO:</td><td><input type="text" name="monto"></td></tr>
<tr><td>FECHA GASTO:</td><td><input name="fecha" type="text" size="25"><a href="javascript:NewCal('fecha','ddmmyyyy')">Selec cione fecha</a></td></tr>
</td></tr>
<tr><td></td><td><input type="submit" value="Introducir Gasto" name ="submit"></td></tr>
</table>
</form>
FORMULARIO;
<?
}
?>
<p> </p>
<p><a href="vertodos.php">ver gastos </a></p>
Lo pruebas y me cuentas
Saludos