Foros del Web » Programando para Internet » PHP »

Scrip PHP que haga varias Funciones

Estas en el tema de Scrip PHP que haga varias Funciones en el foro de PHP en Foros del Web. Hola de verdad que he tenido ya muchos dolores de cabeza y preferi realizar el Scrp por la via lenta o basica, y por esta ...
  #1 (permalink)  
Antiguo 02/02/2009, 01:27
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Ubicación: Maracay edo Aragua Venezuela
Mensajes: 48
Antigüedad: 15 años, 7 meses
Puntos: 3
Scrip PHP que haga varias Funciones

Hola de verdad que he tenido ya muchos dolores de cabeza y preferi realizar el Scrp por la via lenta o basica, y por esta via por lo menos el paso 1 de los requerimientos ya esta funcionando

Explico lo que he estado haciendo.

Primero pido los datos desde un php que es procesado por otro php y asi si me esta enviando los datos a la tabla con datos, ya no envia datos vacios y perfectamente esta operativo lo que a recopilacion de datos para 1 tabla de la BD se refiere.

Este es el codigo del php que pide los datos HE LIMPIADO EL CODIGO SOLO ESTA EL FORMULARIO

Código PHP:
<?php
/*
  FORMULARIO PARA PAGOS DE TU PEDIDO

*/
  
require('includes/application_top.php');
// ANTES SE DEBE INICIAR SESION
  
if (!tep_session_is_registered('customer_id')) {
    
$navigation->set_snapshot();
    
tep_redirect(tep_href_link(FILENAME_LOGIN'''SSL'));
  }
?>
<html>
<head>
<title>Area de Pagos</title>
</head>
<body>
<h1>Pago de Su Pedido Online</h1>
<form action="procesarpagos.php" method="post">
<table border=0>
<tr><td>
<p align="right">Numero de Pedido:</td><td><input type=text name=pedido maxlength=13 size=13><br></td></tr>
<tr><td>
<p align="right">Metodo de Pago:</td><td> <input type=text name=metodo maxlength=30 size=30><br></td></tr>
<tr><td>Transferencia desde:</td><td> <input type=text name=transferencia maxlength=60 size=30><br></td></tr>
<tr><td>Numero de Planilla</td><td><input type=text name=planilla maxlength=15 size=10></td></tr>
<tr><td>Monto Cancelado</td><td><input type=text name=monto maxlength=7 size=7><br></td></tr>
<tr><td colspan=2>
<input type=submit value="Declara tu Pago Aqui" style="float: right"></td></tr>
</table>
</form>
</body>
</html>
Ahora el PHP que procesa este dato es el siguiente:

Código PHP:
<?php
require('includes/application_top.php');
// ANTES SE DEBE INICIAR SESION
  
if (!tep_session_is_registered('customer_id')) {
    
$navigation->set_snapshot();
    
tep_redirect(tep_href_link(FILENAME_LOGIN'''SSL'));
  }
?>

<html>
<head>
<title>Procesando tu Pago</title>
</head>
<body>
<h1>Hemos Recibido tu Pago</h1>
<?
  
if (!$pedido || !$metodo || !$transferencia || !$planilla || !$monto)
  {
     echo 
"No has introducido todos los detalles requeridos.<br>"
          
."Por favor vuelve e inténtalo de nuevo.";
     exit;
  }
//Colsulta nombre del cliente para formulario
     
if ($customer_id) {
                        
$account_query tep_db_query("select customers_firstname, customers_lastname from " TABLE_CUSTOMERS "  where customers_id = '" $customer_id "'");
                        
$account tep_db_fetch_array($account_query);
                        
$guest $account['customers_firstname']." " .$account['customers_lastname'];
}
  
$pagos_id tep_db_insert_id();
  
$pagos_dequien addslashes($guest);
  
$pedido addslashes($pedido );
  
$metodo addslashes($metodo );
  
$transferencia addslashes($transferencia );
  
$planilla addslashes($planilla );
  
$montodoubleval($monto);
  
$date_addeddate("Y-m-d H:i");

  @ 
$db mysql_pconnect("localhost""USUARIO""CLAVE DE ACCESO");

  if (!
$db)
  {
     echo 
"Error: No se puede conectar a la base de datos.  Por favor inténtalo de nuevo.";
     exit;
  }

  
mysql_select_db("catalogo");
  
mysql_insert_id();
  
$query "insert into pagos values ('".$pagos_id."', '".$guest."', '".$pedido."', '".$metodo."', '".$transferencia."', '".$planilla."', '".$monto."', '".$date_added."')";
  
$result mysql_query($query);
  if (
$result)
      echo 
"Hola ";
      echo 
$guest." Su pago esta Siendo Procesado.";
?>
<?php

?>
</body>
</html>
Ahora lo que me gustaria terminar de escribir en el scrip es que al ejecutar ocuran las siguientes sentencias

1.- Los datos recopilados son guardados en una tabla que se llama PAGOS dentro de la BD (YA ESTA OPERATIVO Y FUNCIONANDO)


2.- Con los datos recopilados se guarden otros datos de manera automatica en otra tabla dentro de la misma base de datos que se llama orders_status_history

Los datos que almacena y deseo que sean almacenados por cada ejecucion en dicha tabla son:

orders_status_history_id = es autonimerico
orders_id = Es el numero de Pedido de mi Formulario
orders_status_id = debe de guardar el numero 2
date_added = Fecha actual
customer_notified = deberia de guardarse el numero 1
comments = Un comentario que diga Pago procesado Via Web

Alguna Idea de como puedo lograr que la sentencia 2 se ejecute??

3.- Y por ultimo que con los datos recopilados se actualice un dato dentro de otra tabla que esta dentro de la misma base de datos la tabla se llama orders y deseo que solo el dato que se llama orders_status se actualice al numero 2.

Se que son con ordenes de Update pero no se como armar la secuencia he leido y trato de ejecutarla pero me da errores. Si alguna persona que sepa del codigo pueda contestar le agradezco.
  #2 (permalink)  
Antiguo 02/02/2009, 06:17
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Scrip PHP que haga varias Funciones

Que base de datos utilizas y que version es ?
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 02/02/2009, 06:45
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Ubicación: Maracay edo Aragua Venezuela
Mensajes: 48
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Scrip PHP que haga varias Funciones

Hola muchas gracias por escribir y por abocarte a ayudar a terminar este scrip

Estoy utilizando Mysql Versión 5.0.67-community-nt
el PHP es la version 5.2.1
el Server es Apache/2.0.59 (Win32)
  #4 (permalink)  
Antiguo 02/02/2009, 07:10
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Scrip PHP que haga varias Funciones

Ok... entonces tienes la posibilidad de que la base de datos haga lo que tu necesitas con una funcion llamada TRIGGER (la siguiente sera la trigger que te servira para el historial).

Te explico un poco como funciona el siguiente:
Código:
DELIMITER |
CREATE TRIGGER agregaHistorial BEFORE INSERT ON pagos  FOR EACH ROW BEGIN
     SET @proximo_id = (SELECT MAX(orders_status_history_id)+1 FROM orders_status_history);
     INSERT INTO orders_status_history
     SET orders_status_history_id = @proximo_id,
     orders_id = NEW.orders_id,
     orders_status_id = 2,
     date_added = NEW.date_added,
     customer_notified = 1,
     comments = 'Pago procesado Via Web';
     UPDATE orders SET orders_status_id = 2 WHERE orders_id = NEW.orders_id;
  END;
| DELIMITER;
DELIMITER |: Delimitamos donde comenzara el trozo de funcion a ejecutar.
CREATE TRIGGER agregaHistorial BEFORE INSERT ON pagos FOR EACH ROW: Creamos un disparador (trigger) que se llama agregaHistorial y se ejecutara antes de un insert en pagos (before insert on pagos) y para cada registro ingresado (for each row)
BEGIN: Comienza el bloque de ejecucion.
SET @proximo_id = (SELECT MAX(orders_status_history_id)+1 FROM orders_status_history);: Creamos una variable para guardar el proximo ID de la tabla orders_status_history
INSERT INTO orders_status_history: Insertaremos en la tabla orders_status_history
SET orders_status_history_id = @proximo_id,: Ingresaremos el id que sacamos arriba.
orders_id = NEW.orders_id,: Ingresaremos el ID del pago ingresado.
orders_status_id = 2,: El status que has mencionado anteriormente.
date_added = NEW.date_added,: La fecha del pago.
customer_notified = 1,: La notificacion que dijiste tambien.
comments = 'Pago procesado Via Web';: Y el comentario señalado.
UPDATE orders SET orders_status_id = 2 WHERE orders_id = NEW.orders_id;: Actualizamos el status de la orden en la tabla orders.
END;: Termina el bloque de ejecucion.
| DELIMITER;: Delimitacion que termina nuestra trigger.

Una vez ejecutada esta trigger en tu base de datos (y es necesario ejecutarla solo una vez), cada vez que hagas un insert en la tabla pagos, se ejecutara esto y te hara solo el insert de datos en la tabla orders_status_history + la actualizacion de la tabla orders.

Recuerda que todos los datos que he usado en esta consulta, los use solo asumiendo que son los correctos. De haber algun cambio, deberas reemplazarlos en la trigger. Si por X razon ya ejecutaste la trigger y quieres cambiarle algo, debes eliminarla primero para editarla y luego volver a crearla, ejemplo:
-> ejecuto el create trigger con todo lo de arriba.
-> quiero cambiarla por lo tanto escribo esto:
Código:
DROP TRIGGER agregaHistorial;
-> la vuelvo a ejecutar con las modificaciones.

Cualquier duda no dudes en consultarnos.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 02/02/2009, 07:33
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Ubicación: Maracay edo Aragua Venezuela
Mensajes: 48
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Scrip PHP que haga varias Funciones

Hola, Disculpa mi Ignorancia, comprendo que seria Mysql el que ejecutaria la nueva insert a otra tabla y el update del numero status order de la tabla Orders ahora mi pregunta es como ejecuto la orden que me indica desde phpmyadmin??
  #6 (permalink)  
Antiguo 02/02/2009, 07:56
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Scrip PHP que haga varias Funciones

No estoy seguro si desde phpmyadmin puedas hacerlo (yo trate de agregar una trigger alguna vez desde ahi y no me dejo por un tema de privilegios)

De todas maneras para probar en phpmyadmin, selecciona la base de datos de la que estamos hablando en la lista de la izquierda y en las opciones que tienes a la derecha anda a SQL (Entre estructura y buscar) y ahi pega el codigo que te di arriba, si te da error trata de bajar el mysql query (q es una aplicacion gratis de aca) Ojo que en ese link abajo esta el instalador de todos los programas y el link que hay al lado de los nombres es un FAQ con algunas preguntas de problemas generales.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #7 (permalink)  
Antiguo 02/02/2009, 08:56
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Ubicación: Maracay edo Aragua Venezuela
Mensajes: 48
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Scrip PHP que haga varias Funciones

Ok, lo hice desde PHPMyadmin y me da el siguiente error:

Código:
consulta SQL: Documentación

CREATE TRIGGER agregaHistorial BEFORE INSERT ON pagos
FOR EACH
ROW BEGIN
SET @proximo_id = ( SELECT MAX( orders_status_history_id ) +1
FROM orders_status_history ) ;

MySQL ha dicho: Documentación
#1064 - 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 2
Sera que alguno de los datos no corresponden??

explicare nuevamente con un poco mas de detalles sobre las tablas a ejecutarse

En la tabla orders_status_history de la base de datos catalogo de debe de insertar los siguientes datos:

orders_status_history_id = es autonimerico
orders_id = Es el numero de Pedido de mi Formulario
orders_status_id = debe de guardar el numero 2
date_added = Fecha actual
customer_notified = deberia de guardarse el numero 1
comments = Un comentario que diga Pago procesado Via Web

En la tabla orders de la base de datos catalogo debe de Actualizarse la linea correspondiente al numero de order_id, el campo a modificar es orders_status que debe de actualizarse al numero 2 igual como fue almacenado en la tabla orders_status

Estoy leyendo un poco de Mysql a ver si comprendo lo que me indico anteriormente pero si es posible que usted chequee nuevamente la opcion que me esta indicando le agradezco mucho.. y de antemano muchas gracias por ayudar..!!
  #8 (permalink)  
Antiguo 02/02/2009, 09:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 5 meses
Puntos: 16
Respuesta: Scrip PHP que haga varias Funciones

Wolas

Tienes una contribucion en la página de oscommerce OrderChek que explica como instalar lo que estas haciendo

Esta es la consulta que buscas

Código:
tep_db_query("insert into " . TABLE_HOLDING_ORDERS_STATUS_HISTORY .
 " (orders_id, orders_status_id, date_added, customer_notified, comments) values ('" 
. tep_db_input($ocID) . "', '" . tep_db_input($status) . "', now(), '" . $customer_notified . "', '" . tep_db_input($comments). "')");
pero tendras que tocar mas archivos para que te funcione

catalog/checkout_payment_ext.php
catalog/includes/application_top_contribs.php
catalog/includes/functions/ordercheck_functions.php
catalog/includes/languages/english/checkout_payment_ext.php
catalog/includes/languages/french/checkout_payment_ext.php
catalog/admin/order_check_packingslip.php
catalog/admin/orders_check.php
catalog/admin/includes/application_top_contribs.php
catalog/admin/includes/functions/check_orders_check.php
catalog/admin/includes/functions/move_orders_check.php
catalog/admin/includes/classes/order_check.php
catalog/admin/includes/languages/english/order_check_invoice.php
catalog/admin/includes/languages/english/order_check_packingslip.php
catalog/admin/includes/languages/english/orders_check.php
catalog/admin/includes/languages/french/order_check_invoice.php
catalog/admin/includes/languages/french/order_check_packingslip.php
catalog/admin/includes/languages/french/orders_check.php

la versión de esto que yo tengo funcionando es la 2.5.1.b
creo recordar(no estoy segura, hace tiempo) que da algun problema si el pago estaba hecho creo que con paypal a lo mejor era con tarjeta.
espero que te sirva
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 14:15.