PHP - Formulario PHP envía ID en vez de NAME

 
Vista:
sin imagen de perfil

Formulario PHP envía ID en vez de NAME

Publicado por Aproximo (17 intervenciones) el 20/01/2014 21:11:43
Hola chic@s!!

Llevo días intentando buscar la solución a un problemilla que tengo y no sé cómo. Resulta que tengo un formulario que me envía los datos recogidos a una base MySql. Todos los selects o inputs que tengo me recogen correctamente los datos, pero hay un bloque que se refiere a recoger los datos mediante SELECTS DEPENDIENTES (dinámicos) de Comunidad Autónoma, Provincia y Localidad que me envía a la base de datos los ID (números) de las filas en vez del NAME (nombre de la autonomía, provincia o localidad).

Este código con los selects lo tengo como un include en otra página donde tengo el resto del formulario. Creo que el problema está en el archivo class.combos.php. Os paso los códigos que forman el bloque:


MUCHAS GRACIAS!!!

Código con los INSERT que tengo en el archivo donde está el include dirigiendo al archivo index de más abajo (a continuación de esto estaría el resto del código con el formulario, pero no lo pongo porque ya me extendería mucho).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }
 
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
 
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
 
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
 
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO aperturas (categoria, subcategoria, name, descrip, date_dia, date_mes, date_ano, ccaa, provincia, localidad, calle, numero, piso, letra, antes, usuario) VALUES (%s,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['categoria'], "text"),
                       GetSQLValueString($_POST['subcategoria'], "text"),
					   GetSQLValueString($_POST['name'], "text"),
					   GetSQLValueString($_POST['descrip'], "text"),
					   GetSQLValueString($_POST['date_dia'], "text"),
					   GetSQLValueString($_POST['date_mes'], "text"),
					   GetSQLValueString($_POST['date_ano'], "text"),
					   GetSQLValueString($_POST['ccaa'], "text"),
					   GetSQLValueString($_POST['provincia'], "text"),
					   GetSQLValueString($_POST['localidad'], "text"),
					   GetSQLValueString($_POST['calle'], "text"),
					   GetSQLValueString($_POST['numero'], "text"),
					   GetSQLValueString($_POST['piso'], "text"),
					   GetSQLValueString($_POST['letra'], "text"),
					   GetSQLValueString($_POST['antes'], "text"),
					   GetSQLValueString($_POST['usuario'], "text"));
 
 
mysql_select_db($database_Registro, $Registro);
  $Result1 = mysql_query($insertSQL, $Registro) or die(mysql_error());
 
  $insertGoTo = "usuarios/indexusuario.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>



Archivo index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
  <head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
	<script type="text/javascript" src="SPAIN/js/jquery-1.3.2.min.js"></script>
 
	<script type="text/javascript">
		$(document).ready(function(){
			cargar_comunidades();
			$("#comunidad").change(function(){dependencia_provincia(); $("#localidad").attr("disabled",true);});
			$("#provincia").change(function(){dependencia_localidad();});
			$("#provincia").attr("disabled",true);
			$("#localidad").attr("disabled",true);
		});
 
		function cargar_comunidades()
		{
			$.get("SPAIN/scripts/scripts/cargar-comunidades.php", function(resultado){
				if(resultado == false)
				{
					alert("Error");
				}
				else
				{
					$('#comunidad').append(resultado);
				}
			});
		}
		function dependencia_provincia()
		{
			var code = $("#comunidad").val();
			$.get("SPAIN/scripts/scripts/dependencia-provincias.php", { code: code },
				function(resultado)
				{
					if(resultado == false)
					{
						alert("Error");
					}
					else
					{
						$("#provincia").attr("disabled",false);
						document.getElementById("provincia").options.length=1;
						$('#provincia').append(resultado);
					}
				}
 
			);
		}
 
		function dependencia_localidad()
		{
			var code = $("#provincia").val();
			$.get("SPAIN/scripts/scripts/dependencia-localidades.php?", { code: code }, function(resultado){
				if(resultado == false)
				{
					alert("Error");
				}
				else
				{
					$("#localidad").attr("disabled",false);
					document.getElementById("localidad").options.length=1;
					$('#localidad').append(resultado);
				}
			});
 
		}
	</script>
 
  </head>
  <body>
 
 
 
		<dl>
 
 
			<dd>Comunidad:</dd>
			<dd>
			  <select name="ccaa" id="comunidad">
 
				<option value="0">ELIGE</option>
			  </select>
			</dd>
 
			<dd>Provincia:</dd>
			<dd>
			  <select name="provincia" id="provincia">
				<option value="0">ELIGE</option>
			  </select>
			</dd>
 
			<dd>Localidad:</dd>
			<dd>
			  <select name="localidad" id="localidad">
				<option value="0">ELIGE</option>
			  </select>
			</dd>
		</dl>
 
 
 
  </body>
</html>

Archivo class.combos.php CREO QUE AQUÍ ESTÁ EL PROBLEMA


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
 
class selects extends MySQL
{
	var $code = "";
 
	function cargarComunidades()
	{
		$consulta = parent::consulta("SELECT nombre,com_id FROM comunidad ORDER BY nombre ASC");
		$num_total_registros = parent::num_rows($consulta);
		if($num_total_registros>0)
 
 
		{
			$comunidades = array();
			while($comunidad = parent::fetch_assoc($consulta))
			{
				$code = $comunidad["com_id"];
				$name = $comunidad["nombre"];
				$comunidades[$code]=$name;
			}
			return $comunidades;
		}
		else
		{
			return false;
		}
	}
	function cargarProvincias()
	{
		$consulta = parent::consulta("SELECT nombre,prov_id FROM provincia WHERE com_id = '".$this->code."'");
		$num_total_registros = parent::num_rows($consulta);
		if($num_total_registros>0)
		{
			$provincias = array();
			while($provincia = parent::fetch_assoc($consulta))
			{
				$code = $provincia["prov_id"];
				$name = $provincia["nombre"];
				$provincias[$code]=$name;
			}
			return $provincias;
		}
		else
		{
			return false;
		}
	}
 
	function cargarLocalidades()
	{
		$consulta = parent::consulta("SELECT nombre,loc_id FROM localidad WHERE prov_id = '".$this->code."'");
		$num_total_registros = parent::num_rows($consulta);
		if($num_total_registros>0)
		{
			$localidades = array();
			while($localidad = parent::fetch_assoc($consulta))
			{
				$code = $localidad["loc_id"];
				$name = $localidad["nombre"];
				$localidades[$code]=$name;
			}
			return $localidades;
		}
		else
		{
			return false;
		}
	}
}
?>




Archivo cargar-comunidades.php

1
2
3
4
5
6
7
8
9
10
<?php
include("../clases/class.mysql.php");
include("../clases/class.combos.php");
$selects = new selects();
$comunidades = $selects->cargarComunidades();
foreach($comunidades as $key=>$value)
{
  echo "<option value=\"$key\">$value</option>";
}
?>


Archivo dependencia-provincias.php


1
2
3
4
5
6
7
8
9
10
11
<?php
include("../clases/class.mysql.php");
include("../clases/class.combos.php");
$provincias = new selects();
$provincias->code = $_GET["code"];
$provincias = $provincias->cargarProvincias();
foreach($provincias as $key=>$value)
{
		echo "<option value=\"$key\">$value</option>";
}
?>

Archivo dependencia-localidades.php

1
2
3
4
5
6
7
8
9
10
11
<?php
include("../clases/class.mysql.php");
include("../clases/class.combos.php");
$localidades = new selects();
$localidades->code = $_GET["code"];
$localidades = $localidades->cargarLocalidades();
foreach($localidades as $key=>$value)
{
		echo "<option value=\"$key\">$value</option>";
}
?>

Archivo class.mysql.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
class MySQL
{
  var $conexion;
  function MySQL()
  {
  	if(!isset($this->conexion))
	{
  		$this->conexion = (mysql_connect('localhost', 'root', '')) or die(mysql_error());
  		mysql_select_db('base_datos',$this->conexion) or die(mysql_error());
  	}
  }
 
  function consulta($consulta)
  {
    $resultado = mysql_query($consulta,$this->conexion);
  	if(!$resultado)
	{
  		echo 'MySQL Error: ' . mysql_error();
	    exit;
	}
  	return $resultado;
  }
 
  function fetch_array($consulta)
  {
    return mysql_fetch_array($consulta);
  }
 
  function num_rows($consulta)
  {
 	return mysql_num_rows($consulta);
  }
 
  function fetch_row($consulta)
  {
 	return mysql_fetch_row($consulta);
  }
  function fetch_assoc($consulta)
  {
 	return mysql_fetch_assoc($consulta);
  }
}
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP envía ID en vez de NAME

Publicado por xve (6935 intervenciones) el 21/01/2014 08:32:31
Hola Aproximo, si te digo la verdad, yo creo que lo tienes bien, y tienes que pasar el id en vez del texto.

Creo que en esta linea defines el valor que se pasara (en este caso para la provincia) en el <select>:
1
$code = $comunidad["com_id"];

Si cambias esta linea por:
1
$doce = $comunidad["nombre"];
Creo que te pasara el nombre de la provincia en vez de su id

Yo te diría, que es mejor siempre pasar el id, ya que si en este caso la provincia contiene acentos, eñes o cualquier otro símbolo puedes llegar a tener problemas ya que puede variar, y siempre es mejor pasar el mínimo de valores posibles. Siempre que puedas pasa un numero en vez de letras.

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Formulario PHP envía ID en vez de NAME

Publicado por Aproximo (17 intervenciones) el 21/01/2014 09:11:50
Muchas gracias xve. Con gente como tú da gusto pasear por aquí.

La idea que me comentas ya la he hecho y funciona bien... en parte. Resulta que si hago eso me manda el nombre del registro, pero me deja de funcionar los combos, es decir, si lo hago con comunidad, la provincia ya no me funciona al desplegarse y si lo hago a partir de provincia, me deja de funcionar el combo de la localidad. Supongo que lógico, porque están relacionados a través de ese campo.

Lo que necesito es que los datos que el usuario selecciona en estos combos se mande a una base de datos (que ya tengo con más datos), y luego el usuario haciendo una búsqueda, por ejemplo, se les ofrezca al usuario con el nombre que eligió (y que no le aparezcan los ID). Si alguien me explica cómo recuperar los NAME de una BBDD a partir de los ID que figuran en otra BBDD se lo agradecería.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP envía ID en vez de NAME

Publicado por xve (6935 intervenciones) el 21/01/2014 11:43:47
Hola Aproximo, tienes razón, luego no te funcionara bien la pagina...

Lo que nosotros hacemos es guarda en la base de datos siempre el id, y a la hora de mostrar la información vinculamos las dos tablas...
Por ejemplo...

Tabla provincia:
1
2
nombre
prov_id

Tabla aperturas:
1
2
3
...
provincia (contiene el valor de prov_id)
...

Para mostrar los datos de la tabla aperturas con el nombre de la provincia hacemos algo así:
1
SELECT * FROM aperturas a LEFT JOIN provincia p ON a.provincia=p.prov_id

De este modo, te mostrara el contenido de la tabla aperturas y el contenido de la tabla provincia incluyendo el nombre de la provincia.

Espero que me haya sabido explicar... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Formulario PHP envía ID en vez de NAME

Publicado por Aproximo (17 intervenciones) el 22/01/2014 10:52:24
Hola xve.

Muchas gracias!! Me has ayudado muchísimo. Al final lo que he hecho es esto y me sale perfecto!:

1
2
3
4
5
SELECT  categoria, name, provincia.nombre_prov, comunidad.nombre_com, localidad.nombre_loc
FROM aperturas
INNER JOIN  provincia  ON aperturas.provincia = provincia.id_prov
INNER JOIN  comunidad  ON aperturas.ccaa = comunidad.id_com
INNER JOIN  localidad  ON aperturas.localidad = localidad.id_loc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP envía ID en vez de NAME

Publicado por xve (6935 intervenciones) el 22/01/2014 11:49:17
Gracias por comentarlo Aproximo... lo veo perfecto!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Formulario PHP envía ID en vez de NAME

Publicado por Aproximo (17 intervenciones) el 14/04/2014 09:31:13
Bueno, no sé si alguien verá esto, pero allá voy.

Hace tiempo que ya di por cerrado este tema, pero hoy lo tengo que volver a abrir. Resulta que los combos funcionan perfectamente y me guardan los id de cada ccaa, provincia o localidad en mi bd. Luego los puedo mostrar otra vez sin problemas gracias a la solución que me dio XVE. Pero después de un tiempo tratando con ello he llegado a la conclusión que necesito que se guarde el nombre en vez del id.

Estoy haciendo un php de modificación de registros y me está dando muchos problemas que en mi bd se guarden estos campos con valores numéricos en vez de el nombre. Igualmente, luego haré php de búsqueda y seguro que me encuentro con el mismo problema.

Que alguien me ayude!, seguro que no es tan difícil POR FAVORR!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP envía ID en vez de NAME

Publicado por xve (6935 intervenciones) el 14/04/2014 14:09:44
Hola Aproximo, es un gran error guardar el texto y no el id... ya que si cambia el texto... si tienes acentos... siempre podrás tener problemas ademas de que la base de datos es mas lenta.

De todas maneras, si decides continuar de esta manera, seria algo así:
1
echo "<option value=\"$value\">$value</option>";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Formulario PHP envía ID en vez de NAME

Publicado por Aproximo (17 intervenciones) el 19/04/2014 17:29:27
De nuevo muchas gracias XVE, pero me sigue sin funcionar.

Al cambiar esa linea en el archivo cargar-comunidades.php me guarda perfectamente el nombre en la base de datos, pero no me carga las provincias, y sin las provincias tampoco me carga las localidades en sus respectivos combos.

Le llevo dando vueltas unos cuantos días para no volver a molestarte, pero me está siendo imposible.

Muchas gracias por tu respuesta, espero que me puedas seguir ayudando, porque sino no sé qué más puedo hacer...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP envía ID en vez de NAME

Publicado por xve (6935 intervenciones) el 19/04/2014 17:53:19
Si, claro, tienes que cambiar todas las consultas a la base de datos, ya que hasta ahora siempre estabas buscando por el id, y ahora al pasar el nombre, tienes que modificar todas las consultas.

No se porque razón no te vale enviar el id, pero al pasar el nombre, todo se complica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar