Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Unhappy Parametros entre Delphi y PHP

Hola amigos, soy principiante en la programación y estoy tratando hacer un programa en delphi que le pase 3 parámetros a una función en php (usuario, contraseña, sentencia SQL) y este devuelva un resultado sin que nunca se habrá la pagina web donde está alojada mi función php.
Esto sería algo así: yo le paso un nombre de usuario, una contraseña y una sentencia SQL como por ejemplo: CREATE TABLE Personas(Nombre varchar(15),Apellido varchar(15),Edad int), y la función me devuelva ‘ok’ si pudo crear la tabla o ‘Error ’si hubo algún problema. Les ruego si me pueden orientar con un ejemplo básico como para ver como pasar estos 3 parámetros desde delphi y ver también de que manera debería recibirlos la función php.
Espero haber sido claro, y desde ya les agradezco su ayuda. Saludos. Hugo
Responder Con Cita
  #2  
Antiguo 28-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

Recuerda poner etiquetas al código, ejemplo:


Si ya has leído la guía de estilo, verás que es conveniente que además de poner un título bien descriptivo a lo que preguntas, también es útil hacerlo en el foro adecuado, lo has puesto en "Noticias", y evidentemente esto no es una noticia, la paso a varios.
Responder Con Cita
  #3  
Antiguo 29-01-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Red face

Hola. Siento mucho haber colocado mal mi consulta, y no haber cumplido con las normas del foro, como veras es mi primera participación en él. La próxima vez pondré más atención a las normas establecidas para las publicaciones. Espero sepan disculparme. Muchas gracias.
Responder Con Cita
  #4  
Antiguo 29-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No te preocupes, estas cosas pasan al principio

A ver si alguien conoce sobre lo que preguntas y te echa una mano.
Saludos.
Responder Con Cita
  #5  
Antiguo 30-01-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Amigos, eh intentado empezar por algo más sencillo, para ver que funcione, y luego si desarrollar el programa completo que explico arriba. Estuve viendo algunos ejemplo de lo que hay en el foro y trate de armar un formulario delphi que mande a llamar una función en php y esta le devuelva un string con los mensajes ‘Datos Correctos’ o en su defecto ‘Datos incorrectos’. Este es el código de delphi

Código Delphi [-]
function URLEncode(Str: string): string;
var
  i: integer;
begin
  Result:= '';
  for i:= 1 to Length(Str) do
    if Str[i] in ['A'..'Z','a'..'z','0'..'9','-','_','.'] then
      Result:= Result + Str[ i ]
    else
      Result:= Result + '%' + IntToHex(Ord(Str[ i ]),2);
end;
function SendRequest(Server, Uri: string; Port: Word; Params: TStringList;
  Response: TStream): Boolean;
var
  hNet: HINTERNET;
  hCon: HINTERNET;
  hReq: HINTERNET;
  Context: DWORD;
  Buffer: array[0..10240] of Char;
  BytesRead: DWORD;
  i: integer;
  Str: String;
  Success: Boolean;
begin
  Context:= 0;
  Result := FALSE;
  hNet := InternetOpen('Agente', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hCon:= InternetConnect(hNet,PChar(Server),Port,nil,nil,
      INTERNET_SERVICE_HTTP,0,Context);
    if (hCon <> nil) then
    begin
      if Params <> nil then
        hReq:= HttpOpenRequest(hCon,'POST',PChar(Uri),nil,nil,nil,
          INTERNET_FLAG_RELOAD,Context)
      else
        hReq:= HttpOpenRequest(hCon,'GET',PChar(Uri),nil,nil,nil,
          INTERNET_FLAG_RELOAD,Context);
      if (hReq <> nil) then
      begin
        if Params <> nil then
        begin
          Str:= Emptystr;
          for i:= 0 to Params.Count - 1 do
            Str:= Str + '&' + URLEncode(Params.Names[i]) + '=' +
              URLEncode(Params.ValueFromIndex[i]);
          Delete(Str,1,1);
          Success:= HttpSendRequest(hReq,
           'Content-Type: application/x-www-form-urlencoded',Cardinal(-1),
            PChar(Str),Length(Str));
        end else
          Success:= HttpSendRequest(hReq,nil,0,nil,0);
        if Success and (Response <> nil) then
        try
          while (InternetReadFile(hReq,@Buffer,sizeof(Buffer),BytesRead)) do
          begin
            if (BytesRead = 0) then
            begin
              Result := TRUE;
              break;
            end;
            Response.Write(Buffer,BytesRead);
          end;
        except end;
        InternetCloseHandle(hReq);
      end;
      InternetCloseHandle(hCon);
    end;
    InternetCloseHandle(hNet);
  end;
end;


procedure TForm2.Button1Click(Sender: TObject);
var Campos: TStringlist;Respuesta: TStringStream;
  ReturnValue : THandle;
begin
    Respuesta:= TStringStream.Create('');
    Campos:= TStringList.Create;
    Campos.Values['User']:= txtUsuario.Text;
    SendRequest('MiWeb','/PruebaServidor.php',80,campos, Respuesta);


    if Pos('Datos Correctos',Respuesta.DataString) > 0 then ShowMessage(Respuesta.DataString + 'Ok')
    else ShowMessage(Respuesta.DataString + ' Error');

    Campos.Free;
    Respuesta.Free;
end;



Ahora bien, esta primera parte estaría funcionando bien, ya que se conecta con la pagina y me devuelve un string, pero siempre me devuelve ‘Datos incorrectos’, por lo que presumo no le está llegando bien el parámetro pasado. Mi código PHP es este.
Código PHP:
<?php

   $Usuario 
$_POST['User'];  
   
$Usuario stripslashes($Usuario);
    echo  
$Usuario;
    if (
$Usuario == 'Hugo'){
    
       echo 
"   Datos Correctos"
       Exit();     
     }
     else {
        echo  
"   Datos Incorrectos"
        Exit(); 
     }

 
?>
Espero que alguien me pueda orientar. Desde ya agradezco su tiempo y paciencia. Saludos. Hugo
Responder Con Cita
  #6  
Antiguo 30-01-2012
Sinaloense Sinaloense is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
Sinaloense Va por buen camino
Desconozco porqe te regresa ese error, pero te puedo pasar este link, que es para lo mismo

http://superuser.com/questions/14932...mand-line-tool

Se hace mediante la línea de comandos mediante el programa CURL, el resultado te lo puede guardar en un archivo de texto, delphi esta limitado en este aspecto-
Responder Con Cita
  #7  
Antiguo 31-01-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Smile Tema Solucionado

Gracias Sinaloense Por tu respuesta, después de probar distintas variantes durante el fin de semana, lo que hice fue lo siguiente. Preparo las variables desde delphi y las envío a mi función php mediante el método POST, así mi función php me devuelve el resultado de una consulta, (primeramente evalúa un usuario y contraseña, para ver que tenga permiso de borrar tablas, crearlas o hacer lo que necesite), o envía ##ok## si pudo crear una tabla por ejemplo, o ##Error## si no la pudo crear. Ahí va el código delphi terminado, y la función php. Por ahí le puede ser útil a alguien. Saludos y gracias por tu tiempo.
Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
  http: TIdHttp;
  params: TStrings;
  respuesta: string;
  Usuario, Pass, SQL:String;

begin

  http := TIdHTTP.Create(Self);
  params := TStringList.Create;
  try

    Usuario:=  'variable1='+ Edit1.text;
    Pass:= 'variable2='+ Edit2.text;
    SQL := 'variable3=' +SQLText.Text;
    params.Add(Usuario);
    params.Add(Pass);
    params.Add(SQL);

    respuesta := http.Post('MiWeb/PruebaConFuncion.php', params);

    ShowMessage('Respuesta: ' + respuesta);
  finally
    http.Free;
    params.Free;

Código PHP:
?php
    $Usuario 
$_POST['variable1'];
    
$Pass $_POST['variable2'];
    
$SQL $_POST['variable3'];
        
$SQL stripslashes($SQL);// limpio el parametro de consulta para q no tenga ningun caracter extraño que trunque la consulta
    
$link mysql_connect('localhost','root',''); 
    if (!
$link)
    {
        echo 
"error conectando la base de datos";
        exit(); 
    }
    
//selecciona la base de datos
    
$Base mysql_select_db('Biodata',$link); // para conectarme abajo

    
if(!$Base)
    {
        echo 
"error seleccionando la base de datos";
        exit(); 
    }
    echo 
"conexion conseguida \n\n";

    
//Valida Usuario
    
$Query "SELECT * FROM `usuario` WHERE upper(`Usuario`) = upper('$Usuario') and UPPER(`Pass`) = UPPER('$Pass')";
    
$resultado mysql_query ($Query,$link);
    
$Cantidadregistros mysql_num_rows($resultado) ; //cuenta la cantidad de registros encontrados

    
    
if ($Cantidadregistros 0// si encontró algo ejecuta la consulta
    
{    
          
       echo 
"Usuario: ".$Usuario ."\n";
    
//   echo "Contraseña: ".$Pass."\n" ;
       
echo "SQL: ".$SQL ."\n\n";
    
     
$SentenciaSQL trim(substr($SQL,0,6)); //saca los primeros 6 caracteres del string y le saca los espacios en blanco Trim
    
       
if (strtoupper($SentenciaSQL) == strtoupper('select')) 
      {
        
$result =  mysql_query ($SQL,$link);
         if (
mysql_affected_rows() >   0)
         {    
           
$nombre_archivo "Datos.txt";  
           
FOPEN($nombre_archivo'w');    // crea el archivo       
           
            
while($row mysql_fetch_array($result)) 
            { 
                    
                       
$Resultadoprint_r$rowtrue);
                      echo 
$Resultado;
    
                
//Crea el archivo TXT en donde está corriendo la funcion
          
$Datos_A_Ingresar $Resultado;
               
$contenido $Datos_A_Ingresar
                
FOPEN($nombre_archivo'a+'); // edita el archivo

                // Me aseguro primero de que el archivo existe y puedo escribirse sobre el. 
                
if (is_writable($nombre_archivo)) // Abro $nombre_archivo en modo de adicion. El puntero se encuentra al final del archivo, asi que ahí es donde ira $contenido cuando llamemos fwrite(). 
                

                    if (!
$gestor fopen($nombre_archivo'a'))  //fopen($nombre_archivo, 'a' me permite sumar texto al final del achivo
                    

                         
$A"No se puede abrir el archivo";
                         exit(); 
                    } 

                     
// Escribir $contenido a nuestro arcivo abierto. 
                    
if (fwrite($gestor$contenido) === FALSE
                     { 
                        
$A"No se puede escribir el archivo";
                        exit(); 
                    } 
                      
                    
$A"##Ok##";    
                    
fclose($gestor); 

                }
                  else { 
$A"##Error## ";} 
            }
         } 
         else 
$A ="##Error## ";     
         Echo 
$A;
      }      
    
       
         if (
strtoupper($SentenciaSQL) == strtoupper('Delete'))
         {
            
$result =  mysql_query ($SQL,$link); 
            
// echo mysql_affected_rows().'<br>'; // devuel la cantidad de registros afectado en el alta
             
if (mysql_affected_rows() == -){$A '##Error##';}        
             if (
mysql_affected_rows() ==  0) {$A '##Error##';}        
             if (
mysql_affected_rows() >   0) {$A '##Ok##';}           
             Echo 
$A;
             exit();     
         
         
         }
    
          if (
strtoupper($SentenciaSQL) == strtoupper('CREATE') ) //Crea una tabla nueva
          
{
             
$result =  mysql_query ($SQL,$link); 
             
//echo mysql_affected_rows().'<br>'; // devuelve la cantidad de registros afectado en el alta
             
if (mysql_affected_rows() == -){$A '##Error##';}        
             if (
mysql_affected_rows() ==  0) {$A '##Ok##';}        
             Echo 
$A;
             exit();
          
          }
    
    
         if (
strtoupper($SentenciaSQL) == strtoupper('DROP T') ) //Borra una Tabla
          
{
             
$result =  mysql_query ($SQL,$link); 
        
//     echo mysql_affected_rows().'<br>'; // devuel la cantidad de registros afectado en el alta
             
if (mysql_affected_rows() == -){$A '##Error##';}        
             if (
mysql_affected_rows() ==  0) {$A '##Ok##';}        
              
             Echo 
$A;
             exit();
          
          }
          
          
           if (
strtoupper($SentenciaSQL) == strtoupper('INSERT') ) //Alta de registros
          
{
             
$result =  mysql_query ($SQL,$link);                   
            
// echo mysql_affected_rows().'<br>'; // devuel la cantidad de registros afectado en el alta
             
if (mysql_affected_rows() == -){$A '##Error##';}        
             if (
mysql_affected_rows() ==  0) {$A '##Error##';}        
             if (
mysql_affected_rows() >   0){  $A '##Ok##';}           
             Echo 
$A;
             exit();
          
          }
    
         if (
strtoupper($SentenciaSQL) == strtoupper('UPDATE') ) //Actualiza Registros
          
{
             
$result =  mysql_query ($SQL,$link); 
            
// echo mysql_affected_rows().'<br>';
             
if (mysql_affected_rows() == -){$A '##Error##';}        
             if (
mysql_affected_rows() ==  0) {$A '##Error##' ;}        
             if (
mysql_affected_rows() >   0){$A '##Ok##';}                 
             Echo 
$A;
             exit();
          
          }
        
    }      
    else 
    {
        echo 
'Usuario no válido';
        exit();
            
    }      
      
?> 
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Parametros y comunicación entre aplicaciones. NPIdea API de Windows 4 15-04-2010 20:30:30
Pasar parametros entre aplicaciones Iceman OOP 2 14-06-2005 16:29:25
Parametros entre Delphi i c++ Builder jsb Varios 7 20-02-2004 18:25:05
Paso de parametros entre delphi y c++ jsb C++ Builder 0 16-02-2004 16:22:49
parametros entre dll's xgerard Varios 12 22-11-2003 00:55:18


La franja horaria es GMT +2. Ahora son las 13:07:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi