12. maj 2005 - 15:49
Der er
59 kommentarer og 1 løsning
Sende method="POST" via et php script
Hejsa Kan jeg sende en person hen til en side også lave $username, som siden så selv sendte videre som POST til en anden side?
Annonceindlæg fra Computerworld
Mener ikke modtage. Hvis nu jeg har en side, som hedder webmail_out.php og webmail.php. På webmail.php har jeg en normal <form> som man udfylder (brugernavn og domæne, som kan indeholde fx cmau og @cmau.dk), det data bliver så sendt til webmail_out.php via POST, så på webmail_out.php skal den smide de 2 data sammen så den kommer til at hedde $mail, som så igen bliver sendt videre via post, men ikke i en form. Hvordan gøres det?
kan du ikke bare bruge $_GET?
Nej for jeg ahr ikke adgang til den tredje side, så det kan ikke ændres fra POST
cmau, en nem løsning ville være at bruge et hidden input felt ;) <input type="hidden" value="$username">
Har vidst givet ham alle detaljerne over microsoft messanger, men har sagt alle de muligheder i kommer med. Han siger bare det ikke kan lade sig gøre.. :(
Kan ikke lade sig gøre, nu skal jeg prøve at forklare mig mere. Jeg har 3 sider: webmail.php webmail_out.php
Hov fejl indlæg 2 sek skriver lige hvad jeg mente.
Kan ikke lade sig gøre, nu skal jeg prøve at forklare mig mere.
Jeg har 3 sider:
webmail.php:
På den indtaster man felterne:
brugernavn (fx cmau)
mail (fx @cmau.dk)
kode (fx cmau)
Når man så trykker Login bliver det hele sendt til webmail_out.php, som POST, via min form.
webmail_out.php:
Modtages brugernavn, mail og kode og gøres sådan her ved:
$mail = $_POST['brugernavn'].$_POST['mail'];
$kode = $_POST['kode'];
Hvordan kan jeg så med ovenstående data sende det som POST til redirect.php (læs længere nede hvad det er). Det skal sendes som POST via php scriptet.
http://webmail.powerhosting.dk/src/redirect.php: Den fil har jeg ingen adgang til, det er også den sidste side hvor vi logger ind.
Jeg har lavet noget lignende til domænebestilling, men har ikke videre erfaring med det. Måske kan det her bruges? <?php $data = "mail=".$_POST['brugernavn'].$_POST['mail']; $data .= "&kode=".$_POST['kode']; $hostname = 'domain.com'; $path = '/path/file.php'; $fp = fsockopen($hostname, 80); fputs($fp, "$method $path HTTP/1.1\r\n"); fputs($fp, "Host: $hostname\r\n"); fputs($fp,"Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: " . strlen($data) . "\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $data); fclose($fp); ?>
coderdk > Hvordan skal jeg gøre med CURLOPT_POST? taskmgr > Gør din kode, som jeg gerne vil have?
Noget i stil med:
$cr = curl_init();
curl_setotp( $cr, CURLOPT_URL, '
http://www.eksempel.dk/script.php' );
curl_setopt( $cr, CURLOPT_POST, true );
curl_setopt( $cr, CURLOPT_POSTFIELDS, $_POST );
curl_exec( $cr );
curl_close( $cr );
Det kræver dog at curl er kompileret med i php.
Og hvis du vil gemme/vise resultatet:
$cr = curl_init();
curl_setotp( $cr, CURLOPT_URL, '
http://www.eksempel.dk/script.php' );
curl_setopt( $cr, CURLOPT_POST, true );
curl_setopt( $cr, CURLOPT_POSTFIELDS, $_POST );
curl_setopt($cr, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec( $cr );
curl_close( $cr );
echo "<p>Fik dette tilbage: <blockquote><i>$result</i></blockquote></p>";
Ville dette virke?
<?
if(isset($POST['login_username'])){
$cr = curl_init();
curl_setotp( $cr, CURLOPT_URL, '
http://webmail.powerhosting.dk/src/redirect.php' );
curl_setopt( $cr, CURLOPT_POST, true );
curl_setopt( $cr, CURLOPT_POSTFIELDS, $_POST );
curl_exec( $cr );
curl_close( $cr );
} else {
?><p align="center">Webmail</p>
<form action="webmail.php" method="POST" target="_blank">
<p>Her kan du logge på din @BabeGalleri.DK webmail, hvis du altså har en. Hvis du ingen har og gerne vil have en så kan du gøre en af følgende ting:<ul>
<li>Sponsorere noget til BabeGalleri.DK.</li>
<li>Gøre noget godt for BabeGalleri.DK.</li>
<li>Vinde en @BabeGalleri.DK mail, i en af de konkurrencer vi afholder engang i mellem.</li>
</ul></p>
<p>
Brugernavn:<br>
<input type="text" name="login_username" size="25"><br><br>
Kode:<br>
<input type="password" name="secretkey" size="25">
<input type="hidden" name="js_autodetect_results" value="0">
<input type="hidden" name="just_logged_in" value="1"></p>
<p><input type="submit" value="Login"></p>
</form>
<?
}
?>
Ja, hvis det script hedder webmail.php - Det er lettest at prøve ;) Det skal lige nævnes at du blot sender informationen videre til siden på den måde, brugerne kommer ikke derover!
Så er cURL ikke kompileret med ind i din version af php :( Så skal du bruge en løsning som taskmgr's...
Kan du hjælpe med det? Ved ikke hvad det er?
Har kigget lidt på hans kommentar, dit link og på fsockopen på php.net, men får helt ærligt ikke noget ud af det. Kunne du prøve at give et eksempel?
Kunne jeg bruge denne function? function post($host,$query,$others=''){ $path=explode('/',$host); $host=$path[0]; unset($path[0]); $path='/'.(implode('/',$path)); $post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n$query"; $h=fsockopen($host,80); fwrite($h,$post); for($a=0,$r='';!$a;){ $b=fread($h,8192); $r.=$b; $a=(($b=='')?1:0); } fclose($h); return $r; } Hvis ja, hvordan kan jeg så gøre så others ikke er med?
Umiddelbart kan du godt bruge den, others kan du bare lade være en tom streng, altså kalde den med: post('
www.eksperten.dk/sti/script.php' ,'','dinvar=1&dinvar2=2'); osv
Ok, kiggede lidt mere på den du linkede til, kan jeg så gøre sådan her? - Og hvad skal jeg stoppe i $host og $path? $host = ""; $method = strtoupper("POST"); $path = ""; $data = ""; $fp = fsockopen($host, 80); fputs($fp, "$method $path HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); fputs($fp,"Content-type: application/x-www-form- urlencoded\r\n"); fputs($fp, "Content-length: " . strlen($data) . "\r\n"); fputs($fp, "User-Agent: MSIE\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $data); while (!feof($fp)) { $buf .= fgets($fp,128); } fclose($fp); return $buf; Og lige: Hvilken af dem er bedst?
Host er f.eks.
www.eksperten.dk og path er f.eks. /sti/til/script.php - De er nogenlunde ens ;)
<?
if(isset($_POST['login_username'])){
$host = "webmail.powerhosting.dk";
$method = strtoupper("POST");
$path = "/src/redirect.php";
$data =
$_POST['login_username'].$_POST['secretkey'].$_POST['js_autodetect_results'].$_POST['just_lo
gged_in'];
$fp = fsockopen($host, 80);
fputs($fp, "$method $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp,"Content-type: application/x-www-form- urlencoded\r\n");
fputs($fp, "Content-length: " . strlen($data) . "\r\n");
fputs($fp, "User-Agent: MSIE\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
while (!feof($fp)) {
$buf .= fgets($fp,128);
}
fclose($fp);
return $buf;
header("Location:
http://webmail.powerhosting.dk/src/redirect.php" );
} else {
header("Location:
http://www.babegalleri.dk/test/index.php?open=main.php?page=webmail" );
}
?>
Viser ingenting. Blank side.
Prøv:
<?php
if(isset($_POST['login_username']))
{
$host = "webmail.powerhosting.dk";
$method = strtoupper("POST");
$path = "/src/redirect.php";
$data = 'login_username=' . $_POST['login_username'] . '&secretkey=' .
$_POST['secretkey'] . '&js_autodetect_results=' .
$_POST['js_autodetect_results'] . '&just_logged_in=' .
$_POST['just_logged_in'];
$fp = fsockopen($host, 80);
fputs($fp, "$method $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: " . strlen($data) . "\r\n");
fputs($fp, "User-Agent: MSIE\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
$buf = '';
while (!feof($fp))
{
$buf .= fgets($fp,128);
}
fclose($fp);
echo "Resultatet var: $buf";
//header("Location:
http://webmail.powerhosting.dk/src/redirect.php" );
}
else
{
header("Location:
http://www.babegalleri.dk/test/index.php?open=main.php?page=webmail" );
}
?>
Med rigtig email og kode: Resultatet var: HTTP/1.1 302 Found Date: Mon, 16 May 2005 16:17:40 GMT Server: Apache/1.3.31 (Debian GNU/Linux) PHP/4.3.4 X-Powered-By: PHP/4.3.4 Set-Cookie: SQMSESSID=332641fb7008d341f7064b41b48eb643; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: squirrelmail_language=en_US; expires=Wed, 15-Jun-2005 16:17:41 GMT; path=/ Set-Cookie: key=3eoCd9UQcRV4EUh6KA%3D%3D; path=/ Location: webmail.php Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 0 Med asd og asd: Får jeg det samme, bare med SquirrelMail fejl login.
Det lader jo til at fungere, du bliver logget ind, og squirrelmail vil redirecte dig til webmail.php - Hvad forventer du at der skal ske da?
At man bliver sendt videre og kunne tjekke sin mail.
Den metode vi poster bare til en anden side, du kommer jo ikke derover ;P Er det ikke lettere at modificere redirect.php og poste direkte til den=
Ved ikke lige hvad modificere betyder :P Så forstår ikke lige hvad du mener, jeg vil bare gerne have så man kan logge ind og tjekke mail.
I stedet for at poste til dit script, så post til squirrelmails script og ret i det hvis du også skal gøre noget ved folks data...
Det kan jeg ikke fordi jeg vil lave sådan at hvis man vælger @woox.dk i stedet for @babegalleri.dk, så laver jeg så det bliver sendt til en anden side.
Så lav en "mellemside" hvor du "opsummerer" hvad de har valgt, og så skal de så trykke på en knap (klik her for at fortsætte) som så submitter til det rigtige sted - Denne form skal bare have en masse hidden fields...
Det er sådan jeg synes det er dumt, hvis bare det virkede med at php postede.
Ellers skulle man måske ud i noget javascript, i den første form?
Lyder som en ok idé, hvis det blot er for at finde ud af hvor brugerne skal hen:
<script type="text/javascript">
function checkMe()
{
if ( document.getElementById('site').value == 'woox.dk' )
{
document.getElementById('formen').action = '
http://webmail.powerhosting.dk/src/redirect.php'; }
else
{
document.getElementById('formen').action = '
http://www.babegalleri.dk/test/index.php?open=main.php?page=webmail'; }
return true;
}
</script>
<noscript>Du skal have javascript slået til for at bruge dette site!</noscript>
<form id="formen" method="post" action="<?= $_SERVER['PHP_SELF'] ?>" onsubmit="return checkMe()">
ditnavn @ <select id="site" name="site">
<option value="woox.dk">woox.dk</option>
<option value="babegalleri.dk">babegalleri.dk</option>
</select>
<button type="submit">Send</button>
</form>
Det kunne måske laves ved at have et hidden felt med navnet login_username. I det felt: Når man submittede skulle den smide værdien af et nyt felt, username, et @ og værdien af site i. Kunne det lades sig gøre sådan?
Det er da ikke så svært at bygge videre på mit eksempel?
<script type="text/javascript">
function checkMe()
{
document.getElementById('username').value = document.getElementById('uname').value + '@' + document.getElementById('site').value;
if ( document.getElementById('site').value == 'woox.dk' )
{
document.getElementById('formen').action = '
http://webmail.powerhosting.dk/src/redirect.php'; }
else
{
document.getElementById('formen').action = '
http://www.babegalleri.dk/test/index.php?open=main.php?page=webmail'; }
return true;
}
</script>
<noscript>Du skal have javascript slået til for at bruge dette site!</noscript>
<form id="formen" method="post" action="<?= $_SERVER['PHP_SELF'] ?>" onsubmit="return checkMe()">
Brugernavn: <input type="text" id="uname" name="uname" />
<select id="site" name="site">
<option value="woox.dk">woox.dk</option>
<option value="babegalleri.dk">babegalleri.dk</option>
</select><br />
<input type="password" name="kode" /><br />
<input type="hidden" id="username" name="username" value="" /><br />
<button type="submit">Login</button>
</form>
Hmm det virker ikke i IE og i FF åbner den bare action="<?= $_SERVER['PHP_SELF'] ?>" og udføre ikke checkMe()
http://www.babegalleri.dk/test/index.php?open=main.php?page=webmail Koden:
<p align="center">Webmail</p>
<script type="text/javascript">
function checkMe(){
document.getElementById('login_username').value = document.getElementById('username').value + '@' +
document.getElementById('site').value;
if ( document.getElementById('site').value == 'babegalleri.dk' ){
document.getElementById('formen').action = '
http://webmail.powerhosting.dk/src/redirect.php'; } else {
document.getElementById('formen').action = '
http://webmail1.b-one.nu/src/redirect.php'; }
return true;
}
</script>
<form onsubmit="return checkMe()" method="post" action="<?= $_SERVER['PHP_SELF'] ?>" target="_blank">
<p>Her kan du logge på din @BabeGalleri.DK webmail, hvis du altså har en. Hvis du ingen har og gerne vil have en så kan du
gøre en af følgende ting:<ul>
<li>Sponsorere noget til BabeGalleri.DK.</li>
<li>Gøre noget godt for BabeGalleri.DK.</li>
<li>Vinde en @BabeGalleri.DK mail, i en af de konkurrencer vi afholder engang i mellem.</li>
</ul></p>
<p>
Brugernavn:<br>
<input type="hidden" name="login_username" id="login_username" value="">
<input type="text" name="username" size="25"> @ <select id="site" name="site">
<option>Vælg domæne</option>
<option value="babegalleri.dk">BabeGalleri.DK</option>
<option value="woox.dk">WooX.DK</option>
</select>
<br><br>
Kode:<br>
<input type="password" name="secretkey" size="25">
<input type="hidden" name="js_autodetect_results" value="0">
<input type="hidden" name="just_logged_in" value="1">
<p><input type="submit" value="Login"></p>
</form>
Du har ikke givet formen den ID jeg har skrevet: <form onsubmit="return checkMe()" method="post" action="/test/main.php" target="_blank"> ændres til <form id="formen" onsubmit="return checkMe()" method="post" action="/test/main.php" target="_blank">
Det virker stadigvæk ikke, jeg prøver lige at oprette en mail du kan tjekke med. brugernavn: coderdk domæne: babegalleri.dk kode: coderdk Prøv selv i IE og FF, har ikke selv prøvet andre endnu.
<input type="text" name="username" size="25"> skal også være <input type="text" id="username" name="username" size="25">
Synes nu det er lidt mærkeligt. Nu virker det i Opera og FF, men ikke i IE. Får fejl login :/ Har prøver med fler forskellige mails.
Men du ryger de rigtige steder hen?
Ja det gør jeg i alle browsere. Kan ikke forstå det, hvad kan fejlen være?
Hmm ja, det kan jeg ikke umiddelbart se - Måske target="_blank"? Jeg kan ikke lige regne den ud
Jeg kan desværre ikke lige regne det ud, prøv at ændre: <input type="hidden" name="login_username" id="login_username" value=""> til: <input type="hidden" name="login_username" id="login_username"> Ellers ved jeg ikke lige hvad der går galt - Underligt at IE ikke vil se felterne ordentligt...
Kan det være javascriptet?
Fandt selv min fejl, det var at der hvor login er, der hedder feletet brugernavn også username. Tusind tak for hjælpen, smider du svar?
Vi tilbyder markedets bedste kurser inden for webudvikling