[C con Clase] Es complejo: PHP, C, MySql y sockets

erick etpg38 en hotmail.com
Mie Abr 4 12:14:31 CEST 2012


AUNQUE ESTA CONSULTA EMPIEZA HABLANDO DE PHP Y MSQL, LA DUDA ES EN REALIDAD DE LENGUAJE C, LEAN HASTA EL FINAL , POR FAVOR.

Saludos. Tengo una pregunta un poco extraña porque involucra PHP, Mysql, C y además trabajo con sockets. ¿Raro verdad? Pues lo realmente raro y que desearía que alguien me explicara es lo siguiente:
Tengo un script PHP que se llama actualiza.php el cual envía por el metodo POST tres variables a otro script llamado valida.php.  Las variables son: nombre de usuario, un password y otro dato arbitrario para actualizar una BBDD. 
Este segundo script, valida.php, lo que hace es conectarse a una base de datos Mysql y preguntar si existe el usuario y la contraseña que le han enviado vía POST y en caso positivo actualiza la BBDD con el tercer dato recibido:
//Recepción de las variables:
$user  = mysql_real_escape_string($_POST['user']);
$pass  = mysql_real_escape_string($_POST['pass']);
$dato3  = mysql_real_escape_string($_POST['dato3']);
//Primera consulta:
$sql= "SELECT * FROM `usuarios` WHERE `pass`='$pass' AND `user`='$user' ";
. . . 
//Segunda consulta:
$sql = "UPDATE `usuarios` SET `dato3`='$dato3' WHERE `pass`='$pass'";

Hasta aquí, todo bien, la ejecución de valida.php se realiza perfectamente y la BBDD se actualiza... y aquí viene lo bueno... solo si envio las variables vía POST mediante el script actualiza.php... pero si trato de enviar esas mismas variables vía POST desde un ejecutable en C, (que fusilé por Internet), utilizando conexión por sockets...¡Sorpresa!: las consultas a la BBDD (que en teoría no tienen nada que ver con el origen de las variables o el origen de la invocación del archivo valida.php) no se ejecutan correctamente. Más exactamente, si elimino la expresión WHERE, las consultas se ejecutan bien, pero si la expresión WHERE está presente en las consultas, devuelve un array vacío, como si ese usuario y password no existiesen. Como es natural, una consulta sin WHERE no me sirve de nada porque yo no quiero hacer un volcado de toda la base de datos, sino una validación de un usuario-password específico.

¿Alguien tiene idea de por qué el envío de las variables desde el ejecutable C, vía POST, provoca este comportamiento incoherente en la ejecución de las consultas a Mysql del script valida.php? 

Aclaración: todas las variables están llegando a valida.php,  por cualquiera de los dos métodos, lo cual he comprobado poniendo  echo $nombre_variable  en el script valida.php, para mostrarlas en pantalla. Y en teoría no debe existir ningun error de sintaxis en valida.php, ya que en el primero de los casos,  (usando actualiza.php), las consultas a la BBDD se ejecutan sin fallos.

Aclaración 2: Para los curiosos: ¿Si ya me funciona en PHP, para que quiero disparar la actualización de las variables desde C? Porque el sistema que pretendo implementar, con php solo le sería útil a usuarios que por pura casualidad tengan un servidor Apache instalado en su ordenador, mientras que con un ejecutable desde el SO, el servicio será accesible para cualquiera con solo correr la aplicación autónoma. ( o  invocándolo periódicamente como tarea programada que es en realidad el objetivo final) 
Se desprende que actualiza.exe estará en el ordenador local del usuario y valida.php en un servidor remoto.

Aclaración 3: ¿Por qué no hago todo el acceso a la BBDD remota y la validación desde C? Primero porque no sé si se puede y segundo porque no tengo ni idea. Y en caso de ser posible, seguramente es mucho más complejo que simplemente enviarle las variables al script php y que éste se encargue de todo el rollo. ¿A que si? 
De cualquier manera, yo no puedo crear en la BBDD, para cada usuario potencial,  un nombre de usuario y una contraseña válidos para que accedan desde su ordenador, directamente, a una BBDD remota, alojada en un hosting compartido, (es más, ni yo mismo puedo acceder directamente, porque el servicio de hosting no me da acceso externo, solo desde el panel de phpmyadmin) por lo cual debo dirigir todas las peticiones de actualización hacia un script común de validación, que se ejecute del lado servidor y que sea allí  donde se compruebe si ese usuario está registrado o no en la BBDD.

Algun alma caritativa que arroje luz sobre el asunto...http://listas.conclase.net/iconos/0106-crying.gif


Más información sobre la lista de distribución Cconclase