ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingเกี่ยวกับการับค่าครับ PHP
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: เกี่ยวกับการับค่าครับ PHP  (อ่าน 4029 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« เมื่อ: 26 กันยายน 2008, 17:21:15 »

คือผมทำหน้าเพจที่ส่งค่าแบบ post โดยใช้ฟังก์ชั่น fopensock แล้วใช้ fwrite ในการส่งข้อมูลแบบโพสครับ


function sendToHost($host,$data,$path,$message)
{
      $fp = fsockopen("$host", 80, $errno, $errstr, 30);
      if (!$fp)
      {
      echo "$errstr ($errno)\n";
      }
      else
      {
      //  $url = $path."?".$data;
      
      
        fwrite($fp,"POST /$path HTTP/1.1\r\nHost: $host \r\nContent-Type: text/xml; charset=UTF-8\r\n\r\n$data");
      
         
         $x="";
            while (!feof($fp))
            {
               $x=$x.fgets($fp, 128);   
               
            }
            fclose($fp);
         
      
      
       
       
        $fp1 = fopen("C:\AppServ\www\dna\include\counter.txt","a");
      
        if(fwrite($fp1,$message))
        { 
         $xml="";
                  while (!feof($fp1))
                  {
                     $xml .= fgets ($fp1,128);
                     
                  }
              
            fclose($fp1);
      
            
            
        }
      }
      return $x;
}

โดยผมลองส่งแบบในเครื่องตัวเองอ่ะครับ แล้วทดสอบการส่งค่าไป

แล้วอีกหน้าหนึ่งก็ทำการรับค่า post แต่ผมไม่รู้ว่าจะรับค่ายังไงอ่ะครับ ถ้าส่งมาแล้วมันจะมีฟังก์ชั่นอะไรในการรับค่าบ้างครับ
บันทึกการเข้า
oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #1 เมื่อ: 26 กันยายน 2008, 18:51:38 »

รบกวนชี้แนะหน่อยนะครับ ถ้าผมไม่ได้คำตอบเนี้ยผมอาจจะไม่ได้กลับบ้านอ่า T^T
บันทึกการเข้า
did9
Newbie
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 68



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 26 กันยายน 2008, 19:29:58 »

หน้าที่รับค่าลอง

var_dump($_POST);

ดูรึยังครับว่า มีค่า post มามั๊ย?
บันทึกการเข้า
oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #3 เมื่อ: 29 กันยายน 2008, 09:39:02 »

ลองดูแล้วได้ผลอย่างนี้ครับ

array(0) { }

แปลว่าผมส่งตัวแปรไปไม่ได้หรอครับเนี้ย - -'
บันทึกการเข้า
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #4 เมื่อ: 29 กันยายน 2008, 11:53:58 »

บอกมะถูก ปกติใช้แต่ curl ที่มันง่ายกว่านี้เยอะ

แต่ลองๆดูประมาณนี้ ได้ยังงัยบอกด้วย

โค๊ด:
<?php

function fsock_parse_url($url) {
$url parse_url($url);
$url['scheme'] = !empty($url['scheme']) && $url['scheme'] == 'https' 'ssl://' '' ;
$url['path'] = !empty($url['path']) ? $url['path'] : '/' ;
$url['path'] .= !empty($url['query']) ? $url['query'] : '' ;
$url['port'] = $url['scheme'] == 'ssl://' 443 80 ;
return $url;
}

function 
fsockpost($url $postdata_assoc $include_header=false $timeout=30) {
extract(fsock_parse_url($url) , EXTR_PREFIX_ALL "fsockpost");
$postdata_assoc http_build_query($postdata_assoc);

if(!$fp = @fsockopen($fsockpost_scheme $fsockpost_host $fsockpost_port $errno $errstr $timeout)) {
echo "FSOCK ERROR : "$errstr;
return false;
}
$header "POST $fsockpost_path HTTP/1.1" "\r\n";
$header .= "Host : $fsockpost_host"\r\n";
$header .= "Content-Type : application/x-www-form-urlencoded" "\r\n";
$header .= "Content-Length : " strlen($postdata_assoc) . "\r\n";
$header .= "Connection : Close" "\r\n\r\n";
$header .= $postdata_assoc;

fputs($fp $header);

while(!feof($fp)) {
$buffer fgets($fp); // catch buffer
if(!empty($is_body)) {
$response_body .= $buffer;
}
elseif(preg_match("|^[\s]*$|" $buffer)) {
$is_body true;
}
else {
$response_header .= $buffer;
}
}

fclose($fp);

return $include_header $response_header $response_body $response_body ;

}


$url "http://domain.com/submit.php";
$postdata['username'] = "admin";
$postdata['password'] = "123456789";

echo 
fsockpost($url,$postdata);

?>

ไม่เข้าใจตรงไหนก็ถามนะ จะได้มีคนที่รู้มาตอบ ผมจะได้เข้ามาอ่านด้วย เพราะผมก้ไม่รู้ แหะๆ  Cheesy
บันทึกการเข้า

oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #5 เมื่อ: 29 กันยายน 2008, 12:09:16 »

The standard format for the POST method is:
POST <URL> HTTP 1.x <CRLF> [message-body]
All content is URL encoded.


คือเนี้ยอ่ะครับประเด็นที่ผมต้องหาวิธีการส่ง post request http อ่ะครับ

ผมไม่รู้ว่าจะรับค่านี้อย่างไร เค้าให้เอกสารมาบอกแค่นี้อ่ะครับ โดย message-body นั้นจะเป็น xml ซึ่ง

ตอนนี้ผมไม่รู้ว่าจะรับค่านั้นอย่างไรอ่ะครับ ก็เลยลองเขียนจำลองการส่งของเค้ามาอ่ะครับ

ผมอยากทราบว่าถ้าเป็นเืพื่อนๆแล้วจะรับค่าที่เค้าบอกมาแค่นี้อย่างไรอ่ะครับ
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 29 กันยายน 2008, 12:54:50 »

จะส่ง post

ค่า $data ไม่ควรเพียวๆ ครับ

ต้องแนวเช่นจากเดิมสมมุติ
$data = "My text\r\nTest test";

ต้องเป็น

$data = "My text\r\nTest test";
$data = "text=".urlencode($data);

แล้วที่หน้ารับ ก็ของดูค่า $_POST ดู น่าจะเจอ
แล้่วถ้าจะแปลงค่ากลับ ก็ใช้ urldecode

 Smiley


อธิบายเพิ่ม ที่ผมพูดไปก็คือการส่ง query string
ซึ่งสำหรับ GET เราจะเห็นต่อท้ายจาก ? ใน url
สำหรับ POST เอง ก็ไม่ต่างจาก GET เพียงแต่ค่ามันจะถูกส่งต่อจาก header
ซึ่งเป็นการทำงานในเบื้องหลังของโปรโตคอลนั้นเอง

 Smiley
« แก้ไขครั้งสุดท้าย: 29 กันยายน 2008, 12:56:32 โดย EThaiZone » บันทึกการเข้า

kero
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 326



ดูรายละเอียด
« ตอบ #7 เมื่อ: 29 กันยายน 2008, 13:01:58 »

The standard format for the POST method is:
POST <URL> HTTP 1.x <CRLF> [message-body]
All content is URL encoded.


คือเนี้ยอ่ะครับประเด็นที่ผมต้องหาวิธีการส่ง post request http อ่ะครับ

ผมไม่รู้ว่าจะรับค่านี้อย่างไร เค้าให้เอกสารมาบอกแค่นี้อ่ะครับ โดย message-body นั้นจะเป็น xml ซึ่ง

ตอนนี้ผมไม่รู้ว่าจะรับค่านั้นอย่างไรอ่ะครับ ก็เลยลองเขียนจำลองการส่งของเค้ามาอ่ะครับ

ผมอยากทราบว่าถ้าเป็นเืพื่อนๆแล้วจะรับค่าที่เค้าบอกมาแค่นี้อย่างไรอ่ะครับ

แค่ต้องการจำลองการส่ง ทำไมไม่ทำหน้า form แล้วส่ง ไม่ง่ายกว่าเหรอครับ  Huh?

ผมว่า post รับมันง่ายกว่าส่งนะ ไม่ลองเขียนรับของจริงไปเลยล่ะ
บันทึกการเข้า

Amazon Review Blog ไม่เคยได้เงินกะเขาเล้ย เฮ้อ
Blog คนบ้า 555 Blog ผมเองครับเอาไว้นั่งบ่น
zo501
สมุนแก๊งเสียว
*

พลังน้ำใจ: 19
ออฟไลน์ ออฟไลน์

กระทู้: 862



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 29 กันยายน 2008, 13:18:47 »

งงเป็นไก่ตาแตกเลย  Tongue

ตรงบรรทัดไหน fn รับข้อมูลจาก fsock อะ เห็นมีแต่เขียนข้อมูล

ผมคิดว่าตัวรับเต้องขียนเป็น script รันแบบ deamon เอานะ ไม่งั้นส่งไปแล้วมันไม่รู้หรอกว่าคุณส่งมา


บันทึกการเข้า

oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #9 เมื่อ: 29 กันยายน 2008, 13:24:21 »

รับของจริง ผมเขียนแล้วไม่มีข้อมูลอะไรมาเลยอ่ะครับ

โค๊ด:
if($GLOBALS['GLOBALS']['HTTP_RAW_POST_DATA']){
$XML_GLOBALS=$GLOBALS['GLOBALS']['HTTP_RAW_POST_DATA'];
}else{
$XML_GLOBALS=$GLOBALS['HTTP_RAW_POST_DATA'];
}


$XML_DATA = $XML_GLOBALS;
//$XML_STR = strstr($XML_DATA,'<?xml');
$XML_STR = addslashes($XML_DATA);

ลอง echo $XML_STR มาก็ไม่มีอะไรเลยอ่ะครับ

โค้ดข้างบนคือหน้ารับข้อมูลอ่ะครับ
บันทึกการเข้า
oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #10 เมื่อ: 29 กันยายน 2008, 13:32:11 »

อ้างถึง
ผมคิดว่าตัวรับเต้องขียนเป็น script รันแบบ deamon เอานะ ไม่งั้นส่งไปแล้วมันไม่รู้หรอกว่าคุณส่งมา

หมายความว่าไงอ่ะครับ ?
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 29 กันยายน 2008, 13:36:35 »

ลองแบบนี้ละกัน ยังรับค่าไม่ได้ให้เตะหมาข้างบ้าน  Lips Sealed

โค๊ด:
echo file_get_contents("php://input");

กรำ แก้ๆ พิมพ์ผิด จะเล่นมุขหมาข้างบ้าน

อันนี้ใช้รับค่าที่ต่อจาก header ล้วนๆ เลย  Tongue
« แก้ไขครั้งสุดท้าย: 29 กันยายน 2008, 13:41:42 โดย EThaiZone » บันทึกการเข้า

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #12 เมื่อ: 29 กันยายน 2008, 13:39:01 »

เอ้อ งง

ทีแรกที่ผมบอกฟังก์ชั่นไป เพราะคิดว่าฟังก์ชั่นที่ท่านใช้มันมีข้อผิดพลาดง่าย อย่างตรง host data หรือ path ผมไม่ทราบว่าท่านใส่ไปยังงัย ทั้ง 3 ตัวแปรใส่ผิดนิดนึงคือไม่ส่งค่าโพสท์ทันทีอ่ะ

ผมเลยเขียนฟังก์ชั่น ให้มันดูง่ายขึ้น แต่ว่ามันผิดจุดประสงค์ของท่านไป ไม่เป็นไร

เอางี้ จากฟังก์ชั่นผมนะ

ไปสร้างไฟล์อีกไฟล์แบบนี้ สมมุตชื่อไฟล์ submit.php

โค๊ด:
<?php

print_r
($_POST)

?>

แล้วลอง fsock เข้าไปแล้วดูว่า response body เป็นยังงัย

อย่างเช่น

โค๊ด:
<?php

// include function before this line

$url "http://domain.com/submit.php";
$postdata['username'] = "admin";
$postdata['password'] = "123456789";

echo 
fsockpost($url,$postdata);


?>

ถ้ามันรับค่าโพสท์จาก fsock ได้ ผลการรันควรจะเป็นแบบนี้

โค๊ด:
Array
(
    [username] => admin
    [password] => 123456789
)

บันทึกการเข้า

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #13 เมื่อ: 29 กันยายน 2008, 13:47:06 »

The standard format for the POST method is:
POST <URL> HTTP 1.x <CRLF> [message-body]
All content is URL encoded.


คือเนี้ยอ่ะครับประเด็นที่ผมต้องหาวิธีการส่ง post request http อ่ะครับ

ผมไม่รู้ว่าจะรับค่านี้อย่างไร เค้าให้เอกสารมาบอกแค่นี้อ่ะครับ โดย message-body นั้นจะเป็น xml ซึ่ง

ตอนนี้ผมไม่รู้ว่าจะรับค่านั้นอย่างไรอ่ะครับ ก็เลยลองเขียนจำลองการส่งของเค้ามาอ่ะครับ

ผมอยากทราบว่าถ้าเป็นเืพื่อนๆแล้วจะรับค่าที่เค้าบอกมาแค่นี้อย่างไรอ่ะครับ


เชเช เข้าใจแระ เหมือนจะงง ไม่ใช่จำลองการรับค่า POST METHOD แล้วคับ หลงประเด็นไปไกลเลยทั้งผมด้วย

แต่เป็นการอ่าน xml request มากกว่า เหมือนจะเป็น api อะไรสักอย่างใช่มะ
บันทึกการเข้า

oxygenyoyo
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #14 เมื่อ: 29 กันยายน 2008, 13:53:01 »

โค๊ด:
			
if($GLOBALS['GLOBALS']['HTTP_RAW_POST_DATA']){
$XML_GLOBALS=$GLOBALS['GLOBALS']['HTTP_RAW_POST_DATA'];
}else{
$XML_GLOBALS=$GLOBALS['HTTP_RAW_POST_DATA'];
}


ตอนนี้ผมใช้โค้ดข้างบนนี้ก็สามารถรับค่าได้แล้วครับ

ข้างล่างคือ respone ครับ

โค๊ด:
HTTP/1.1 200 OK
Date: Mon, 29 Sep 2008 06:44:30 GMT
Server: Apache/2.2.3 (Win32) PHP/5.1.6
X-Powered-By: PHP/5.1.6
Content-Length: 193
Connection: close
Content-Type: text/html


Array
(
    [1] => <?xml version="1.0" encode="UTF-8"?><status>T</status>
    [value] => <?xml version="1.0" encode="UTF-8"?><status>T</status>
    [0] => 0
    [key] => 0
)
OK INSERT SUCCESS
บันทึกการเข้า
zo501
สมุนแก๊งเสียว
*

พลังน้ำใจ: 19
ออฟไลน์ ออฟไลน์

กระทู้: 862



ดูรายละเอียด เว็บไซต์
« ตอบ #15 เมื่อ: 29 กันยายน 2008, 15:17:33 »

แก้ได้แล้ว  Cheesy ดีใจด้วยครับ  Smiley
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์