Foros del Web » Programando para Internet » PHP »

UPDATE dinámico por medio de input text

Estas en el tema de UPDATE dinámico por medio de input text en el foro de PHP en Foros del Web. Hola. Estoy programando un sitio, donde en una de las secciones, un archivo php despliega una serie de input text, la cantidad de input text ...
  #1 (permalink)  
Antiguo 11/11/2004, 13:16
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
Pregunta UPDATE dinámico por medio de input text

Hola.
Estoy programando un sitio, donde en una de las secciones, un archivo php despliega una serie de input text, la cantidad de input text que aparecen, depende del de rows encontrados en una bd.
Por ejemplo: Si hubieron 5 coincidencias en la query, despliego 5 input text.

El siguiente código es el que escribí para que se cree los input text con diferentes nombres:

Código:
$i=1;
While($row=mysql_fetch_object($result)) {
..........................      
            <td>
                 <p align= 'center'><input type='text' name='newO".$i++."'size='1' value=0 maxlength='2'></p>
            </td>";
}
Noten el detalle de name='newO".$i++
Esto hará que mientras la sentencia while se ejecute, los input text que se creen tendrán diferentes nombres, ej: el primero será newO1, el segundo newO2,3,4 y así sucesivamente.
Mi intención es la de insertar números en esos input text, una vez hecho esto, hago un submit, y quiero que todos eso números que escribí, hagan un UPGRADE en una tabla llamada “imagen” en la columna “orden”
Este es el código que escribí para eso (y que no funciona como quiero):

Código:
if($_POST['submit']){
$k=1;
$result=mysql_query("SELECT * FROM imagen") or die("algo está  muy mal");

while($row=mysql_fetch_object($result)){
       $n = $_POST['newO'.$k];
       mysql_query("UPDATE imagen SET orden = $n WHERE PicNum LIMIT 1") or die ("algo está  muy mal ".mysql_error());
       $k++;
       }
}
El único cambio que se produce, es cuando escribo un número en el input text de más abajo (el desplegado más abajo), pero los otros no cambian.
Yo necesito que todos cambien cuando haga el submit.

Si alguien puede ayudarme le agradezco.

Alvaro
  #2 (permalink)  
Antiguo 11/11/2004, 13:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En lugar de llamar a tus input por newO1, newO2 .. etc .. usa nomenclatura de array:

name="new[]";

No necesitas ni contador ..

En PHP recibiras un array en new para que lo proceses como tal .. leyendolo con un bucle foreach() por ejemplo.

Un saludo,
  #3 (permalink)  
Antiguo 11/11/2004, 13:31
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
No me doy cuanta como traducir lo que me dices a mi codigo, ejemplo:

tu me escribiste
>En lugar de llamar a tus input por newO1, newO2 .. etc .. usa nomenclatura de >array:
>name="new[]";

eso donde lo escribo, aquí?:

Código:
<p align= 'center'><input type='text' name="new[]" size='1' value=0 maxlength='2'></p>
Se lo que es un foreach pero tampo me doy cuenta como usarlo.
Si puedes ser un poco más específico, te lo agradezco, muchas gracias

alvaro
  #4 (permalink)  
Antiguo 11/11/2004, 14:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Revisa esta FAQ al respecto ..

Habla de "checbox" pero la técnica es la misma que para otro tipo de campos de un formulario.

http://www.forosdelweb.com/f18/faqs-php-530600-post518710/

Un saludo,
  #5 (permalink)  
Antiguo 11/11/2004, 15:25
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading..........


ratamaster


A lo que se refiere es a que hagas esto.

Código PHP:
$i=1;
While(
$row=mysql_fetch_object($result)) {
..........................      
            <
td>
                 <
p align'center'><input type='text' name=valores[] size='1' value=0 maxlength='2'></p>
            </
td>";

Entonces si desde otra página pones

$losvalores=implode("<br>",$_POST['valores']);
echo $losvalores;

Te imprimirá todos los valores de tus input ya de acá puedes usar eso como a ti te convenga.



connection closed.
__________________

Maborak Technologies
  #6 (permalink)  
Antiguo 12/11/2004, 07:38
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
El ejemplo que me has dado en parte funciona cuando aplico un DELETE, pero tengo errores con el UPDATE.
He escrito esto:
Código:
mysql_query("UPDATE imagen SET orden IN(".$losVal.") WHERE PicNum LIMIT 1") or die ("error ".mysql_error());
pero tengo este error:
Código:
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 'IN(8,1) WHERE PicNum LIMIT 1' at line 1
No entiendo bien como armar la query para un UPDATE, dado que no entiendo la sintaxis de IN, alguien me lo puede explicar

gracias

Alvaro
  #7 (permalink)  
Antiguo 12/11/2004, 08:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El IN() es una función de SQL (de Mysql .. ) y se aplica en el WHERE ("donde") ...

En tu caso .. tienes que tener dos arrays (o indices en una) para definir:
* que campo hay que actualizar (por su ID)
* El valor de ese ID a actualizar.

En ese caso .. ten vendría mejor usar:
Código PHP:
<p align= 'center'><input type='text' name=valores[<? echo $row['id'?>] size='1' value=0 maxlength='2'></p> 
            </td>";
Donde $row['id'] será el identificador de tu registro que estás presentando en ese bucle .. el registro a actualizar (su referencia).

Y el foreach() ahora será tipo:
Código PHP:
foreach ($valores as $id=>$valor){
  
$sql="UPDATE tabla SET campo='$valor' WHERE id='$id'";
  
// etc ...

(y no puedes usar IN() .. ya no aplica para este caso).

Un saludo,
  #8 (permalink)  
Antiguo 12/11/2004, 08:49
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
hay algo que no funciona, tengo algún tipo de error de string con
name=valores[<? echo $row['id'] ?>]

Además, este input text está dentro de un print"<input.....>", y tu me escribes un echo dentro del print, eso funciona?
Creo que entendí tu explicación, pero no pude arreglar este problema
Agradezco tu ayuda

Alvaro

ps:
unas preguntas más:

yo como primary key tengo a PicNum. ¿yo debo sustituir el valor id por PicNum no? algo así : $row['id'] a $row['PicNum']
Luego he sustituido los otros nombres así que ahí no está el error.
  #9 (permalink)  
Antiguo 12/11/2004, 09:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En cuanto a sintax .. puedes usar:

Código PHP:
// resto de PHP
?>
<p align= "center"><input type="text" name="valores[<? echo $row['id'?>]" size="1" value="0" maxlength="2"></p> 
            </td>";
<?
// resto de PHP ...
de hecho así podrías usar tu editor visual de HTML favorito y ver como queda el código HTML que estás usando.

Pero también puedes usar
Código PHP:
echo "<p align= \"center\"><input type=\"text\" name=\"valores[".$row['id']."]\" size=\"1\" value=\"0\" maxlength=\"2\"></p>"
o print .. pero como que en PHP se usa más y se vé mas usar echo ... El caso es que si uso echo .. no veo como queda "visualmente" usando un editor visual como Dreamweaver ese HTML. También hay que "escapar" las comillas dobles (si abrí el echo o print con echo " comilla doble .. ) .. No se trata de no poner comillas o de usar comillas simples sino de -respetar- la sintax HTML como esta diga ...(si hay que usar comillas dobles .. se usan .. con el detalle de usar un \ delante).

-----

Sobre tu "primary key" .. .. puedes usar tu PicNum .. o el campo que gustes .. el caso que debería ser eso "único" y que concuerde con la posterior consulta condicional que vas hacer:

Código PHP:
$sql="UPDATE tabla SET campo='".$valor."' WHERE PicNum='".$PicNum."'"

Un saludo,
  #10 (permalink)  
Antiguo 12/11/2004, 13:57
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
Hay algo que estoy haciendo mal y verdaderamente no se que es, si puedes hacerlo, chequea este sitio donde he subido una prueba de los que estoy haciendo:
http://lafiestarefinal.net/imageWeb/file.php
Notaras que corre medio lento porque las fotos son muy grandes, y otra cosa, una vez que insertas los nuevos valores y haces el submit (el botón "gogo"), tienes que hacer un refresh para ver los resultados (eso lo arreglaré después)
Este es el codigo de ese archivo:

Código:
include("db.php");

$result=mysql_query("SELECT * FROM imagen") or die("algo está  muy mal");//para loopiar en el while

$result2=mysql_query("SELECT des1 FROM imagen") or die("algo está  muy mal");//para imprimir los textos

$result3=mysql_query("SELECT orden FROM imagen") or die("algo está  muy mal");//para imprimir los textos


print "<form method='post' action='file.php'>
       <table border='1' align='left' cellpadding='2'  cellspacing='0'>
       <tr>
           <td>
               <p align='center'>foto</p>
           </td>
           <td>
               <p align='center'>des1</p>
           </td>
           <td>
               orden
           </td>
           <td>
               <p align='center'>valores</p>
           </td>
       </tr>
       <tr>";
print "columna \"orden:\" ";
$counter = 0;
While($row=mysql_fetch_array($result)) {
      $des1=mysql_fetch_object($result2);
      $orden= mysql_fetch_object($result3);
      print $row['orden'].",";
      print "<td>
                 <IMG SRC=\"header.php?PicNum=$row[PicNum]\" border=\"0\" high=\"200\" width =\"100\">
            </td>
            <td>
                 <p align='center'>$des1->des1</p>
            </td>
                 <td><p align='center'>$orden->orden</p>
            </td>
            <td>
                 <p align= \"center\"><input type=\"text\" name=\"valores[".$row['PicNum']."]\" size=\"1\" value=\"\" maxlength=\"2\"></p>
            </td>";
            $counter += 1;

            if ($counter == 1){
                print "</tr>";
                $counter =0;
                }

}
print"</tr></table>";


print"<input type='submit' name='orden' value='gogo'></form>";



if($_POST['orden']){
$valor=implode(',',$_POST['valores']);
print "\$valor: ".$valor;
       mysql_query("UPDATE imagen SET orden='".$valor."'WHERE PicNum='".$PicNum."'") or die ("no podes pibe ".mysql_error());

}

?>
Si insertas valores en los campos, luego de submit, veras que aparece una variable llamada $valor, con los valores que has escrito, esos valores son los que quiero que se despliegen en la columna "orden"

Muchas gracias por tu tiempo y tu ayuda.

Alvaro


pd: la bd!!!:

Código:
CREATE TABLE `imagen` (
  `PicNum` int(11) NOT NULL auto_increment,
  `imagen` blob NOT NULL,
  `des1` varchar(25) NOT NULL default '',
  `des2` varchar(255) NOT NULL default '',
  `seccion` varchar(10) NOT NULL default '',
  `precio` int(11) NOT NULL default '0',
  `orden` int(11) NOT NULL default '0',
  PRIMARY KEY  (`PicNum`)
)

Última edición por ratamaster; 12/11/2004 a las 14:10
  #11 (permalink)  
Antiguo 15/11/2004, 06:15
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
Hola

este es mi último intento

esto es lo que tenía antes:
Código:
if($_POST['orden']){
$valor=implode(',',$_POST['valores']);
print "\$valor: ".$valor;
       mysql_query("UPDATE imagen SET orden='".$valor."'WHERE PicNum='".$PicNum."'") or die ("error ".mysql_error());
}
Después lo cambíé a esto:

Código:
if($_POST['orden']){
$valor=implode(',',$_POST['valores']);
print "\$valor: ".$valor;
       mysql_query("UPDATE imagen SET orden='".$valor."'") or die ("error ".mysql_error());

}
Como se puede ver, he sacado WHERE PicNum='".$PicNum."'"
PicNum es mi campo con valores únicos.
Lo que logro con esto es si cambiar los valores de la columna "orden" (la que yo quiero cambiar), pero solo toma el valor del primer input text y ese valor lo inserta en todas las filas de la columna "orden", no me escribe los valores de los otros campos de texto, los toma pero no los escribe en la bd.
Alguien tiene idea como hacer para que tome todos los valores que escribo en los campos de texto y no solamente el primero?

Alvaro
  #12 (permalink)  
Antiguo 15/11/2004, 08:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No entiendo para que haces tres select (SQL):

$result=mysql_query("SELECT * FROM imagen") or die("algo está muy mal");//para loopiar en el while

$result2=mysql_query("SELECT des1 FROM imagen") or die("algo está muy mal");//para imprimir los textos

$result3=mysql_query("SELECT orden FROM imagen") or die("algo está muy mal");//para imprimir los textos

si con uno sólo tipo:

$result=mysql_query("SELECT * FROM imagen") or die("algo está muy mal");//para loopiar en el while

$result2=mysql_query("SELECT des1 FROM imagen") or die("algo está muy mal");//para imprimir los textos

De hecho con:

$result=mysql_query("SELECT * FROM imagen") or die("algo está muy mal");//para imprimir los textos

Ya tienes todo. (pero esto ya es otro tema).

En tu caso .. recuerda que $PicNum es un array . .ya te dije que NO podías usar ahora el "IN()" de SQL directo (con el implode) .. debes usar bucle foreach() que te mencioné más arriba.

Un saludo,
  #13 (permalink)  
Antiguo 15/11/2004, 08:45
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
Muchas pero muchas pero muchas gracias, funcionó
Corregí lo de las queries que sobraban, tenías razón, lo podía hacer solo con una.

Gracias

Alvaro
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:42.