重複の可能性:
curl_exec()は常にfalseを返します
こんにちは私はPHPを初めて使用しますが、しばらくの間このことに固執しています。だから私は独自のDBを持つ2つのドメインを持っています。したがって、ユーザーが1つのドメインにログインしようとして、その資格情報がDBに見つからない場合、他のドメインにカールして、その資格情報が存在するかどうかを確認します。したがって、一致とはnum_of_rows = 1、それ以外の場合は0を意味します。
カールが正常に機能した後、すべてをカールすることができますが、見返りに値を取り戻すことはできません。これが私のコードです:-
logincheck.php:
<?php
session_start();
if(isset($_POST['Email'], $_POST['Password'])){
$email = $_POST["Email"];
$password = $_POST["Password"];
print "email received $email";
print "<br>password received $password";
$db_username="root";
$db_password="root";
$database="photobook";
$localhost = "mysql";
$con = mysql_connect($localhost,$db_username,$db_password);
mysql_select_db($database,$con) or die( "Unable to select database");
$query = "select * from photobook.users where email ='$email' and password ='$password';" ;
$result = mysql_query($query);
$num=mysql_num_rows($result);
if($num == 1){
while($row = mysql_fetch_array($result))
{
$_SESSION['email'] = $row['email'];
$_SESSION['username'] = $row['username'];
}
header("location: home.php");
}
else{
include "Protocol.php";
print "<br>email after protocol file include is $email";
print "<br>password after protocol file include is $password";
$obj=new Protocol();
$val = $obj->loginCheck($email,$password);
**print "<br>value of val received is $val";**
if($val == 0){
session_destroy();
print "<br>user does not exist";
header("location: login.php");
}
else{
$_SESSION['email'] = $val[0];
$_SESSION['username'] = $val[1];
print "<br>user exists";
header("location: home.php");
}
}
mysql_close($con);
}
?>
最初のドメインのProtocol.php:-
<?php
class Protocol{
function loginCheck($p_email,$p_password){
$sid = 2;
$msg="sid=$sid&email=$p_email&password=$p_password";
print "<br>parameter string sent $msg";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.snapreveal.com/PhotoBook/src/Protocol.php");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $msg);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$p_result = curl_exec($ch);
curl_close($ch);
if ($p_result === FALSE) {
die("Curl error: " . curl_error($ch));
}
return $p_result;
}
} //end of protocol class
?>
2番目のドメインのProtocol.php:-
<?php
class Protocol{
function loginCheckResponse($p_email,$p_password){
print "<br>inside second domain loginCheckResponse";
print "<br>email inside second domain loginCheckResponse $p_email";
print "<br>password inside second domain loginCheckResponse $p_password";
$db_username="root";
$db_password="root";
$database="photobook";
$localhost = "mysql";
$con = mysql_connect($localhost,$db_username,$db_password);
mysql_select_db($database,$con) or die( "Unable to select database");
$query = "select * from photobook.users where email ='$p_email' and password ='$p_password';" ;
$result = mysql_query($query);
$p_num=mysql_num_rows($result);
print "<br>num found inside teja loginCheckResponse $p_num";
mysql_close($con);
if($p_num == 1){
while($row = mysql_fetch_array($result))
{
$u_email = $row['email'];
$u_username = $row['username'];
$res = array($u_email,$u_username);
print "<br>inside second domain logincheck, after match values in res array are, email $res[0],username $res[1]";
print "<br>value in res<br>";
print $res;
return $res;
}
}
else{
return 0;
}
}
} //end of protocol class
$pobj=new Protocol();
$sid = $_POST['sid'];
$p_email = $_POST['email'];
$p_password = $_POST['password'];
if($_POST['sid'] == 2 ){
$pobj->loginCheckResponse($p_email,$p_password);
}
?>
プリントの出力:
email received max@gmail.com
password received max
email after protocol file include is max@gmail.com
password after protocol file include is max
parameter string sent sid=2&email=max@gmail.com&password=max
value of val received is
inside second domain loginCheckResponse
email inside second domain loginCheckResponse max@gmail.com
password inside second domain loginCheckResponse max
num found inside second domain loginCheckResponse 1
inside second domain logincheck, after match values in res array are, email max@gmail.com,username Max
value in res
Array
user does not exist
したがって、「受け取ったvalの値は」です。この行は、curlが値を返した後に印刷する必要がありますが、その前に印刷します。また、返される価値はありません。なぜ何か考えはありますか?