Personalmente pienso que es más fácil y rápido usando Ajax, así que te dejo una posible solución usando Ajax.
En el código de formulario.php cambié alguna cosilla, porque no me dejaba crear nuevos marcadores...
<?php
session_start();
require_once("datos.php");
$con = mysqli_connect($host, $user, $pass, $db_name) or die ("Error en la conexión con la base de datos");
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="formulario.php" method="post" name="formCategoria" >
<u><h1>Alta categorias</h1></u>
Nombre: <input type="text" name="nombre" /><br/><br/>
<input type="submit" value="Alta categoria" name="alta_categoria">
</form>
<?php
if(isset($_SESSION['catOK'])){
echo $_SESSION['catOK'];
unset($_SESSION['catOK']);
}
if(isset($_SESSION['catError'])){
echo $_SESSION['catError'];
unset($_SESSION['catError']);
}
?>
<form method="POST" action="formulario.php" name="formMarcadores">
Nombre marcador: <input type="text" name="nom_marcador" /><br/><br/>
Descripcion: <input type="text" name="descripcion" /><br/><br/>
Coordenadas:<input type="text" name="coordenadas">
<?php
$query = "select * from categoria";
$rows= mysqli_query($con, $query);
echo "<select name='categoria'><option value=''></option>";
while($row = mysqli_fetch_array($rows)){
extract($row);
echo "<option value='$id_categoria'>$nombre</option>";
}
echo "</select>";
?>
<br/><br/>
<input type="submit" value="Alta marcador" name="alta_marcador">
</form>
<?php
if(isset($_SESSION['marcadorOK'])){
echo $_SESSION['marcadorOK'];
unset($_SESSION['marcadorOK']);
}
if(isset($_SESSION['marcadorError'])){
echo $_SESSION['marcadorError'];
unset($_SESSION['marcadorError']);
}
?>
</body>
</html>
<?php
if(isset($_POST['alta_categoria'])){
if(isset($_POST['nombre']) && !empty($_POST['nombre']))
{
$nombre = $_POST['nombre'];
$query_C = "insert into categoria(nombre) values ('$nombre')";
mysqli_query($con, $query_C);
$_SESSION['catOK'] = "¡Categoria creada!";
header("Location: formulario.php");
}
else
{
$_SESSION['catError'] = "Escribe el nombre de la categoria por favor";
header("Location: formulario.php");
}
}
if(isset($_POST['alta_marcador']))
{
if(isset($_POST['alta_marcador']) && isset($_POST['coordenadas']) && !empty($_POST['coordenadas']) && isset($_POST['categoria'])){
$nombre = $_POST['nom_marcador'];
$descripcion = $_POST['descripcion'];
$coordenadas = $_POST['coordenadas'];
$categoria = $_POST['categoria'];
$query_M = "insert into marcador(nombre, descripcion, coordenadas, categoria) values ('$nombre', '$descripcion', '$coordenadas', $categoria)";
mysqli_query($con, $query_M);
$_SESSION['marcadorOK'] = "Marcador creado correctamente";
header("Location: formulario.php");
} else {
$_SESSION['marcadorError'] = "<span style='color:red;'>Rellena todos los campos por favor.</span>";
header("Location: formulario.php");
}
}
mysqli_close($con);
?>
El código de usuarios.php no cambié nada, pero lo vuelvo a poner para que quede todo junto:
<?php
session_start();
require_once("datos.php");
$con = mysqli_connect($host, $user, $pass, $db_name) or die ("Error en la conexión con la base de datos");
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel de usuario</title>
<meta charset="UTF-8">
</head>
<body>
<form method="POST" action="index1.php" name="form-select">
<p>ELIGE UNA CATEGORIA</p>
<p>Categoria:</p>
<?php
$query = "select * from categoria";
$rows = mysqli_query($con, $query);
echo "<select name='categoria'><option value=''></option>";
while($row = mysqli_fetch_array($rows)){
extract($row);
echo "<option value='$id_categoria'>$nombre</option>";
}
echo "</select>";
mysqli_close($con);
?>
</br></br>
<input type="submit" value="Buscar" name="buscar_cat" >
</form>
<?php
if (isset($_SESSION['busqError'])) {
echo $_SESSION['busqError'];
unset($_SESSION['busqError']);
}
if (isset($_SESSION['busqVac'])) {
echo $_SESSION['busqVac'];
unset($_SESSION['busqVac']);
}
?>
</body>
</html>
En el codigo de index.php si cambié bastantes cosas, lo dejo aquí:
<?php
session_start();
require_once("datos.php");
$con = mysqli_connect($host, $user, $pass, $db_name) or die('Error con la conexion de la base de datos');
if (isset($_POST['categoria']) && !empty($_POST['categoria'])) {
$ct = $_POST['categoria'];
$query = "select * from marcador where categoria = $ct";
$result = mysqli_query($con, $query);
$rows = $result->num_rows;
if($rows == 0){
$_SESSION['busqVac'] = "No se ha encontrado ningun marcador con esta categoria";
header("Location: usuario.php");
}
mysqli_close($con);
} else {
$_SESSION['busqError'] = "Selecciona una categoria por favor";
header("Location: usuario.php");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Mapa Mptril</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<style>
#map {
height: 400px;
width: 100%;
}
</style>
</head>
<body>
<h1>Mis mapas</h1>
<div id="map"></div>
<script>
function initMap() {
var divMapa = document.getElementById('map');
var xhttp;
var resultado = [];
var markers = [];
var infowindowActivo = false;
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
resultado = xhttp.responseText;
var objeto_json = JSON.parse(resultado);
for (var i = 0; i < objeto_json.length; i ++) {
var latlong = objeto_json[i][2].split(',');
myLatLng = {
lat: Number(latlong[0]),
lng: Number(latlong[1])
};
markers[i] = new google.maps.Marker({
position: myLatLng,
map: map,
title: objeto_json[i][0]
});
var contentString = '<h1 id="firstHeading" class="firstHeading">' +
objeto_json[i][0] + '</h1>'+ '<div id="bodyContent">'+
'<p><b>' + objeto_json[i][0] + '</b></p><p>' + objeto_json[i][1] +
'</p></div>';
markers[i].infoWindow = new google.maps.InfoWindow({
content: contentString
});
google.maps.event.addListener(markers[i], 'click', function(){
if(infowindowActivo){
infowindowActivo.close();
}
infowindowActivo = this.infoWindow;
infowindowActivo.open(map, this);
});
}
}
};
var myLatLng = {
lat: 40.417079,
lng: -3.703892
};
var map = new google.maps.Map(divMapa,{
zoom: 15,
center: myLatLng
});
var tipo = <?php echo $ct; ?>;
var url = "marcadores_a_mostrar.php?tipo="+tipo;
xhttp.open("POST", url, true);
xhttp.send();
}
</script>
<a href="usuario.php">Volver</a>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAXTM8tcD_fVL09AEKUKhFyundS8el6C70&callback=initMap"></script>
</body>
</html>
Y creé un archivo más, que llamé marcadores_a_mostrar.php, que se encarga de devolver un objeto json, que luego transformaremos en un array en index.php...
<?php
$nuevaCoor = "";
require_once("datos.php");
$ct = $_REQUEST["tipo"];
$con = mysqli_connect($host, $user, $pass, $db_name) or die('Error con la conexion de la base de datos');
$query = "select * from marcador where categoria = $ct";
$result = mysqli_query($con, $query);
$i = 0;
$rows = $result->num_rows;
while($row = mysqli_fetch_array($result)){
extract($row);
$resultado[$i][0] = $nombre;
$resultado[$i][1] = $descripcion;
$resultado[$i][2] = $coordenadas;
$i++;
}
$resultado = json_encode($resultado);
mysqli_close($con);
echo $resultado;
?>
Saludos.