สอบถามเรื่อง Curl กับ 2 Server โดยการส่งค่า " ไป-กลับ "
ได้อยู่แล้วครับ
Date :
2011-08-25 00:32:29
By :
ikikkok
รบกวน Guide Line ให้หน่อยครับ
พอดีผมไม่มีความรู้ Curl แต่กำลังจะไปศึกษา
แต่ผมรบกวนพี่ๆ ช่วย Guide Line ให้นิดนึงครับ จะได้ไปต่อยอดได้สะดวก
ขอบคุณพี่ PlaKriM มากๆครับ
Date :
2011-08-25 00:40:18
By :
blackedition
ถ้าคุณศึกษา curl แล้วลองส่ง request ไปที่ฝั่ง host แล้ว ฝั่ง host ให้รับ request นั้นแล้ว echo ออกมา แล้วให้ client ลอง echo ผมลัพธ์ที่ได้จาก curl ออกมาดูครับ
มองง่ายๆ เหมือน html form ส่งให้ php server ศึกษาดูติดตรงไหน งง ตรงไหนค่อยมาถามครับ ช่วงนี้เขียน api ค่อนข้างจะเข้าใจเรื่องนี้พอสมควร แต่ผมอธิบายภาษาทางการไม่ได้ เพราะความรู้ทฤษฎีไม่มี มีแต่ประสบการณ์ตรง อธิบายเป็นภาษาคนแทนละกัน
Date :
2011-08-25 00:45:28
By :
ikikkok
จริงๆ ที่ทำอยู่ database จะอยู่ฝั่ง host หรือ api เท่านั้นครับ
Date :
2011-08-25 00:46:51
By :
ikikkok
ขอบคุณครับผมไปลองก่อนดีกว่า ติดค่อยมาถามอย่างพี่ว่า : )
ขอบคุณอีกครั้งคับ
Date :
2011-08-25 00:55:30
By :
blackedition
form.php
Code (PHP)
<?php
require('./config.php');
$submit=$_POST["Submit"];
$curlurl ="http://www.game2day.in.th/curl_service.php"; // url เพื่อเรียก ไปที่ curl_service ที่อยู่ใน server ที่สามารรถติดต่อดาต้าเบสได้
function reg_login($username,$password,$codeserv,$url)
{
global $curlurl;
$user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$params['username'] = $username;
$params['password'] = $password;
$params['code'] = $codeserv;
$params['url'] = $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST,1); // method ที่เราจะส่ง เป็น get หรือ post
curl_setopt($ch, CURLOPT_POSTFIELDS,$params); // paremeter สำหรับส่งไปยังไฟล์ ที่กำหนด
curl_setopt($ch, CURLOPT_URL,$curlurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$result = curl_exec($ch); // ผลการ execute กลับมาเป็น ข้อมูลใน url ที่เรา ส่งคำร้องขอไป
curl_close ($ch);
return $result;
}
?>
<?php
// ตรวจสอบ การกดปุ่ม submit
if (isset($submit)){
$conn = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(),"Error");
mysql_query("SET NAMES tis620");
if($_POST['Username']=="" || $_POST['Password']==""){
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";
echo "<script>alert('Please ! Input Username or Password.');history.back();</script>";
exit();
}
mysql_select_db($dbname);
$strSQL = "SELECT * FROM user_login WHERE user_log='".$_POST['Username']."' AND pass_log = '".$_POST['Password']."'";
$objQuery = mysql_query($strSQL) or die(mysql_error());
$totalRows = mysql_num_rows($objQuery);
$rowLogin = mysql_fetch_array($objQuery);
if($totalRows == 1){
$username=$_POST["Username"];
$password=$_POST["Password"];
$codeserv=$_POST["Code"];
$url = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
echo reg_login($username,$password,$codeserv,$url);
}else{
echo "<meta http-equiv='Content-Type' content='text/html; charset=tis-620' />";
echo "<script language='javascript'>alert('Password is Correct.');</script>";
echo "<meta http-equiv='refresh' content='0;URL=".$_COOKIE['xUri']."'>";
}
} else {
?>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></HEAD>
<BODY>
<form action="<?php $_SERVER["PHP_SELF"];?>" method="post">
<table width="500" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor="#CCCCCC">
<tr bgcolor="#CCFFFF">
<td colspan="2"><strong>Curl Login Form !!</strong></td>
</tr>
<tr>
<td width="127" bgcolor="#FFFFFF"><strong>username</strong></td>
<td width="366" bgcolor="#FFFFFF"><input type="text" name="Username"></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><strong>password</strong></td>
<td bgcolor="#FFFFFF"><input type="text" name="Password"></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><strong>Code Server</strong></td>
<td bgcolor="#FFFFFF"><input type="text" name="Code"></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"> </td>
<td bgcolor="#FFFFFF"><input type="submit" name="Submit" value="Submit">
<input type="reset" name="Submit2" value="Reset"></td>
</tr>
</table>
</form>
</BODY>
</HTML>
<?
}
?>
curl_service.php
Code (PHP)
<?php
session_start();
require('./config.php');
$conn = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(),"Error");
mysql_query("SET NAMES tis620");
// รหัส login
$admin_user="blackedition";
$admin_pass="loficvetio";
// เว็บ service โดยใช้ curl เป็นหลัก
$user=$_POST["username"];
$pass=$_POST["password"];
$code=$_POST["code"];
$url=$_POST["url"];
mysql_select_db("$dbname");
$strSQL = "SELECT * FROM cserver WHERE name = '$code'";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if(!$objResult){
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";
echo "<script language='javascript'>alert('Code Correct.');</script>";
}else{
if (isset($_GET['submit'])) {
$strCheck=$_REQUEST[strCheck];
if($_SESSION[sCaptcha]!=$strCheck){
echo "<script>alert('Captcha is Correct!');window.location='http://www.game2day.in.th/curl_service.php';</script>";
} else {
echo "Captcha ถูกต้อง";
}
} else {
?>
<br>
<IMG SRC="http://www.game2day.in.th/captcha.php" BORDER="0">
<form action="http://www.game2day.in.th/<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<input Value="<? echo $_GET['id']; ?>" type="hidden" name="id" />
<INPUT TYPE="text" NAME="strCheck" id="textfield" style="text-transform:uppercase; vertical-align:middle;" onKeyUp= "this.value=this.value.toUpperCase();" >
<br>
<br>
<input type="submit" name="submit" value="Vote !" /><br>
</form>
<?
}
}
mysql_close();
?>
ตอนนี้ รับค่าจาก form.php มาได้แล้วครับ
Check Code ใน DB Host ได้แล้ว
มาถึง Captcha ผมดึงมารูปขึ้นแล้ว พอกรอกรหัส Captcha เสร็จกด Submit
มันขึ้น Code Correct ก็คือ ค่าที่ส่งมาจาก form.php หายไปเฉยเลย ><"
ต้องทำยังไงต่อไปดีครับ รบกวน Guide ให้ที
รบกวนด้วยครับ
ประวัติการแก้ไข 2011-08-25 03:43:48
Date :
2011-08-25 03:31:39
By :
blackedition
รบกวนขอคำแนะนำด้วยครับ
Date :
2011-08-25 10:48:43
By :
blackedition
ขั้นตอนการ return captcha ควร return string binary ของ captcha มาครับ แล้วให้ client แสดงผลโดยการใช้ header อีกทีนึง ผมไม่รู้ว่าตอนสร้าง captcha เก็บข้อมูลที่ random มายังไงเก็บไว้ใน session หรือว่าอะไร แต่ถ้าจะให้ดีเขียนเป็นอะไรที่ unique สำหรับ user นั้นๆ ที่ผมคิดคือเขียนไฟล์ไว้หรือว่าเก็บใน db หลักการเหมือน token ครับ ใกล้เคียงกัน
Date :
2011-08-25 10:53:07
By :
ikikkok
สรุป : ตอนนี้ Login โดย Username / Pass และ Check ฝั่ง Server แล้ว
ส่งค่ามาฝั่ง Host และฝั่ง Host เช็คค่า ที่ส่งมาตรงกับ Host แล้ว
เข้าไประบบ Voting ก็ Vote ได้แล้วครับ เพิ่มค่าลงใน DB ข้อมูลของ Host แล้ว
ทีนี้จะส่งค่ากลับไป Server ว่า Username นี้ ได้ค่า vote ไปกี่ครั้ง แล้วไปเพิ่มแต้ม ใน DB ฝั่ง Server
รบกวนด้วยครับ ต้องทำยังไงต่อครับ เพื่อส่งค่ากลับไปให้ Server เพิ่มค่า Vote ลง DB
ขอบคุณครับ ..
ประวัติการแก้ไข 2011-08-27 00:20:13
Date :
2011-08-25 12:21:59
By :
blackedition
ค่า vote ไปกี่ครั้ง คืออะไรครับ เก็บไว้ที่ไหนยังไง ได้มาตอนไหน
Date :
2011-08-25 13:03:14
By :
ikikkok
Server > Input User/Pass/Code > Check Username / Password > Client
Client > Check Code > Input Captcha > Check Captcha > Insert Vote Point +1 > Server
Server > Insert Game Point +1
กำลังคิดอยู่ว่า จะให้มันไปๆมาๆ ที่ละ 1 หรือเก็บค่า Vote ไว้เรื่อยๆ แล้วค่อยส่งกลับมาทีเดียวเพื่อ insert ลง db ฝั่ง server
ตอนนี้ถึงขั้น Insert Vote Point +1 ใน DB ฝั่ง Client เหลือ ส่งค่ากลับไป Server เพื่อ Insert Game Point +1 ใน Username นั้นๆ
แต่ผมไม่รู้จะทำยังไงต่อ กลับการส่งค่ากลับไปที่ Server รบกวนด้วยครับ
Date :
2011-08-25 22:09:19
By :
blackedition
ตอนนี้ผมลองแบบ
เก็บค่า Vote Point ไว้ใน Session แล้วพอเพิ่ม Point กลับไปฝั่ง Server ส่งผ่าน GET
ทีนี้ มันได้หมดละครับ แต่พอกด back บน Browser ค่า Session มันไม่คืนค่า 0 มันยังเป็นค่าเดิมอยู่
ผมใช้
Code (PHP)
session_destroy();
แล้ว แต่พอกด Back ไปที่หน้า Input Captcha ผลคือ ค่าของ Session ยังเท่าเดิม ไม่รีกลับเป็น 0
ควรแก้ยังไงดีครับ
ประวัติการแก้ไข 2011-08-27 00:19:54
Date :
2011-08-25 23:38:35
By :
blackedition
ลบ Session ไม่ออก
ขนาดปิด Browser มันยังอยู่ - -" อึดจิงๆ
เพราะถ้ามันไม่หาย คนกด back กลับไปเอาค่า โกงสบายๆ T_T
รบกวนด้วยครับ ฝ่าฟันมาถึงขั้นนี้ มาติดอะไรแบบนี้อีก กุ้มใจ
ประวัติการแก้ไข 2011-08-27 00:19:38
Date :
2011-08-26 00:05:47
By :
blackedition
กด back มันน่าจะกลับไปใช้ cache นะ ลองใส่ no-cache ดูครับ เผื่อได้ นี่เดานะ
หรือว่าจะลักไก่ reload page ด้วย js ก่อนหนึ่งครั้่งที่เข้า เพจนั้นก็ได้นะ
Date :
2011-08-26 01:13:55
By :
ikikkok
พี่ครับ ผมลองเปลี่ยนใหม่
ตอนแรกผมใช้ส่งค่าแบบลักไก่ โดยผ่าน url ทีนี้ ถ้ากด back กลับไป มันก็เพิ่มค่าลง DB เรื่อยๆ แค่กด Back
ผมว่าคงใช้ไม่ได้
ทีนี้ผมเลยลองมาใช้ curl จาก client ส่งกลับไป server แล้วที่นี้มัน curl กลับไป localhost ละมัน error แต่ถ้าไม่ไช่ localhost ไปต่อได้
มันพอมีวิธีแก้ไม๊ครับ
แบบนี้ใช้ได้
Code (PHP)
$http = 'http://www.game2day.in.th/index.php';
$curlurl = $http;
แบบนี้มันใช้ไม่ได้ พอมีวิธีแก้ไม๊ครับ เพราะว่าถ้ามันใช้ไม่ได้ ก็ไม่รุ้จะทำต่อไปยังไง มันทดสอบไม่ได้ T_T
Code (PHP)
$http = 'http://localhost/curl/index.php';
$curlurl = $http;
รบกวนอีกครั้งคับ หาข้อมูลในเน็ต ก็ไม่เข้าใจ - -
ตอนแรกคิดว่าจะทำได้ล่ะ แต่ไปๆมาๆ มันลักไก่เกินไป ที่ส่งค่าผ่าน url แล้ว Insert ลง DB โดยค่าจาก url พอกด back มันเพิ่มค่าเรื่อยๆ
Bug ซะงั้น เลยต้องมาใช้ curl กลับไป ยังไงรบกวนด้วยนะครับ เซงมาก T_T
ประวัติการแก้ไข 2011-08-26 01:48:57 2011-08-26 01:50:20
Date :
2011-08-26 01:48:30
By :
blackedition
เปิด curl ที่เครื่องหรือยังครับ
Date :
2011-08-26 02:05:52
By :
ikikkok
ใช่เอา ; หน้า extension=php_curl.dll ออกหรือเปล่าครับ
เอาออกแล้วก็ยังไม่ได้ ><
Date :
2011-08-26 02:23:08
By :
blackedition
restart apache?
Date :
2011-08-26 02:38:40
By :
ikikkok
ได้หมดละคับ แต่ก็ไม่ 100%
สรุปปัญหา
1. Session ไม่หายเพราะ session_destroy(); อยู่คนละ Domain
2. Curl localhost ไม่ได้ เลยไปสมัคร Free Hosting มา Test แทนก็ผ่านไปด้วยดี
3. Insert ข้อมูลลง DB โดย $_GET จาก url ทำให้บัคได้ เลยใช้ curl ส่งค่ากลับแทน
ละเก็บภาพมาฝากครับ หลังจากตกแต่งแล้ว
และ ขอบคุณพี่ PlaKriM มากๆครับ : )
** ละขออนุญาติลบ Code เก่าๆนะครับ **
ประวัติการแก้ไข 2011-08-27 00:19:00
Date :
2011-08-27 00:18:15
By :
blackedition
Load balance : Server 00