Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error al realizar un UPDATE

Estas en el tema de Error al realizar un UPDATE en el foro de PHP en Foros del Web. Muy buenas! Os comento, acabo de terminar el grado de Administración de Sistemas Informáticos en Red y estoy realizando las practicas. Me ha surgido un ...
  #1 (permalink)  
Antiguo 04/04/2016, 03:45
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Error al realizar un UPDATE

Muy buenas!

Os comento, acabo de terminar el grado de Administración de Sistemas Informáticos en Red y estoy realizando las practicas.

Me ha surgido un problemilla a la hora de realizar un UPDATE.
Este es el código que tengo:

30 <?php
31 $con = mysqli_connect ("localhost", "sueldos", "sueldos", "sueldos")
32 or die ("ERROR. No se ha podido conectar a la Base de Datos");
33 echo "<br/>";
34
35 $ID_Nomisferio = mysqli_real_escape_string ( $con, $_GET['ID_Nomisferio']);
36 $query = "SELECT * FROM nomisferio WHERE ID_Nomisferio=" . $ID_Nomisferio;

38 $result = mysqli_query ($con, $query);
if (!$result) {
$ultimo_error = mysqli_error($con);
echo $ultimo_error;
} else {
if ($row = mysqli_fetch_assoc($result)) {
extract($row);
?>

Y este es el código del fichero action que realiza la modificación:
<?php
$con = mysqli_connect ("localhost", "sueldos", "sueldos", "sueldos")
or die ("ERROR. No se ha podido conectar a la BBDD.");
echo "<br/>";
$ID_Nomisferio = mysqli_real_escape_string($con, $_POST['ID_Nomisferio']);
$ID_Categoria = mysqli_real_escape_string($con, $_POST['ID_Categoria']);
$Tipo_Mes = mysqli_real_escape_string($con, $_POST['Tipo_Mes']);
$Sueldo = mysqli_real_escape_string($con, $_POST['Sueldo']);
$Antiguedad = mysqli_real_escape_string($con, $_POST['Antiguedad']);
$Dif_ant = mysqli_real_escape_string($con, $_POST['Dif_ant']);
$C_Puesto = mysqli_real_escape_string($con, $_POST['C_Puesto']);
$C_Niv_Retr = mysqli_real_escape_string($con, $_POST['C_Niv_Retr']);
$C_Destino = mysqli_real_escape_string($con, $_POST['C_Destino']);
$C_Prof_1 = mysqli_real_escape_string($con, $_POST['C_Prof_1']);
$C_Prof_2 = mysqli_real_escape_string($con, $_POST['C_Prof_2']);
$C_Prof_3 = mysqli_real_escape_string($con, $_POST['C_Prof_3']);
$C_Prof_4 = mysqli_real_escape_string($con, $_POST['C_Prof_4']);
$C_Fest_Dia = mysqli_real_escape_string($con, $_POST['C_Fest_Dia']);
$C_Fest_Noche = mysqli_real_escape_string($con, $_POST['C_Fest_Noche']);
$Hospital = mysqli_real_escape_string($con, $_POST['Hospital']);
$Nocturnidad = mysqli_real_escape_string($con, $_POST['Nocturnidad']);
$J_Partida = mysqli_real_escape_string($con, $_POST['J_Partida']);

$query = "UPDATE nomisferio SET ID_Nomisferio='" . $ID_Nomisferio . "', ID_Categoria='" . $ID_Categoria . "', Tipo_Mes='" . $Tipo_Mes . "', Sueldo='" . $Sueldo . "', Antiguedad='" . $Antiguedad . "',
Dif_ant='" . $Dif_ant . "', C_Puesto='" . $C_Puesto . "', C_Niv_Retr='" . $C_Niv_Retr . "',
C_Destino='" . $C_Destino . "', C_Prof_1='" . $C_Prof_1 . "', C_Prof_2='" . $C_Prof_2 . "', C_Prof_3='" . $C_Prof_3 . "',
C_Prof_4='". $C_Prof_4 . "', C_Fest_Dia='" . $C_Fest_Dia . "', C_Fest_Noche='". $C_Fest_Noche . "',
Hospital='". $Hospital . "', Nocturnidad='" . $Nocturnidad . "', J_Partida='". $J_Partida . "';";

echo $query;
$result = mysqli_query ($con, $query);

if (!$result) {
$ultimo_error = mysqli_error($con);
echo $ultimo_error;
} else {
header('Location:nomisferio.php');

}
?>

Y este es el error que me muestra al hacer click en el botón de modificar:
Notice: Undefined index: ID_Nomisferio in C:\wamp\www\sueldos\modificarnomisferio.php on line 35
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

No sé por qué me salta este error la verdad.
Si alguien pudiera echarme una mano me seria una gran ayuda.

Decir también que este mismo error me ocurre a la hora de realizar la eliminación de un dato.
Muchas gracias.
Un saludo
  #2 (permalink)  
Antiguo 04/04/2016, 05:42
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un UPDATE

Pues básicamente en error esta claro

Código PHP:
Ver original
  1. Notice: Undefined index: ID_Nomisferio in C:\wamp\www\sueldos\modificarnomisferio.php on line 35
  2. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
ID_Nomisferio no está definido y al utilizarlo en una sentencia SQL la sentencia construida no es válida.

Por favor utiliza HIGHLIGHT a la hora de postear código, de forma que sea más fácil leerlo.

Puedes probar ha imprimir la consulta antes de ejecutarla, para verificar que recibes todos los datos de forma adecuada.
  #3 (permalink)  
Antiguo 04/04/2016, 06:20
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un UPDATE

Muchas gracias por responder, pero.. La variable no está definida en el código que está arriba?

$ID_Nomisferio = mysqli_real_escape_string ( $con, $_GET['ID_Nomisferio']);

Mediante esta fila no se recupera dicho dato? La verdad que no encuentro el fallo, y me parece aún más extraño cuando a la hora de insertar datos no tengo problema alguno.

Se supone que pinchando en el botón de editar/eliminar se está llamando a la variable ID_Nomisferio.
<td><a href="modificarnomisferio.php?id=<?php echo $ID_Nomisferio; ?>"><img src="imagenes/editar_but.png" alt=""></a><br /><br />
<a href="eliminarnomisferio.php?id=<?php echo $ID_Nomisferio; ?>"><img src="imagenes/eliminar_but.png" alt=""><br/></td>


Pinchando en cualquiera de los dos botones me debería de dirigir a la pagina de modificar y de eliminar, pero me sale el fallo ya comentado.

Alguna solución??
Muchas gracias
  #4 (permalink)  
Antiguo 04/04/2016, 06:35
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un UPDATE

Código PHP:
Ver original
  1. $ID_Nomisferio = mysqli_real_escape_string ( $con, $_GET['ID_Nomisferio']);

Esto no te asegura que ID_Nomisferio este definida y no tenga un valor nulo, si $_GET['ID_Nomisferio'] no existe o es nulo ID_Nomisferio le pasara lo mismo. Pues le asignas un valor que no verifica antes.

Puedes hacer un var_dump a get para ver que valores recibes

Código PHP:
Ver original
  1. echo '<pre>';
  2. echo var_dump($_GET);
  3. echo '</pre>';

Igualmente imprime la consulta para ver como queda antes de ejecutarla y poder revisar si llegan todos los datos como se esperaba.

Código PHP:
Ver original
  1. echo $query;

Y por favor utiliza HIGHLIGHT.

Última edición por xerifandtomas; 04/04/2016 a las 06:43
  #5 (permalink)  
Antiguo 04/04/2016, 20:14
 
Fecha de Ingreso: julio-2011
Ubicación: Los Rios
Mensajes: 145
Antigüedad: 12 años, 9 meses
Puntos: 10
Respuesta: Error al realizar un UPDATE

recuerda que las variables $_GET te llegan al formulario a través del URL, estas seguro que tu formulario llega con este valor en el url es decir lo envias con

tupagina.com/update.php?ID_Nomisferio=algo

si no es asi obviamente nunca tendras el valor de la variable $_GET['ID_Nomisferio']
__________________
___________________________
Si te ayudo mi respuesta dale al +1
  #6 (permalink)  
Antiguo 05/04/2016, 00:29
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un UPDATE

Muchas gracias por las respuestas pero no consigo entender las soluciones que me ofrecéis.

Tengo una página en la que aparecen los datos en forma de tabla.
En esta tabla hay dos botones, uno para modificar y otro para eliminar, pues bien, al pinchar en cualquiera de esos dos botones me sale el fallo que he comentado en el primer mensaje.

Luego está el código que ya he mostrado, el de modificar y su action.

Por cierto, que es HIGHLIGHT?

Gracias.
  #7 (permalink)  
Antiguo 05/04/2016, 01:57
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un UPDATE

El problema es que no se están enviando los datos que necesitas al pinchar en los botines que indicas a la página de actualizar.

El HIGHLIGHT es el desplegable que en el cuadro de mensaje de este foro que pone HIGHLIGHT y que se utiliza para encerrar el código a la hora de postear.

Déjanos el código de los botones, para ver como envías los datos.
__________________
Unset($vida['malRollo']);
  #8 (permalink)  
Antiguo 05/04/2016, 02:20
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un UPDATE

Este fallo ya está solucionado. Mirando ahora he descubierto donde estaba el fallo.
El fallo era el siguiente:
En los botones de modificar/eliminar, el texto era el siguiente:
<td><a href="modificarnomisferio.php?id=<?php echo $ID_Nomisferio; ?>"><img src="imagenes/editar_but.png" alt=""></a><br/><br/>
<a href="eliminarnomisferio.php?id=<?php echo $ID_Nomisferio; ?>"><img src="imagenes/eliminar_but.png" alt=""><br/></td>

Hacia referencia a la variable id, cuando lo que tenía que ser era ID_Nomisferio.
Así están los botones ahora:
<td><a href="modificarnomisferio.php?ID_Nomisferio=<?php echo $ID_Nomisferio; ?>"><img src="imagenes/editar_but.png" alt=""></a><br/><br/>
<a href="eliminarnomisferio.php?ID_Nomisferio=<?php echo $ID_Nomisferio; ?>"><img src="imagenes/eliminar_but.png" alt=""><br/></td>

Ahora me ha surgido otro problema.
Dentro de la página de modificación de un dato, al pulsar sobre el botón con los nuevos datos insertados, me da otro fallo.

Siento no escribir bien el código con el HIGHLIGHT, pero la verdad es que en el desplegable me viene la opción puesta por defecto, pero no se encierra el código.

Si estáis dispuestos a ayudarme con el error que tengo ahora os lo paso sin problema.

Muchas gracias por las contestaciones.
Un saludo.

Última edición por ivan7; 05/04/2016 a las 02:26 Razón: fallo en la edición del texto
  #9 (permalink)  
Antiguo 05/04/2016, 03:46
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un UPDATE

Pues indícanos que es lo que te sucede.

En cuanto al HIGHLIGHT, abre el desplegable seleccionas el tipo de lenguaje que se adapte, en este caso php y en el mensaje te generará 2 etiquetas con corchetes. Escribe el código entre esas dos etiquetas.
Ejemplo:
Código PHP:
Ver original
  1. HIGHLIGHT="PHP" /* mi codigo */ /HIGHLIGHT
Pero con corchetes
__________________
Unset($vida['malRollo']);
  #10 (permalink)  
Antiguo 05/04/2016, 04:17
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un UPDATE

Una vez dentro de la página de modificación, edito los valores para realizar el cambio y me sale el siguiente error:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Nomisferio='1', ID_Categoria='1', Tipo_Mes='28', Sueldo='605.25', Antiguedad='18.08', Dif_Ant='14.39', C_Puesto='716.64', C_Niv_Retr='3.28', C_Destino='395.84', C_Prof_1='120.08', C_Prof_2='240.33', C_Prof_3='320.62', C_Prof_4='440.52', C_Fest_Dia='43.54', C_Fest_Noche='62.20', Hospital='68.81', Nocturnidad='29.00', J_Partida='200.69';Duplicate entry '1' FOR KEY 'PRIMARY'

Me dice que la primary key está duplicada, cosa que no es cierta, ya que aún metiendo un valor que no está en la tabla me sale el mismo error.
Aparte, al ser una modificación, en caso de no variar la clave primaria no debería de darme este fallo no?
Es decir, si el primer dato, el cual tiene en la PK el valor 1, le modifico una cantidad en cualquiera de los demás campos, debería de "dar igual", no?

Muchas gracias.
  #11 (permalink)  
Antiguo 05/04/2016, 05:32
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un UPDATE

El problema es que en tu sentencia al no establecer un condicionante where para la consulta, estas modificando todos los registros de la tabla, y por tanto el PK de todos los registros queda a 1, por lo que se duplica la PK.


Fijate en lo sigiente:
Código SQL:
Ver original
  1. UPDATE tabla SET campo=valor
Código SQL:
Ver original
  1. UPDATE tabla SET campo=valor WHERE mi_pk=1

La primera modifica todos los registros ya que no indicamos cual en concreto queremos modificar

La segunda solo afecta a los registros donde mi_pk sea igual a 1

Espero se entienda, para una explicación más detallada, prueba a preguntar en el subforo de base de datos, ya que esto ya no tiene que ver con php.
__________________
Unset($vida['malRollo']);
  #12 (permalink)  
Antiguo 05/04/2016, 06:09
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un UPDATE

Vale, muchas gracias por la ayuda.

Etiquetas: mysql, select, sql, update
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 21:08.