Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Effettuare un POST da codice PHP

    Ho una pagina html con un form che come METHOD ha il POST.
    Il parametro action è una pagina in php.

    Quello che vorrei fare è la seguente cosa: alla pressione del tasto OK, tramite POST vengono passati i parametri di un form di login alla pagina php a cui fa riferimento action.
    Fin quì nessun problema, infatti nella mia pagina php posso ricavare tutti i parametri grazie alla POST ed elaborarli come voglio.
    Ora il problema sta nel fatto che una volta elaborati questi parametri devo effettuare una nuova POST verso un altro URL e non so come fare.

    In giro per la rete ho trovato diverse cose, alcune documentate male, altre non funzionanti. Addirittura ho trovato una classe che serve per fare una POST, ma non mi funziona. Mi interessa anche sapere come fare per passare i parametri specificando l'ordine e il nome che voglio io.
    Quello che sto cercando è il metodo per fare una POST da codice PHP e non da html.

    Per favore qualcuno mi può spiegare come si fa?

    Grazie.

  2. #2
    devi fare una socket verso il secondo link.
    X PayPal bisogna implementare la stessa cosa per IPN, ti posto il codice, corregendolo per le tue necessità:

    Codice PHP:
    // leggi il post 
    $req '';

    foreach (
    $_POST as $key => $value) {
    $value urlencode(stripslashes($value));
       
    $req .= "&$key=$value";
    }

    // reinvia al nuovo indirizzo per la convalida
    $header .= "POST /lo/script/che/chiami.php HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " strlen($req) . "\r\n\r\n";
    $fp fsockopen ('http://www.il-tuo-url.com'80$errno$errstr30);

    if (!
    $fp) {
       
    // HTTP ERROR
    } else {
       
    fputs ($fp$header $req);
       while (!
    feof($fp)) {
          
    $res fgets ($fp1024);
          
    //in res verranno letti byte per byte la risposta alla richiesta fatta 
       
    }
       
    fclose ($fp);


  3. #3
    Grazie infinite!

    Ora vedo cosa riesco a fare.

    Non ho capito che c'entra paypal, scusa!

  4. #4
    Dunque, ho provato lo script, ma non riesco a farlo funzionare. La mia situazione è questa:

    1) file main.html contenente un form con 2 campi di testo
    2) file redirect_post.php con il seguente contenuto:
    Codice PHP:
    <?php
    // leggi il post
    $req '';

    foreach (
    $_POST as $key => $value) {
    $value urlencode(stripslashes($value));
       
    $req .= "&$key=$value";
    }

    // reinvia al nuovo indirizzo per la convalida
    $header .= "POST show_post2.php HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " strlen($req) . "\r\n\r\n";
    $fp fsockopen ('localhost'80$errno$errstr30);

    if (!
    $fp) {
       
    // HTTP ERROR
        
    echo "$errstr ($errno)
    \n"
    ;
    } else {
       
    fputs ($fp$header $req);
       while (!
    feof($fp)) {
          
    $res fgets ($fp1024);
          
    //in res verranno letti byte per byte la risposta alla richiesta fatta
       
    }
       
    fclose ($fp);
    }

    ?>
    3) File show_post2.php con il seguente contenuto:
    Codice PHP:
    <?php
    $username 
    $_POST['username'];
    $password $_POST['passwd']; 

    print 
    "username: ".$username."
    "
    ;
    print 
    "password: "$password."
    "
    ;
    ?>
    Se non uso il "file di mezzo" e in action del form metto direttamente 'show_post2.php' i dati vengono stampati.
    Invece io vorrei che prima venissero passati al secondo file che a sua volta li passa al terzo.

    Sto facendo delle prove in locale come puoi vedere.

    Quello che succede invece, è che quando premo il bottone con tipo "submit", vengo sì, rediretto alla pagina corrispondente al file n. 2, ma non viene visualizzato assolutamente nulla e la pagina show_post2.php non viene nemmeno chiamata.
    Sai dirmi perché?

    Grazie ancora.

  5. #5
    Spetta un po', io credevo che avevi bisogno di chiamare una terza pagina per fare qualche operazione particolare, tipo su db, invece vuoi solo effettuare un redirect.
    Per questo devi solo evitare di stampare qualcosa nella seconda pagina ed in fondo a questa scrivi:
    Codice PHP:
    header("Location: show_post2.php");
    exit; 

  6. #6
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Ciao, non credo si tratti di fare un semplice redirect: vuole anche passare all'ultima pagina i dati $_POST del form che ha compilato.

    Ho un problema simile: nelle pagine di amministrazione del mio sito, se scadono le sessioni (impostate brevi per sicurezza), ti viene chiesto di inserire nuovamente le tue credenziali ed i dati $_POSTati vengono persi.

    Hai qualcue idea

    Luca

  7. #7
    In entrambi i casi, usate le sessioni:
    per fbcyborg:
    Codice PHP:
    session_start();
    $_SESSION['posted'] = array();
    foreach (
    $_POST as $key => $value) {
       
    $_SESSION['posted'][$key] = $value;

    Per Luke70:
    immagino tu abbia un controllo per verificare se la sessione è nuova o riutilizzata (tipo verificare se isset($_SESSION['user']) )
    Se non è settato mettici il pezzo di codice sopra, aggiungendo una variabile $_SESSION['last_posted_page'] e ci metti lo script che stai eseguendo, poi effettui il redirect nella pagina di login, lo script nella action della form di login dopo aver autenticato l'utente, controlla se è settata e != '' la $_SESSION['last_posted_page'] ed in caso affermativo, richiama lo script con il Location.
    A qeusto punto devi inserire nelle pagine il controllo se sono impostati i $_SESSION['posted'] e $_SESSION['last_posted_page'] == pagina corrente allora devi usare i dati in posted come se fossero post

  8. #8
    Grazie,

    sì, esattamente io ho bisogno di fare un redirect di un POST.

    Il codice che ho usato è questo, ma ottengo sempre lo stesso risultato:
    Codice PHP:
    session_start();
    $_SESSION['posted'] = array();
    foreach (
    $_POST as $key => $value) {
       
    $_SESSION['posted'][$key] = $value;
    }

    // reinvia al nuovo indirizzo per la convalida
    $header .= "POST show_post2.php HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " strlen($req) . "\r\n\r\n";
    $fp fsockopen ('localhost'80$errno$errstr30);

    if (!
    $fp) {
       
    // HTTP ERROR
        
    echo "$errstr ($errno)
    \n"
    ;
    } else {
       
    fputs ($fp$header $req);
       while (!
    feof($fp)) {
          
    $res fgets ($fp1024);
          
    //in res verranno letti byte per byte la risposta alla richiesta fatta
       
    }
       
    fclose ($fp);

    La pagina show_post2.php non viene nemmeno chiamata.

    Ripeto per chiarezza:
    Io ho semplicemente bisogno di fare questa cosa: prendere dei dati da un form, passarli ad un secondo file .php che li elabora e successivamente fare un POST verso un altro sito.

  9. #9
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    artorius:

    Grazie, non avevo pensato a questa possibilità.
    Risolve in modo elegante il mio problema.

    A buon rendere

    Luca

  10. #10
    Allora, vediamo un attimo se con un esempio riesco ad essere più chiaro. Magari la cosa è meno difficile di quello che sembra.

    Dunque, mettiamo che io abbia una pagina html con un form la cui action è una certa pagina php myaction.php e il method è POST. Nella mia pagina myaction.php devo fare una POST verso un'altro URL di alcuni valori, che sono da me elaborati.

    Quello che mi serve, in realtà, è tradurre questo pezzo di codice in PERL in PHP. Questo non fa altro che una POST, appunto.

    codice:
    $res = $ua->post("http://www.sito-destinazione.it", 
        { 
          URL_OK   		=> 'url1',
          URL_KO      	=> 'url2',
          usr		=> $self->{username},
          channel		=> 'mail_ra',
          login		=> $uname,
          password		=> $self->{passwd},
          });
    Chiaramente i campi me li prendo opportunamente e li passo alla post. Mi serve pari pari, quindi, la traduzione di quel pezzo di codice.

    Per favore potete aiutarmi?

    Grazie.

    Quì ho trovato un esempio ma non so se fa al caso mio. La lista dei parametri che devo passare alla POST è quella che ho appena riportato, ma in quell'esempio non riesco a ritrovarmici.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.