Actualizar un campo de una consulta con diversos valor

Hola David,
Te dije que tu ayuda había funcionado perfectamente, pero no se que he hecho pero ahora no funciona el formulario. El código que tengo es el siguiente y no consigo que salga la caja para cambiar la nota, puedes indicarme, ¿qué he hecho mal?
<form name="form1" method="post" action="">
<table align="center" width="62%" border="1" font size="2">
<tr>
<td>
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif">Nº</font></div>
</td>
<td>
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif">Alumne/a</font></div>
</td>
<td>
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif">Nota</font></div>
</td>
</tr>
<?php
while($row=mysql_fetch_assoc($entre))
{
echo("
<tr>
<td align=center>".$row["idnota"]."</td>
<td>".$row[cognom1]." ".$row[cognom2].", ".$row[nom]."</td>
<td align=center>"<input name='nota' type='text' value='$row[ang1r]"</td>
</tr>
");
}
}
?>
</table>
</form>
Muchas gracias
Xavier Ruiz

1 respuesta

Respuesta
1
En el echo del while se supone que estás concatenando cadenas entrecomilladas con variables. Se concatenan usando el operador punto '. '
No has seguido esta norma en la última línea larga y por eso el resultado no es una cadena correcta. Te la corrijo:
Echo("
<tr>
<td align=center>".$row["idnota"]."</td>
<td>".$row[cognom1]." ".$row[cognom2].", ".$row[nom]."</td>
<td align=center><input name='nota' type='text' value='$row[ang1r]'></td>
</tr>
");
Muchas Gracias por la respuesta. Fenonomenal, asunto resulto, pero ahora debo haber cometido otro error con el código que muestro consigo que se publique el idnota (identificador del registro de la tabla) i la nota en sí. El formulario funciona perfectamente y envía los datos (puedo verlos con "echo", pero a la hora de actualizar la tabla no lo consigo.
El código del archivo que guarda los datos es:
for ($i=0; $i < count($_POST[nota]); $i++){
echo $_POST[idnota][$i];
echo $_POST[nota][$i];
$sql="UPDATE va_notes SET ang='$_POST[nota][$i]' WHERE idnota='$idnota[$i]'";
$result = $ConTut->Execute($sql) or die($ConTut->ErrorMsg());
}
if ($result) {
echo "Datos modificados";
}
else {
echo "Datos no modificados";
}
Puedes echarme una mano, otra vez. Perdona las molestias, soy autodidacta y como puedes ver con grandes dificultades.
Muchas gracias
Si existe una tabla va-notes, con un campo ang y otro idnota y hay un registro con el valor de idnota correcto, la sentencia SQL sería correcta.
Así que el problema puede estar en el resto. No sé que tienes en el objeto $ConTut. Supuestamente alguna conexión a la base de datos. Se habría de ver si es correcta esa conexión.
Normalmente se usa otro tipo de comandos como mysql_connect y mysql_query, si es que tu base de datos es MySQL. Pero tu puedes tener una de otro tipo.
Asegúrate que la conexión es correcta y que puedes consultar alguna tabla, por ejemplo.
He cambiado tal y como sugerías a la sentencia mysql_query y he probado de conectar con la base de datos, y si conecta.
El problema lo tengo en el código pero no atino donde. Si existen los campos idnota (key) y el campo ang.
for ($i=0; $i < count($_POST[nota]); $i++){
echo $_POST[idnota][$i];
echo $_POST[nota][$i];
$a=mysql_query("UPDATE va_notes SET ang='$_POST[nota][$i]' WHERE idnota='$_POST[idnota][$i]'");
}
if ($a) {
echo "Dades modificades";
}
else {
echo "Dades no modificades";
}
Lo bueno del caso es que cuando ejecuto el archivo con los "echo2 veo idnota y la nota seguidas, ejemplo, 24354657788998107126Dades modificades, incluso el echo de asegurar que la consulta se ha ejecutado.
Pero cuando visualizo con phpmyadmin la tabla, los datos no están actualizados.
¿Se te ocurre alguna cosa?
Muchas gracias David
Si $a es true, es que la sentencia se ha realizado correctamente.
Aunque eso no quiere decir que haya modificado nada: todo depende de la sentencia en WHERE. Puedes probar a hacer un echo mysql_affected_rows() que te dirá exactamente cuantas filas ha modificado la orden SQL. Si vale 1, es correcto (una línea modificada). Si vale 0 es que tu WHERE es demasiado restrictivo, o sea que no se ha encontrado ningún registro EXISTENTE que tenga una idnota como la que pides.
Recuerda que si el registro no existe no puedes hacer un UPDATE si no que debes hacer un INSERT.
En los próximos días me pelearé con lo que comentas, lo desconocía.
Muchas gracias por todo
Xavier
Si ya has terminado con la pregunta.
No he conseguido nada.
Funciona la tabla, consults, etc pero el comando que te mandé no me ejecuta el UPDATE.
Mi WHERE hace coincidir el valor del campo clave con el que lista el archivo, por lo que debiera funcionar perfectament.
Cuando ejecuto directamente sobre phpmyadmin la consulta con el valor de idnota, sin el $_POST[idnota] funciona perfectamente.
Estoy en un callejón sin salida
Muchas Gracias
imprime en pantalla el valor de $_POST["idnota"] y averiguarás porqué no funciona la sentencia. Evidentemente tiene que haber un error ahí.
Gracias por tu interés.
He hecho lo que comentas el código es el siguiente:
echo $_POST["idnota"];
//include_once(_DIR_ADODB."tohtml.inc.php");
for ($i=0; $i < count($_POST[nota]); $i++){
$sql="UPDATE va_notes SET ang='$_POST[nota][$i]' WHERE idnota='$_POST[idnota][$i]'";
$a=mysql_query($sql);
echo $_POST[idnota][$i];
echo $_POST[nota][$i];
}
if ($a) {
echo "Dades modificades";
}
else {
echo "Dades no modificades";
}
Como resultado aaprece en pantalla lo siguiente:
Array23324050708090100120Dades modificades
El primer 2 es la idnota del primer alumno y el primer 3 es la nota, así sucesivamente de dos en dos, idnota-nota, idnota nota
Son notas inventadas per si parece que el formulario envíe los datos pero no se ejecuta el UPDATE
No veo por donde seguir, ¿se te ocurre que estoy haciendo mal?
Muchas gracias
Xavier
Después de ejecutar mysql_query() puedes mostrar el resultado de mysql_affected_rows() que te indicará cuantas filas se han modificado cada vez. Si siempre es 0, quiere decir sencillamente que no hay ningún registro en la tabla que tenga el campo idnota con ese valor.
He insertado el código que me comentas y efectivamente sale 0.
No entiendo lo que pasa, porque los datos idnota, ya están en la tabla.
Hago una consulta de la que extraigo los datos en una tabla con los campos: idnota, alumno i nota.
Esta tabla con tu sugerencia del otro post lo convertí en un formulario con el bucle que me sugeriste. PERFECTO
Por tanto id nota existe y debiera reconocerlo, de echo el formulario lo envía, lo puedo ver con los "echo" que he insertado para verificarlo.
Pero mi pregunta es, que estoy haciendo mal en el UPDATE, ¿qué no me reconoce los datos?
Muchas Gracies y perdona las molestias
¿De qué tipo es el campo idnota?
¿Podrías copiar la estructura aquí?
Otra cosa que puedes hacer es mostrar la variable $sql para ver cómo queda la sentencia en cada ejecución. Y puedes probar la sentencia en phpMyAdmin copiándola.
Lo de copiar la sentencia del $sql del phpmyadin, lo he hecho y funciona en él perfectamente, pero cuando la copio en el archivo no lo hace.
Respecto al campo idnota, es el camo autonumérico de la tabla y al mismo tiempo la clave principal. Tipo INT con 10 caracteres.
No se si sirve de ayuda, pero estoy totalmente despistado.
Muchas Gracias por todo, y por la paciencia.
Xavier
Prueba a poner tu sentencia SQL de la siguiente forma alternativa:
$sql="UPDATE va_notes SET ang='" . $_POST["nota"][$i] . "' WHERE idnota='" . $_POST["idnota"][$i] . "'";

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas