Foros del Web » Programando para Internet » PHP »

Envio de datos servidor - servidor

Estas en el tema de Envio de datos servidor - servidor en el foro de PHP en Foros del Web. En el else de la respuesta en el archivo envioA.php, puedo volver a hacer un $respuesta = curl -d "dato1=$dato1&dato2=$dato2" http://www.urlservidor2.com/recibeB.php , hacer un while ...

  #31 (permalink)  
Antiguo 16/03/2012, 04:58
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

En el else de la respuesta en el archivo envioA.php, puedo volver a hacer un
$respuesta = curl -d "dato1=$dato1&dato2=$dato2" http://www.urlservidor2.com/recibeB.php
, hacer un while not "ok" por ejemplo?

Entonces, todo esto no depende en absoluto del cliente, solo es comunicación entre servidores, y ni el cliente verá nada, ni la información pasa a través suyo? Si es así, es fantástico, pues es lo que quería :)

El archivo "general" que llame a todo, sería correcto?

Código Javascript:
Ver original
  1. <head>
  2. $id_cliente = 2;
  3. $.ajax({
  4.   url: "envioA.php?id=$id_cliente",
  5.   context: document.body,
  6.   success: function(){
  7.     return true;
  8.   }
  9. });
  10. </head>
  11.  
  12. echo "estimado cliente $id_cliente, todo ha ido bien, ya puede irse a tomar un café";
  #32 (permalink)  
Antiguo 16/03/2012, 05:03
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Envio de datos servidor - servidor

Cita:
En el else de la respuesta en el archivo envioA.php, puedo volver a hacer un
$respuesta = curl -d "dato1=$dato1&dato2=$dato2" http://www.urlservidor2.com/recibeB.php
, hacer un while not "ok" por ejemplo?
No, te recomiendo que primero te documentes de como funciona cURL, porque estas adivinando su funcionamiento, cURL no ejecuta mas (bueno dependiendo de la configuración que hagas al realizar la conexión) código hasta que no obtenga una respuesta, al obtener la respuesta cURL da por terminada la conexión, por lo tanto no es en si un socket como lo harias en otros lenguajes donde constantemente debes estar monitoreando la respuesta con un loop, aquí cuando llegue la respuesta del servidor B cURL terminará la conexión y PHP seguirá la ejecución del demás código, así que no, ahora si lo haces de esa manera es muy probable dependiendo de la respuesta a que entres en un loop infinito y se produzca un error aparte que es necesario hacer eso porque no recibirás un array si no únicamente un string...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #33 (permalink)  
Antiguo 16/03/2012, 05:10
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Fantástico, muchas gracias

Lo del documento "general", sería correcto entonces? :)

Siento ser tan pesado :P
  #34 (permalink)  
Antiguo 16/03/2012, 05:13
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Envio de datos servidor - servidor

En teoría si, aunque para mi gusto el success esta demás ya que el cliente no va a esperar a que PHP arroje una respuesta, de hecho en la teoría el cliente ni si quiera se enterará de dicha petición...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #35 (permalink)  
Antiguo 16/03/2012, 05:17
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Algo así?

Código PHP:
Ver original
  1. <head>
  2. $id_cliente = 2;
  3. $.ajax({
  4.   url: "envioA.php?id=$id_cliente",
  5.   context: document.body
  6. });
  7. </head>
  8.  
  9. echo "estimado cliente $id_cliente, todo ha ido bien, ya puede irse a tomar un café";
  #36 (permalink)  
Antiguo 16/03/2012, 06:03
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

El problema es que no tengo ni la menor idea de AJAX. He puesto eso en un archivo y me salta error

Que fallos hay por aqui? :)

archivoA.php
Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <?
  4. $.ajax({
  5.   url: "enviaA.php?id=2",
  6.   context: document.body
  7.   success: function(){
  8.     return true;
  9.   }
  10. );
  11. ?>
  12. </head>
  13. <body>
  14. estimado cliente $id_cliente, todo ha ido bien, ya puede irse a tomar un café
  15. </body>
  16.  
  17. </html>
`

enviaA.php

Código PHP:
Ver original
  1. <?
  2. $dato1 = 1;
  3. $dato2 = 2;
  4. $respuesta = curl -d "dato1=$dato1&dato2=$dato2" http://www.xxx.com/recibeB.php
  5.  
  6. if ($respuesta == 'ok') {
  7. //el traspaso de información se realizo con exito
  8. }else {
  9. //se produjo un error en el traspaso de información
  10. }
  11. ?>


recibeB.php
Código PHP:
Ver original
  1. <?php
  2. $dato1 = $_POST['dato1'];
  3. $dato2 = $_POST['dato2'];
  4. $todoOK = true;
  5.  
  6.    $HOSTNAME = "X";        //SERVIDOR
  7.     $USERNAME = "X";             //USUARIO
  8.     $PASSWORD = "X";                //CONTRASEÑA
  9.     $DATABASE = "X";   //BASE DE DATOS      
  10.    
  11.     function conectar(){
  12.     global $HOSTNAME,$USERNAME,$PASSWORD,$DATABASE;
  13.     $idcnx = mysql_connect($HOSTNAME, $USERNAME, $PASSWORD) or DIE(mysql_error());
  14.     mysql_select_db($DATABASE, $idcnx);
  15.     return $idcnx;
  16.    
  17.     conectar();
  18.     $sql = mysql_query("INSERT INTO demo VALUES ('', $dato1)");
  19.  
  20. if ($todoOk) {   //supondremos que $todoOk es un boolean (true o false)
  21. echo 'ok';          //si todo salio bien le decimos al servidor a que salio OK
  22. }else {
  23. echo 'fail!';        //si algo salio mal le decimos que hubo un fallo
  24. }
  25. ?>
  #37 (permalink)  
Antiguo 16/03/2012, 08:31
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Envio de datos servidor - servidor

a ver, al menos has el intento de documentarte.... @Eleazan te dijo que si utilizabas JQuery podrías intentar el ejemplo de Ajax que el dejo, si buscaras por internet sabrías que primero debes bajar el framework e importarlo en el html donde se hará la petición, ahora, quiero suponer que realmente este código no es el que estas intentando ejecutar...

Código PHP:
Ver original
  1. <?
  2. $dato1 = 1;
  3. $dato2 = 2;
  4. $respuesta = curl -d "dato1=$dato1&dato2=$dato2" http://www.xxx.com/recibeB.php
  5.  
  6. if ($respuesta == 'ok') {
  7. //el traspaso de información se realizo con exito
  8. }else {
  9. //se produjo un error en el traspaso de información
  10. }
  11. ?>

Si es así de donde sacas que esa es la forma de usar curl?, checa la documentación de cURL en el manual de PHP, otra cosa...

Código PHP:
Ver original
  1. <?php
  2. $dato1 = $_POST['dato1'];
  3. $dato2 = $_POST['dato2'];
  4. $todoOK = true;
  5.  
  6.    $HOSTNAME = "X";        //SERVIDOR
  7.     $USERNAME = "X";             //USUARIO
  8.     $PASSWORD = "X";                //CONTRASEÑA
  9.     $DATABASE = "X";   //BASE DE DATOS      
  10.    
  11.     function conectar(){
  12.     global $HOSTNAME,$USERNAME,$PASSWORD,$DATABASE;
  13.     $idcnx = mysql_connect($HOSTNAME, $USERNAME, $PASSWORD) or DIE(mysql_error());
  14.     mysql_select_db($DATABASE, $idcnx);
  15.     return $idcnx;
  16.    
  17.     conectar();
  18.     $sql = mysql_query("INSERT INTO demo VALUES ('', $dato1)");
  19.  
  20. if ($todoOk) {   //supondremos que $todoOk es un boolean (true o false)
  21. echo 'ok';          //si todo salio bien le decimos al servidor a que salio OK
  22. }else {
  23. echo 'fail!';        //si algo salio mal le decimos que hubo un fallo
  24. }
  25. ?>

usar globales en funciones es lo peor aparte que es de flojos (sin ofender), si vas a usar variables externas pásalas como parámetros! (function mifuncion($parametro1,$parametro2)), en el desarrollo de sitios grandes te ahorrarás muchos dolores de cabeza, ahora otra cosa, no veo por ningún lado donde has seteado la variable $todoOk, solo la has copiado y pegado, eso no funcionará

Antes de continuar primero lee la documentación de los recursos que estas tratando de usar, no solo es de hacer copy/paste!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #38 (permalink)  
Antiguo 16/03/2012, 13:33
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Pues lo del tema de curl lo había sacado de aqui http://curl.haxx.se/docs/httpscripting.html.

No, de ajax no se nada, creía que quiza era como javascript, que lo incrustabas sin más, disculpa mi ignorancia sobre el tema.

Supones mal, ese código intento ejecutar, con las url bien puestas, usuario, passwd y db :S

cuando me comentas que usar globales es de flojos, a qué te refieres? las variables globales no se usan por algun motivo en particular?

lo de "seteado" la variable $todoOk, no es suficiente como asignarla como "true", en la linea 4 del código php de recibeB.php la he asignado como "true".
  #39 (permalink)  
Antiguo 16/03/2012, 17:24
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Envio de datos servidor - servidor

Cita:
Pues lo del tema de curl lo había sacado de aqui http://curl.haxx.se/docs/httpscripting.html.
mmm en la página indican que dichos ejemplos son para linea de comando, en PHP se utiliza de diferente forma, en el manual de PHP tienes toda la documentación y ejemplos de uso

Cita:
No, de ajax no se nada, creía que quiza era como javascript, que lo incrustabas sin más, disculpa mi ignorancia sobre el tema.
Ajax realmente es javascript, el problema es que el método empleado se basa en el framework JQuery, para lo cual es necesario primero descargarlo, luego incluirlo en el html y ya después usarlo, en su documentación tienes ejemplos para todo esto, pero para comenzar descarga el framework y agrega estas lineas en el head...

Código HTML:
Ver original
  1. <script src="url/hasta/el/archivo/jquery.js" type="text/javascritp"></script>
  2. <script type="text/javascript">
  3. $(document).ready(function() {
  4.      $('#idDeBoton').click(function() {
  5.           $.ajax(
  6.                //todo el código ajax que tienes....
  7.           );
  8.      });
  9. });
  10. </head>

Cita:
cuando me comentas que usar globales es de flojos, a qué te refieres? las variables globales no se usan por algun motivo en particular?
Cuando el código que manejas es pequeño se "antoja" usar globales, pero esto usado en proyectos grandes te puede dar errores que ni si quiera sabrás donde se generan y mucho menos como solucionarlos, te daré un ejemplo, tienes archivoA, en este incluyes 4 archivos, archivoB, archivoC, archvoD y archivoE, en el archivoC creas una función en donde seteas la variable $variableGlobal como global y dentro de la función le das un array como valor, después sigues con tu desarrollo y llegas a la necesidad de crear otra función en el archivoE donde sin querer vuelves a setear $variableGlobal como global pero ahora la función cambia el valor a un int, al usar las dos funciones el valor de $variableGlobal puede ser o un int o un array, pero como no recuerdas a verla seteado anteriormente te encontrarás con que en ocasiones la variable tendrá un valor no deseado y no sabrás el porque, es un ejemplo sencillo pero en grandes proyectos pueden surgir mas complicaciones con el uso de variables globales

Cita:
lo de "seteado" la variable $todoOk, no es suficiente como asignarla como "true", en la linea 4 del código php de recibeB.php la he asignado como "true"
Sinceramente no lo había visto, sin embargo, deberías depurar las sentencias SQL, si se produce un error en el insert detectar el error y cambiar el valor de $todoOk a 'fail' o cualquier otro valor que indique que se produjo un error, si no haces esto no tiene significado usar dicha variable
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #40 (permalink)  
Antiguo 17/03/2012, 02:20
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Muchas gracias por la ayuda y los consejos

Ahora me toca mirarme bien las documentaciones de ambas cosas.
Gracias ;)
  #41 (permalink)  
Antiguo 21/03/2012, 06:04
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Hola de nuevo

Estoy provando con lo que me comentasteis, y lo que he creido entender

Por ahora no consigo que los datos vayan de un lado al otro

Estoy probando con estos archivos. Espero que no sean horribles :S

archivoA.php

Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <script src="jquery-1.3.1.min.js" type="text/javascritp"></script>
  4. <script type="text/javascript">
  5.     $(document).ready(function() {
  6.     $('#idDeBoton').click(function() {
  7.           $.ajax({
  8.               url: "enviaA.php",
  9.               context: document.body
  10.               success: function(){
  11.                 return true;
  12.               }
  13.             );
  14.      });
  15. });
  16. </script>
  17. </head>
  18. <body>
  19. estimado cliente, todo ha ido bien, ya puede irse a tomar algo
  20. </body>
  21.  
  22. </html>

enviaA.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. $ch = curl_init("http://www.XXX.com/recibeB.php");
  4. $dato1=1;
  5. $dato2=2;
  6. curl_setopt($ch, CURLOPT_POSTFIELDS,'dato1='.urlencode($dato1).'dato2'.urlencode($dato2));
  7. curl_setopt($ch, CURLOPT_POST, 1);
  8.  
  9. curl_exec($ch);
  10. fclose($fp);
  11. ?>

recibeB.php

Código PHP:
Ver original
  1. <?
  2. $dato1 = $_POST['dato1'];
  3. $dato2 = $_POST['dato2'];
  4. $todoOK = true;
  5.  
  6.    
  7.     conectar(); // funcion que conecta a la bbdd
  8.     $sql = mysql_query("INSERT INTO articles_categoria VALUES ('', 'demo')");
  9.  
  10. if ($todoOk)
  11. {  
  12.     echo "ok";        
  13. }
  14. else
  15. {
  16.     echo "fail!";      
  17. }
  18. ?>
  #42 (permalink)  
Antiguo 21/03/2012, 07:02
 
Fecha de Ingreso: abril-2008
Ubicación: Santa Fe, Argentina
Mensajes: 41
Antigüedad: 16 años
Puntos: 14
Respuesta: Envio de datos servidor - servidor

Falta estudio, muchachos. O utilizas un Web Service (http://www.w3schools.com/webservices/ws_intro.asp), que se encarga de el envío, la recepción y la confirmación de la transferencia, o te creás una API en alguna notación que definas, y usas cURL (con método POST para ser medianamente REST).

Todavía no entiendo por qué están intentando usar AJAX. Un 'si se cierra' se interpretó como que el hilo muere en el servidor cuando el cliente aprieta la X de su navegador.
  #43 (permalink)  
Antiguo 21/03/2012, 08:16
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Entonces entiendo que no me esta funcionando el Ajax

Si ejecuto directamente enviaA.php me salta lo siguiente:

Warning: fclose(): supplied argument is not a valid stream resource in /hermes/bosweb/web299/b2994/ipg.controversiasmexicoo/curl_ajax/enviaA.php on line 23
  #44 (permalink)  
Antiguo 21/03/2012, 08:32
 
Fecha de Ingreso: abril-2008
Ubicación: Santa Fe, Argentina
Mensajes: 41
Antigüedad: 16 años
Puntos: 14
Respuesta: Envio de datos servidor - servidor

Usa estandares estrictos (activá E_STRICT). $fp no está definida por lo que fclose($fp) no es una aserción válida.
  #45 (permalink)  
Antiguo 21/03/2012, 08:34
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Envio de datos servidor - servidor

Bueno, tienes varios errores en los archivos:

En archivoA.php la función ajax NO se ejecutará sola!, claramente espera una acción del usuario, en este caso un "click" en un botón con el ID "idDeBoton"

Código HTML:
Ver original
  1. <head>
  2. <script src="jquery-1.3.1.min.js" type="text/javascritp"></script>
  3. <script type="text/javascript">
  4.     $(document).ready(function() {
  5.     $('#idDeBoton').click(function() {
  6.           $.ajax({
  7.               url: "enviaA.php",
  8.               context: document.body
  9.               success: function(){
  10.                 return true;
  11.               }
  12.             );
  13.      });
  14. });
  15. </head>
  16. <input type="button" id="idDeBoton" value="Envar Ajax" />
  17. estimado cliente, todo ha ido bien, ya puede irse a tomar algo
  18. </body>
  19.  
  20. </html>

En enviaA.php esa no es la forma de pasar parámetros a curl, hay dos formas correctas de pasar parámetros, una en un array asociativo y la otra como si se tratara de variables GET, ahora, en ningun momento le estas diciendo a cURL que te retorne lo que te conteste recibeB.php:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $ch = curl_init("http://www.XXX.com/recibeB.php");
  4. $dato1=1;
  5. $dato2=2;
  6.  
  7. //Array:
  8. $body = array('dato1'=>$dato1,'dato2'=>$dato2);
  9. //String
  10. $body = 'dato1='.$dato1.'&dato2'.$dato2;
  11.  
  12. curl_setopt($ch, CURLOPT_POST, 1);
  13. curl_setopt($ch,CURLOPT_POSTFIELDS, $body);
  14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)
  15.  
  16. $resultado = curl_exec($ch);
  17.  
  18. var_dump($resultado);

Por ultimo, nada tiene que hacer ese fclose($fp) hay!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #46 (permalink)  
Antiguo 21/03/2012, 08:38
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Cierto, el fclose($fp) lo usan en la documentación de php para cerrar el archivo.

Última edición por GatorV; 21/03/2012 a las 17:35
  #47 (permalink)  
Antiguo 21/03/2012, 08:42
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Entiendo que puedo lanzar la funcion ajax sin necesidad de hacerlo con un click, llamando simplemente a la funcion?

Los datos tal y como los tenia en enviaA.php, llegaban correctamente a recibeB.php y se guardaban en la base de datos, entiendo que lo que me comentas es por el tema de la respuesta del servidor B al A
  #48 (permalink)  
Antiguo 21/03/2012, 08:48
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Envio de datos servidor - servidor

Si quieres ejecutar el "ajax" simplemente al cargar dejalo solo en $(document).ready() {}

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.           $.ajax({
  3.               url: "enviaA.php",
  4.               context: document.body
  5.               success: function(){
  6.                 return true;
  7.               }
  8.             );
  9. });

Y tal y como dice @h2swider y creo que ya también te lo había dicho te hace falta estudio por tu parte, lee de nuevo los conceptos básicos tanto de PHP como HTML/Javascript
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #49 (permalink)  
Antiguo 21/03/2012, 08:56
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Envio de datos servidor - servidor

Muchisimas gracias Nemutagk.

Si, estoy leyendome la información proporcionada por php sobre cURL y indagando sobre cómo lanzar las instrucciones en ajax.
Muchas gracias

Etiquetas: servidor, tabla
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 18:22.