Actualizar varios campos y registros de una tabla en mysql en una sola consulta
Foto-Carlos-Dk

Actualizar varios campos y registros de una tabla en mysql en una sola consulta

Bienvenidos a Ver Tutoriales.com en esta ocasión voy a aclarar una duda enviada por Jacky.

En el correo me preguntaba como podía actualizar varios campos en una misma consulta con PHP utilizando Mysql para ahorrarse el tener que enviar diferentes consultas a la base de datos y de esa manera lanzar solo una y optimizar la aplicación.

Antes de nada aclarar, que PHP es un lenguaje y MySQL un gestor de base de datos, por lo que la consulta que vamos a implementar es util para cualquier lenguaje que ataque a dicha base de datos. Es decir, PHP es la herramienta con la que atacamos a esa base de datos, pero la sentencia SQL es propia del lenguaje de la base de datos, en este caso MySQL.

Una vez hecha la aclaración continuemos con la respuesta, que como vereis es muy sencilla. A diferencia de la  consulta simple que sería de esta manera:

UPDATE tabla SET campo = ‘valor’ WHERE condición

Actualizamos utilizando dos valores de esta otra manera

UPDATE tabla SET campo = ‘valor’, campo2 = ‘valor2′ WHERE condición

Así de sencillo, puedes poner tantos campos como quieras siempre y cuando los tenga la tabla, y la consulta que  quieras poner, si es que no quieres actualizar la tabla completa.

Espero que os resuelva la duda a más de uno!

Un saludo!

Te puede interesar:

41 Respuestas

  1. retwert

    junio 22nd, 2011 a 8:48 pm

    1

    NO SIRVE, a ver si pones bien el título, ¿varios registros a la vez? ¿sabes lo que son los registros en una tabla?

  2. VideoTutoriales

    junio 23rd, 2011 a 9:31 am

    2

    ¿El qué no te sirve? :)

  3. yomerenguez

    octubre 11th, 2011 a 9:05 pm

    3

    No sirve, el título es engañoso.
    lo que se sugiere con él es actualizar varios registro con una sola sentencia

  4. VideoTutoriales

    octubre 11th, 2011 a 9:18 pm

    4

    Yomerenguez, si realizas la siguiente consulta:

    UPDATE artículos SET iva = ’18′, dto = ’5′ WHERE familia = “colchones”

    Actualizará todos los registros de la tabla artículos con el iva al 18 y el dto con un 5 donde el campo familia sea igual a colchones, es decir, Actualizar varios campos y registros de una tabla en mysql en una sola consulta es lo que hace la linea de MySQL anterior.

    Sino ha resuelto la duda que ibas buscando puedes preguntar y gustosamente te daremos solución.

    Un saludo!

  5. sdgsdg

    octubre 19th, 2011 a 7:30 pm

    5

    y como carajos actualizo 58 registros de 1 sola columna?

  6. VideoTutoriales

    octubre 20th, 2011 a 2:13 pm

    6

    La consulta anterior
    UPDATE artículos SET iva = ’18′ WHERE familia = “colchones”

    Actualizaría 1, 58 o 1000 registros siempre y cuando cumpla la condición de que la familia = “colchones”

    Si solo tiene una columna, puedes modificar el where para que sea sobre esa columna u omitirla para que modifique todos los registros, es decir:

    Pongamos que tenemos la columna “jaula” y en ella guardamos diferentes animales, gatos, perros y ratones. y queremos que todos los perros sean loros pues sería algo así:

    UPDATE animales SET jaula = ’loro′ WHERE jaula = ‘perro’;

    En este ejemplo, animales es la tabla, suponemos que tenemos solo la columna jaula y que contiene un string que guarda una especie de animal, entre ellos perro que a partir de la consulta anterior se modificará a loro.

    Espero que esté más claro tr.

    Un saludo!

  7. Javier Garcia

    mayo 11th, 2012 a 2:53 pm

    7

    Que idiotes, varios registros, no varios CAMPOS! que titulo tan mal puesto

  8. VideoTutoriales

    mayo 12th, 2012 a 10:25 am

    8

    Quizás debieras de repasar términos:

    Un registro es un conjunto de campos que contienen los datos que pertenecen a una misma repetición de entidad.

    Si lo que buscas es modificar el nombre del campo o columna, o si quieres añadir nuevos campos, también estaría correcto utilizar el término.

    Un saludo!

  9. avispa

    junio 3rd, 2012 a 12:16 pm

    9

    Animo, el javier garcia no tiene ni @#~€ idea, muchas gracias por los tutoriales

  10. VideoTutoriales

    junio 4th, 2012 a 7:34 pm

    10

    Gracias Avispa

    Seguiremos formando, así que invitado estás a compartir también tus conocimientos! :)

  11. alfred

    junio 20th, 2012 a 6:41 pm

    11

    pregunta, similar a la anterior , como se puede actualizar distintos campos si la condicion para cada campo es diferente,

    ejemplo
    tabla registros

    id nombre
    1 cualquiera
    2 otro diferente
    3 distinto a los otros dos

    se desea actualizar los nombres, se puede hacer en un solo update?

  12. VideoTutoriales

    junio 20th, 2012 a 8:07 pm

    12

    Si hablamos de diferentes condiciones, como es comprensible, cada WHERE actuará sobre su condición (esto para la clausula UPDATE, DELETE y SELECT) y actualizará todos los campos que cumplan esa condición. Condición que puede incluir varias condiciones por supuesto.

    En el caso que expones, se podrían modificar TODOS los nombres sin condición (actualizaría todos los registros) o los que cumplieran el WHERE.

    Actualmente no conozco ninguna sentencia que realice lo que estás indicando (al menos en mysql). Si quieres actualizar diferentes registros con diferentes condiciones, tendrás que ejecutar una sentencia para cada actualización.

    Os dejo la documentación de MySQL que es el gestor que utilizo:
    http://dev.mysql.com/doc/refman/5.0/es/update.html

    Si existe en otro lo desconozco, pero si alguien lo sabe, creo que más de uno estaría interesado.

  13. Daniel

    julio 25th, 2012 a 1:30 am

    13

    en un inventario como actualizo un registro y rebajo la existencia al mismo tiempo, es posible en mysql ??

  14. VideoTutoriales

    julio 25th, 2012 a 7:23 am

    14

    Es posible actualizar varios campos de un registro, solo hay que añadir una operación de decremento a uno de ellos.

    UPDATE tabla SET campo = ‘valor’, campo2 = campo2 – 1 WHERE condición

  15. carlos

    octubre 16th, 2012 a 8:48 pm

    15

    Pregunta: tengo una base de datos para una caja de ahorro la cual debo actualizar mensualmente el campo del acumulado ( que parte de la multiplicacion del sueldo del empleado por los meses). el mismo sera diferente para cada afiliado(Por supuesto no todos ganan igual) puedo sumar y sustituir el valor en los campos tomando en cuenta que no todos los afiliados tienen el mismo aporte a la caja de ahorro e logrado actualizar pero el valor que me toma es el mismo para todos los registros de los campos. trabajo con PHP espero entiendas, gracias de antemano.

  16. VideoTutoriales

    octubre 16th, 2012 a 8:54 pm

    16

    Me gustaría ayudarte, pero no termino de comprender lo que quieres hacer, expón mejor los campos que tienes en la tabla y lo que quieres lograr.

    Un saludo!

  17. Eduardo

    noviembre 23rd, 2012 a 3:39 pm

    17

    bonito el codigo, pero como me sirve para editar a mi gusto un registro de bases de datos por pantalla/pagina web de usuario? ahi veo que solo permite editarlos por medio de codigo, y no de usuario como se requiere en verdad, osea que el codigo no cumple las exigencias requeridas para el titulo del post, porque no da muestra de donde podria editar el usuario, solo el programador.

  18. VideoTutoriales

    noviembre 25th, 2012 a 11:26 am

    18

    Creo que la crítica está basada en el desconocimiento.

    ¿Qué es lo que quieres hacer? Las modificaciones han de ser atacadas desde código, otra cosa es que le pidas los datos entrantes a un usuario (lo normal de una aplicación) y luego realices la modificación desde código.

    La magia no existe en el mundo lógico :)

  19. Mariza

    noviembre 29th, 2012 a 5:21 pm

    19

    Como actualizar los campos de una tabla dependiendo de dos parametros seleccionados de un combo box

  20. VideoTutoriales

    noviembre 29th, 2012 a 5:47 pm

    20

    Hola Mariza, tal y como expones solo tienes que controlar o por combo.listindex o combo.text y según tengas montar la SQL que ataque a la base de datos.

    Un saludo!

  21. Mariza

    noviembre 29th, 2012 a 5:58 pm

    21

    Al seleccionar el combo me carga en una grilla los datos que tengo almacenados en la base de datos, a estos los modifico y quiero guardar los cambios, como logro hacerlo si los datos que escojo del combox son dos parámetros unidos y que al cargar la tabla debo validar que guarde sobre los valores de este parametro, después de haberlos convertido en int y char (Ej: 2012 – Agencia)

  22. VideoTutoriales

    noviembre 29th, 2012 a 6:55 pm

    22

    Si los has unido, tendrás que separarlos, si sabes que están separados por un guión “-” podrás utilizar split

    http://www.vertutoriales.com/index.php/split-en-visual-basic-6-vb6-y-explode-en-php/

    Una vez tengas el array ya solo se trata de actualizarlos con update

  23. Maritza

    noviembre 29th, 2012 a 10:32 pm

    23

    * Parametro:
    @AñoAgencia =
    SELECT añoAgencia=convert(char(4),a.año) + ‘ – ‘ + b.Agencia_Nombre
    from Opita.dbo.AñoAgencia_Calendario a
    inner join Opita.Nomina.Agencia b on a.agencia=b.Agencia_Codigo
    and a.Laboral_Pago=’L’ and a.diligenciado=0
    group by año,Agencia_Nombre

    (@AñoAgencia char(30))

    * Convert:
    declare @Año int
    declare @Agencia int
    set @Año = convert(int,substring(@AñoAgencia,1,4))
    set @Agencia = (select agencia from opita.dbo.AñoAgencia_Calendario
    where nombreAgencia=substring(@AñoAgencia,8,(len(@AñoAgencia)-7)))

    * Campos De La Tabla:
    @Año,@Agencia,Mes,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,Nombre,Fecha_Creacion

    ¿Como Guardo La Actualizacion Que Se Le Hace En Un Datagridview A Los Campos d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,Nombre,Fecha_Creacion Cuando Sea Seleccionado el parametro @AñoAgencia = ’2012 – Agencia’ de un combo box.

  24. VideoTutoriales

    noviembre 29th, 2012 a 10:51 pm

    24

    A ver si lo he entendido bien

    Al seleccionar “2012 – Agencia” se actualizan los campos en un datagrid, estos se pueden modificar y quieres que se guarden al pulsar por ejemplo un botón de guardar o en el momento de modificarlo (da igual el evento donde lanzar la operación de guardado) Si es así, solo tendrás que realizar un update de la siguiente manera:

    Extraemos primero los datos de año y agencia para insertarlos en la consulta de actualización:

    iAño = left$(añoagencia, 4) //para extraer el año
    sAgencia = mid$(añoagencia, 7) // para extraer la agencia

    UPDATE tabla set d1 = grid1, d2 = grid2, … where Agencia = ” + sAgencia + ” and Año = “+ iAno

    A ver si es lo que necesitas. Un saludo!

  25. Maritza

    noviembre 29th, 2012 a 11:08 pm

    25

    Si, es eso, Pero No Me Funciona En Visual Studio 2010, Con Lenguaje De Programación Visual Basic.

    Gracias Por La Ayuda

  26. VideoTutoriales

    noviembre 30th, 2012 a 8:51 am

    26

    ¿Qué no te funciona exactamente?

    Te recomiendo que hagas un punto de ruptura antes de realizar la operación y traces linea por linea con el debugger para ver lo que hace la apli y localizar el problema.

    Un saludo!

  27. Maritza

    noviembre 30th, 2012 a 4:59 pm

    27

    Dim ActualizarCalendarioLaboral As String = “Exec Opita.Nomina.Proc_UpdateCalendario @AñoAgencia=’” & Me.añoAgencia.ToString & “‘ ”

    Dim daActualizarCalendario As New SqlDataAdapter(ActualizarCalendarioLaboral, conexion)
    Dim dsActualizarCalendario As New DataSet
    daActualizarCalendario.Fill(dsActualizarCalendario)

    Dim ActualizarCalendario As String = “UPDATE Opita.Nomina.CalendarioLaboral SET d1 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(3).Value.ToString() & “‘ , d2 =’” & Me.DGV_CalendarioLaboral.Rows(i).Cells(4).Value.ToString() & “‘ , d3 =’” & Me.DGV_CalendarioLaboral.Rows(i).Cells(5).Value.ToString() & “‘ , d4 =’” & Me.DGV_CalendarioLaboral.Rows(i).Cells(6).Value.ToString() & “‘ , d5 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(7).Value.ToString() & “‘ , d6 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(8).Value.ToString() & “‘ , d7 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(9).Value.ToString() & “‘ , d8 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(10).Value.ToString() & “‘ , d9 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(11).Value.ToString() & “‘ , d10 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(12).Value.ToString() & “‘ , d11 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(13).Value.ToString() & “‘ , d12 ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(14).Value.ToString() & “‘ , d13 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(15).Value.ToString() & “‘ , d14 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(16).Value.ToString() & “‘ , d15 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(17).Value.ToString() & “‘ , d16 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(18).Value.ToString() & “‘ , d17 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(19).Value.ToString() & “‘ , d18 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(20).Value.ToString() & “‘ , d19 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(21).Value.ToString() & “‘ , d20 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(22).Value.ToString() & “‘ , d21 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(23).Value.ToString() & “‘ , d22 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(24).Value.ToString() & “‘ , d23 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(25).Value.ToString() & “‘ , d24 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(26).Value.ToString() & “‘ , d25 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(27).Value.ToString() & “‘ , d26 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(28).Value.ToString() & “‘ , d27 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(29).Value.ToString() & “‘ , d28 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(30).Value.ToString() & “‘ , d29 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(31).Value.ToString() & “‘, d30 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(32).Value.ToString() & “‘, d31 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(33).Value.ToString() & “‘, Nombre = ‘” & Form2.codoperador & “‘, Fecha_Creacion = GetDate() ) FROM Opita.Nomina.TmpCalendarioLaboral WHERE Año = @Año And Agencia = @Agencia”
    ‘ ListaCalendario.Add(ActualizarCalendario)

  28. VideoTutoriales

    noviembre 30th, 2012 a 5:58 pm

    28

    mmmm ¿y el problema? :D

    Hay demasiado código para no saber el error que te da :)

  29. Maritza

    noviembre 30th, 2012 a 6:08 pm

    29

    Jajaja, Q pena contigo!!!

    Pues Que No Me Actualiza

    :(

  30. VideoTutoriales

    noviembre 30th, 2012 a 6:18 pm

    30

    ¿Has probado a trazar y ver exactamente la SQL que lanzas?

    Con Visual Studio puedes detener el programa en esa linea y ver exactamente la SQL que va a atacar la base de datos. Posiblemente no está realizando bien el Where o no lleva los parámetros que crees que llevan.

  31. Maritza

    noviembre 30th, 2012 a 8:52 pm

    31

    System.Data.SqlClient.SqlException was caught
    Class=15
    ErrorCode=-2146232060
    LineNumber=1
    Message=Sintaxis incorrecta cerca de ‘L’.
    Falta o está vació un nombre de objeto o columna. Compruebe que todas las columnas de las instrucciones SELECT INTO tienen un nombre. Para otras instrucciones, busque si hay nombres de alias vacíos. No se permiten los alias definidos como “” o []. Agregue un nombre o un espacio como nombre de alias.
    Comilla no cerrada después de la cadena de caracteres ”.
    Number=102
    Procedure=””
    Server=PASANTEUH-2-PC\PRUEBAS
    Source=.Net SqlClient Data Provider
    State=1
    StackTrace:
    en System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
    en System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
    en System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
    en System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
    en System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
    en System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
    en System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
    en Opita.CalendarioLaboral.EjecutarTransaccion(ArrayList ListaSentencias) en D:\COONFIE\IngRicardo\Opita\simulador de credito\CalendarioLaboral.vb:línea 224
    InnerException:

  32. VideoTutoriales

    diciembre 1st, 2012 a 11:39 am

    32

    Está claro que el problema está la consulta SQL, pero la estructura está aparentemente bien, prueba una cosa:
    - Crea un punto de interrupción del programa justo donde se asigna la cadena ActualizarCalendario
    - Asigna la cadena y saca el valor de ActualizarCalendario y lo pegas por aquí para que veamos que envías a la base de datos.

    Sino sabes crear el punto de interrupción: Vete al editor de código, pincha con el ratón en el margen izquierdo de la linea donde está la asignación (debe de aparecer un punto)

    Sino lo consigues:
    - Crea una caja de texto
    - Una vez asignada la variable ActualizarCalendario, asignala a la caja de texto.
    - Copia lo que hay en la caja de texto y pegalo por aquí.

    Necesito ver lo que se envía a la base de datos.

  33. Maritza

    diciembre 3rd, 2012 a 2:31 pm

    33

    EN EL PRIMER CICLO:
    “UPDATE Opita.Nomina.CalendarioLaboral SET Mes = ‘Enero ‘ , d1 = ‘P’ , d2 =’L’ , d3 =’L’ , d4 =’L’ , d5 = ‘L’ , d6 = ‘L’ , d7 = ‘L’ , d8 = ‘L’ , d9 = ‘L’ , d10 = ‘L’ , d11 = ‘L’ , d12 = ‘L’ , d13 = ‘L’ , d14 = ‘L’ , d15 = ‘L’ , d16 = ‘L’ , d17 = ‘L’ , d18 = ‘L’ , d19 = ‘L’ , d20 = ‘L’ , d21 = ‘L’ , d22 = ‘L’ , d23 = ‘L’ , d24 = ‘L’ , d25 = ‘L’ , d26 = ‘L’ , d27 = ‘L’ , d28 = ‘L’ , d29 = ‘L’, d30 = ‘L’, d31 = ‘L’, Nombre = ”, Fecha_Creacion = GetDate() WHERE @AñoAgencia=’2012 – AGENCIA LA PLATA’”

  34. Maritza

    diciembre 3rd, 2012 a 2:31 pm

    34

    SEGUNDO CICLO:
    “UPDATE Opita.Nomina.CalendarioLaboral SET Mes = ‘Febrero ‘ , d1 = ‘L’ , d2 =’L’ , d3 =’L’ , d4 =’L’ , d5 = ‘L’ , d6 = ‘L’ , d7 = ‘L’ , d8 = ‘L’ , d9 = ‘L’ , d10 = ‘L’ , d11 = ‘L’ , d12 = ‘L’ , d13 = ‘L’ , d14 = ‘L’ , d15 = ‘L’ , d16 = ‘L’ , d17 = ‘L’ , d18 = ‘L’ , d19 = ‘L’ , d20 = ‘L’ , d21 = ‘L’ , d22 = ‘L’ , d23 = ‘L’ , d24 = ‘L’ , d25 = ‘L’ , d26 = ‘L’ , d27 = ‘L’ , d28 = ‘L’ , d29 = ‘L’, d30 = ‘L’, d31 = ‘L’, Nombre = ”, Fecha_Creacion = GetDate() WHERE @AñoAgencia=’2012 – AGENCIA LA PLATA’”

  35. Maritza

    diciembre 3rd, 2012 a 2:34 pm

    35

    Y ASÍ SUCESIVAMENTE HASTA EL MES DE DICIEMBRE Y TOMANDO LOS VALORES EDITADOS. PERO NO ME ACTUALIZA O GUARDA EN LA TABLA DE LA BASE DE DATOS.

  36. Maritza

    diciembre 3rd, 2012 a 2:36 pm

    36

    ERROR:
    Debe declarar la variable escalar “@AñoAgencia”.

  37. VideoTutoriales

    diciembre 3rd, 2012 a 2:49 pm

    37

    La respuesta está dada más arriba
    iAño = left$(añoagencia, 4) //para extraer el año
    sAgencia = mid$(añoagencia, 7) // para extraer la agencia

    UPDATE tabla set d1 = grid1, d2 = grid2, … where Agencia = ” + sAgencia + ” and Año = “+ iAno

    El problema es que estás utilizando una variable de tipo numérico y estás realizando la where con una cadena entera
    @AñoAgencia=’2012 – AGENCIA LA PLATA’

    Tienes que separar el where con dos variables como está explicado, y pos supuesto utilizar el nombre del campo de año y agencia, @AñoAgencia te da el error por que no existirá en la tabla y menos con @ :)

  38. Maritza

    diciembre 3rd, 2012 a 8:43 pm

    38

    ERROR EN LEFT$:

    Error 3 ‘Public Property Left As Integer’ has no parameters and its return type cannot be indexed.

  39. VideoTutoriales

    diciembre 4th, 2012 a 9:14 am

    39

    Maritza… ¿conoces las funciones de cadena? ¿Sabes cortar una cadena comenzando desde la izquierda o desde un punto hasta otro?

    El código que te he pasado es un ejemplo de como hacerlo, en mi caso estoy utilizando vb aunque muchos comparten el método left y mid, son muy comunes, no sé que lenguaje estás utilizando, pero busca dentro del tuyo propio a realizar esa operación.

    Lo que estás haciendo es tomar la cadena “2000 – Agencia” y separarla en año = 2000 y agencia = “Agencia” para poder realizar el WHERE en la base de datos!

    Como te digo, la solución está dada, si quieres puedes averiguarlo, si copias y pegas directamente es normal que no te funcione, investiga un poco y no esperes que te lo programen otros, si es eso lo que buscas, creo que tendrías que estudiar otra cosa :D

  40. Roberto

    diciembre 12th, 2012 a 6:25 pm

    40

    Hola, me pidieron que cambiara un campo de texto por un select,para que los usuarios de la web pudieran escoger entre dos opciones, buscando en el codigo medi cuenta de que el valor de ese campo lo daba una variable,la cual lo recogia de una tabla de una base de datos, porlo que aun despues de cambiar para que en vez de verse solo como un simple campo de texto se viera como un select con sus dos respectivas opciones el unico valor que carga es el que la variable recoge por defecto desde la base de datos, realmente no se mucho de php, aqui les pongo como esta el codigo original

    public function ocd_list( )
    {
    $type_m = $this->db->GetSetting( “title”, 0 );
    $st = $this->GetGP( “st”, “” );
    $message = “”;
    if ( $st == “ok” )
    {
    $message = “Thank you. The settings were successfully updated”;
    }
    if ( $st == “no” )
    {
    $message = “Sorry. Fill in all the fields please”;
    }
    switch ( $type_m )
    {
    case 1 :
    $this->mainTemplate = “./templates/title.tpl”;
    $this->pageTitle = “title Settings”;
    $this->pageHeader = “title Settings”;
    $valor = $this->db->GetOne( “Select valor From `”.$this->object.”` Where matrix_id=’2′ “, 0 );
    $valor = “”;

    $this->data = array(
    “MAIN_ACTION” => $this->pageUrl,
    “MAIN_HEADER” => $this->pageHeader,
    “MAIN_MESSAGE” => $message,
    “EG” => $valor
    );
    break;
    //entre estos dos va otro pedazo pero no tiene nada que ver con lo que quiero //hacer.
    public function ocd_update_title( )
    {
    $valor =””;

    $valor = $this->GetValidGP( “valor”, “Valor”, VALIDATE_NUMERIC_POSITIVE );
    if ( 0 errors['err_count'] )
    {
    $this->Redirect( $this->pageUrl.”?st=no” );
    }
    else
    {
    $this->db->ExecuteSql( “Update `”.$this->object.”` Set valor=’{$valor}’ Where matrix_id=2″ );
    $this->Redirect( $this->pageUrl.”?st=ok” );
    }
    }
    ese es el original,ahora para que salga en vez de un textfield el select solo cambie el $valor= por $valor=las opciones
    se ve como quiero pero al dar clic en submit me dice que debo rellenar todos los campos, este error lo desactive desactivando:
    // $valor = $this->GetValidGP( “valor”, “Valor”, VALIDATE_NUMERIC_POSITIVE );
    pero de todas formasaunque no de error solo envia el valor que esta en la base de datos, a la cual accedi e inserte otro con el mismo nombre de campo solo que le di matrix_id=’3′, y probe poner
    $valor = $this->db->GetOne( “Select valor From `”.$this->object.”` Where matrix_id=’2′ And matrix_id=’3′ “, 0 );
    y
    $this->db->ExecuteSql( “Update `”.$this->object.”` Set valor=’{$valor}’ Where matrix_id=’2′ And matrix_id=’3′ ” );
    creo que es en esta ultima parte donde no estoy correcto pues lo que necesito es que en dependencia de la opcion escogida en el select se haga select y update al campo correspondiente a el valor escogido por el usuario, realmente que necesito ideas para ver como resuelvo esto, de antemano gracias…..

  41. VideoTutoriales

    diciembre 13th, 2012 a 9:41 am

    41

    Veamos si entendí bien, tienes una tabla con N valores y tienes que cargarlos en un ¿ < select > < /select > ?

    Y luego dependiendo del valor que seleccionen en el select realice una operación u otra?

    Si es así, un select lo rellenas así:

    < select name="subseccion" id="subseccion">

    < ? php
    $consulta = mysql_query("SELECT * FROM secciones ORDER BY id");
    while ($registro = mysql_fetch_array($consulta))
    {
    ?>

    < ? php
    }
    ? >
    < /select>

    En este caso estamos viendo diferentes secciones.

    Me faltaría la otra parte, pero me gustaría que explicaras un poco mejor qué es lo que necesitas, en vez de poner tanto código :)


Insertar al RSS los comentarios de esta entrada

Escribe tu comentario