Foros del Web » Programando para Internet » PHP »

Actualizar registro de una db usando switch y case

Estas en el tema de Actualizar registro de una db usando switch y case en el foro de PHP en Foros del Web. Amigos volviendo a un tema que no he podido solucionar, yo necesito actualizar los registros de mi base de datos He configurado un sitio donde ...
  #1 (permalink)  
Antiguo 22/03/2011, 14:25
Avatar de Hamn  
Fecha de Ingreso: marzo-2008
Ubicación: Cali-Colombia
Mensajes: 212
Antigüedad: 16 años, 1 mes
Puntos: 1
Actualizar registro de una db usando switch y case

Amigos volviendo a un tema que no he podido solucionar, yo necesito actualizar los registros de mi base de datos

He configurado un sitio donde efectua pagos en linea
ese sitio me envia los datos de la transaccion en unas variables.

estas son las variables que recibo de la plataforma de pagos
Código PHP:
$fecha date("d.m.Y-H:i:s");
$refVenta $_REQUEST['ref_venta'];
$refPol $_REQUEST['ref_pol'];
$estadoPol $_REQUEST['estado_pol'];
$formaPago $_REQUEST['tipo_medio_pago'];
$banco $_REQUEST['medio_pago'];
$codigo $_REQUEST['codigo_respuesta_pol'];
$mensaje $_REQUEST['mensaje'];
$valor $_REQUEST['valor']; 
de los cuales solo me intereza $estadoPol

yo debo actuzalizar una tabla que la he llamado pedidos_confir

para esto hago un sql, previamnete ya me he conectado sin problemas

Código PHP:
$sql "REPLACE INTO pedidos_confir VALUES ('".$fecha."', '".$refVenta."',
'"
.$refPol."', '".$estadoPol."', '".$formaPago."', '".$banco."', '".$codigo."', '".$mensaje."',
'"
.$valor."')"
ya almacenada esta info, debo actualizar el estado de mi orden en otra tabla llamada order y el campo state.

para esto hice un switch($estadoPol) usando case, para manejar los 4 casos del estado del pedido.

yo comparo los valores y actuzlizo mi tabla de esta forma.
Código PHP:
switch($estadoPol)
{
case 
4$result_a mysql_query("UPDATE order SET state ='pay' WHERE id=".$refVenta ,$conexion);
break;
case 
5$result_c mysql_query("UPDATE order SET state ='unpay' WHERE id=".$refVenta ,$conexion);
break;
case 
6$result_r mysql_query("UPDATE order SET state ='rejected' WHERE id=".$refVenta ,$conexion);
break;
case 
12:$result_p mysql_query("UPDATE order SET state ='pending' WHERE id=".$refVenta ,$conexion);
break;

si alguien me pueda dar ideas de ver que tengo mal...


Aca tengo el archivo completo

Si es necesario verlo.
Código PHP:
<?php
$llave
="xxxxxxxxx";
$usuarioId $_REQUEST['xxxxx'];
$fecha date("d.m.Y-H:i:s");
$refVenta $_REQUEST['ref_venta'];
$refPol $_REQUEST['ref_pol'];
$estadoPol $_REQUEST['estado_pol'];
$formaPago $_REQUEST['tipo_medio_pago'];
$banco $_REQUEST['medio_pago'];
$codigo $_REQUEST['codigo_respuesta_pol'];
$mensaje $_REQUEST['mensaje'];
$valor $_REQUEST['valor'];
//Escriba su Host, por lo general es 'localhost'
$host 'localhost';
//Escriba el nombre de usuario de la base de datos
$login 'db_login';
//Escriba la contraseña del usuario de la base de datos
$password 'xxxxxx';
//Escriba el nombre de la base de datos a utilizar
$basedatos 'db_name';
//conexion a mysql
$conexion mysql_connect($host$login$password);
if(!
$conexion){
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al conectar la base de datos -
"
.mysql_error()."\n";
}
if(!
mysql_select_db($basedatos$conexion)){
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al seleccionar la base de datos -
"
.mysql_error()."\n";
}
// consulta a la bd remplazo el estado actual de la tabla pedidos_confir en el campo estado_pol
$sql "REPLACE INTO pedidos_confir VALUES ('".$fecha."', '".$refVenta."',
'"
.$refPol."', '".$estadoPol."', '".$formaPago."', '".$banco."', '".$codigo."', '".$mensaje."',
'"
.$valor."')";
// select para actualizar la bd "pedidos_confir" y "order 'unpay','pay'.'rejected','pending'"
switch($estadoPol)
{
case 
4$result_a mysql_query("UPDATE order SET state ='pay' WHERE id=".$refVenta ,$conexion);
break;
case 
5$result_c mysql_query("UPDATE order SET state ='unpay' WHERE id=".$refVenta ,$conexion);
break;
case 
6$result_r mysql_query("UPDATE order SET state ='rejected' WHERE id=".$refVenta ,$conexion);
break;
case 
12:$result_p mysql_query("UPDATE order SET state ='pending' WHERE id=".$refVenta ,$conexion);
break;
}
$result mysql_query($sql);
if (!
$result) {
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al ejecutar el query (".$sql.") la
base de datos - "
.mysql_error()."\n";
}
if(
strlen($mensajeLog)>0){
$filename $_SERVER["DOCUMENT_ROOT"]."/confirmacion.txt";
$fp fopen($filename"a");
if(
$fp) { fwrite($fp$mensajeLogstrlen($mensajeLog));
fclose($fp);
}
}
?>
__________________
De que vale la vida si cuando la tenemos parece estar muerta.

http://www.somoscali.com/
  #2 (permalink)  
Antiguo 22/03/2011, 14:59
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Actualizar registro de una db usando switch y case

Pero, te saca error no te actualiza, queres hacerlo de otra forma... que es lo que necesitas en realidad ?
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 22/03/2011, 15:39
Avatar de Hamn  
Fecha de Ingreso: marzo-2008
Ubicación: Cali-Colombia
Mensajes: 212
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Actualizar registro de una db usando switch y case

Yo creo que tengo un solo problema, es que en el form que envio los datos a Pagos Online , no estoy enviando el id de la oferta
voy hacer los cmabiso y les comento, ya que uso este mismo sistema en una web basada en joomla y virtuemart y funciona perfectamente.

ahora regreso.
__________________
De que vale la vida si cuando la tenemos parece estar muerta.

http://www.somoscali.com/
  #4 (permalink)  
Antiguo 22/03/2011, 16:25
Avatar de rfadgrmm  
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Actualizar registro de una db usando switch y case

Hola Hamn,

Por lo que pude interpretar tu código, el campo ID de la tabla order es numérico, mientras que en tu tabla pedidos_confir el campo (donde guardar tu variable $refVenta) es del tipo texto (string), puede que el error proceda y/o nace de ahí al tratar de buscar un dato del tipo numérico comparando con datos del tipo cadena... Igual caso es con la variable $estadoPol.

Saludos
__________________
"Viajando en el espacio profundo, de nova en nova, y sorteando a veces uno que otro agujero negro..." Peru@D
  #5 (permalink)  
Antiguo 22/03/2011, 18:41
Avatar de Hamn  
Fecha de Ingreso: marzo-2008
Ubicación: Cali-Colombia
Mensajes: 212
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Actualizar registro de una db usando switch y case

Hola, si corregi ese problema en el form de envio de los datos.

he cambiado el valor que envio por el id de mi orden en esta variable

$refVenta="$order_id";


He creado un archivo log, para ver los errores

estas son las ultimas 2 lineas

Código PHP:
[2011-03-22 18:56:24Error al ejecutar el query (REPLACE INTO pedidos_confir VALUES ('22.03.2011-18:56:24''52',
'67826693''5''''''2''',
'99000.00')) la
base de datos 
Column count doesn't match value count at row 1
[2011-03-22 18:59:59] Error al ejecutar el query (REPLACE INTO pedidos_confir VALUES ('
22.03.2011-18:59:59', '1300830107',
'
67813444', '5', '', '', '20', '',
'
99000.00')) la
base de datos - Column count doesn'
t match value count at row 1 
he logrado introducir el id de la orden y enviarla a pagos online.

ahora con eso ya tengo capturado el id de la orden pero debo actulizar mis dos tablas, en pedidos_confir el campo estado_pol y en order el campo state.


Estos son los valores que recibo:

A=Aceptado; Valor 4
C=Cancelado; Valor 5
R=Rechazado; Valor 6
P=Pendiente; Valor 12


los transformo en el case de esta forma

Hago el case y el reultado lo trasformo en esta linea.

case 4: $result_a = mysql_query("UPDATE order SET state ='pay' WHERE id=".$refVenta ,$conexion);
break;

esto no me esta funcionando ya que no tengo bien los valores en la tabla pedidos_confir
__________________
De que vale la vida si cuando la tenemos parece estar muerta.

http://www.somoscali.com/
  #6 (permalink)  
Antiguo 23/03/2011, 06:29
Avatar de Hamn  
Fecha de Ingreso: marzo-2008
Ubicación: Cali-Colombia
Mensajes: 212
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Actualizar registro de una db usando switch y case

Solucionado, con la ayuda de un amigo cambiamos el query

Código PHP:
switch ($estadoPol)
{
    case 
"4"$estado_text='pay'; break;
    case 
"5"$estado_text='unpay'; break;
    case 
"6"$estado_text='rejected'; break;
    case 
"12"$estado_text='pending'; break;
}
$sql_update="UPDATE `order` SET state='$estado_text' WHERE id={$refVenta}";
$resultado_x mysql_query($sql_update$conexion);
if (!
$resultado_x) {
    
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al ejecutar el query (".$sql_update.") la base de datos - ".mysql_error()."\n";
}
$sql "REPLACE INTO pedidos_confir VALUES ('hugo','{$fecha}', '{$refVenta}', '{$refPol}', '{$estadoPol}', '{$formaPago}', '{$banco}', '{$codigo}', '{$mensaje}','{$valor}', '[email protected]')"
de esta forma me funciona perfectamente.

Gracias a todos...
__________________
De que vale la vida si cuando la tenemos parece estar muerta.

http://www.somoscali.com/

Etiquetas: case, registro, switch
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 03:19.