如何解决当插入Mysql db时,Facebook用户数据为空
| 我目前正在IFrame中开发PHP facebook canvas。这个想法是为了让用户使用Facebook提供的来自Facebook的api用户数据将图片上传到MysqL数据库。 一切顺利,直到我必须将Userdata和图片一起保存为止。在我推送提交并上传图片之后。它会重新加载页面并显示图片,但不会同时插入来自facebook的userdata。我在Internet上尝试了很多选项,但不在乎。它不会插入用户数据和图片。 我有一个看起来像这样的索引文件: <?PHP
setcookie(\"fag\");
session_start();
?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<Meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<link type=\"text/css\" rel=\"stylesheet\" href=\"css/style.css\" />
<title>Facebook</title>
<?PHP
define(\'MyConst\',TRUE);
include_once \'ClassLibrary/User_AR.PHP\';
include_once \'ClassLibrary/FacebookApi.PHP\';
include_once \'ClassLibrary/ImageUpload.PHP\';
$sr = new User_AR();
$fb = new FacebookApi();
$iu = new ImageUpload();
$info = $fb->getUserInfo();
$_COOKIE[\"fag\"] = $info;
foreach ($info as $key => $v )
{
switch ($key)
{
case \"ID\":
echo $v;
break;
case \"Name\":
echo $v;
break;
case \"Email\":
echo $v;
break;
case \"Img\":
echo $v;
break;
}
}
?>
</head>
<body>
<?PHP
if (isset($_POST[\"sendPhoto\"])) {
echo \"Is Set\";
if ($sr->exists($info[\"ID\"]) == false) {
$iu->processForm();
}else{
$iu->displayForm();
}
}
else
{
$iu->displayForm();
echo \"Is not Set\";
}
$arr = array($sr->getAllUsers());
for($i = 0; $i < count($arr); $i++){
foreach ($arr[$i] as $key => $value) {
echo \"<div class=\".\'\"\'.\"userBox\".\'\"\'.\">\".\"<div class=\".\'\"\'.\"innerBox\".\'\"\'.\">
<div class=\".\'\"\'.\"Title\".\'\"\'.\">Navn :</div><div class=\".\'\"\'.\"Values\".\'\"\'.\">\".$value[\"Name\"].\"</div>\".
\"<div class=\".\'\"\'.\"Dato\".\'\"\'.\">Dato :</div><div class=\".\'\"\'.\"Values\".\'\"\'.\">\".date(\"m.d.y\").\"</div>\".
\"<div class=\".\'\"\'.\"Title\".\'\"\'.\">Billede :</div><div class=\".\'\"\'.\"img\".\'\"\'.\"><img alt=\".\'\"\'.\"BrugerBillede\".\'\"\'.\" height=\".\'\"\'.\"150\".\'\"\'.\" width=\".\'\"\'.\"150\".\'\"\'.\" class=\".\'\"\'.\"Image\".\'\"\'.\"src=\".\'\"\'.$value[\"Img\"].\'\"\'.\"/></div></div></div>\";
}
}
?>
</body>
</html>
请记住,此代码是沙盒代码,可能包含奇怪的单词,这是由于疲倦的开发人员无法使其正常工作而导致的!
无论如何,这应该显示出uploadform并允许您上传文件,并且如果您在MysqL数据库中已注册,则不会显示该表单。
现在,这是ImageUpload文件,其中包含用于获取信息的上传图片的代码。
function __construct()
{
$killer = $_COOKIE[\"fag\"];
foreach ($killer as $key => $v )
{
switch ($key)
{
case \"ID\":
$id = $v;
echo $id;
break;
case \"Name\":
$name = $v;
echo $name;
break;
case \"Email\":
$email = $v;
echo $email;
break;
case \"Img\":
$img = $v;
echo $img;
break;
}
}
}
function displayForm() {
echo \"<form action=\".\'\"\'.$this->processForm().\'\"\'. \"method=\".\'\"\'.\"post\".\'\"\'.\"enctype=\".\'\"\'.\"multipart/form-data\".\'\"\'.\">
<div>
<input type=\".\'\"\'.\"hidden\".\'\"\'. \"name=\".\'\"\'.\"MAX_FILE_SIZE\".\'\"\'.\"value=\".\'\"\'.\"100000\".\'\"\'.\"/>
<label for=\".\'\"\'.\"userfile\".\'\"\'.\">Upload file:</label>
<input type=\".\'\"\'.\"file\".\'\"\'.\"name=\".\'\"\'.\"photo\".\'\"\'. \"id=\".\'\"\'.\"photo\".\'\"\'.\"/>
<input type=\".\'\"\'.\"submit\".\'\"\'. \"name=\".\'\"\'.\"sendPhoto\".\'\"\'.\"value=\".\'\"\'.\"Send Photo\".\'\"\'.\"/>
</div>
</form>\";
}
function processForm(){
$se = new User_AR();
if (isset($_FILES[\"photo\"]) && $_FILES[\"photo\"][\"error\"] == UPLOAD_ERR_OK){
if ($_FILES[\"photo\"][\"type\"] !=\"image/jpeg\") {
echo \"<p>Kun JPG or PNG </p>\";
$this->bool = false;
}
else if(!move_uploaded_file($_FILES[\"photo\"][\"tmp_name\"],\"images/\".basename($_FILES[\"photo\"][\"name\"])))
{
//echo \"<p>Im sorry there was a problem uploading that photo</p>\".$_FILES[\"photo\"][\"error\"];
}
else
{
$se->InsertPict($this->name,$this->email,\"images/\".basename($_FILES[\"photo\"][\"name\"]),$this->id);
$this->displayThanks();
}
}else{
echo $_FILES[\"photo\"][\"error\"];
}
/* if (isset($_FILES[\"photo\"])&& $_FILES[\"photo\"][\"error\"] == UPLOAD_ERR_OK) {
if ($_FILES[\"photo\"][\"type\"] !=\"image/jpeg\") {
echo \"<p>Kun JPG </p>\";
}else if (!move_uploaded_file($_FILES[\"photo\"][\"tmp_name\"],\"images/\".basename($_FILES[\"photo\"][\"name\"])))
{
echo \"<p>Im sorry there was a problem uploading that photo</p>\".$_FILES[\"photo\"][\"error\"];
}else{
}
}else
{
switch ($_FILES[\"photo\"][\"error\"]) {
case UPLOAD_ERR_INI_SIZE:
$message = \"The photo is larger than server allows\";
break;
case UPLOAD_ERR_FORM_SIZE:
$message = \"The photo is larger than the script allows.\";
break;
case UPLOAD_ERR_NO_FILE:
$message = \"No file was uploaded. Make sure you choose a file to upload.\";
default:
$message = \"Please contact your server administrator for help\";
break;
}
echo \"FEST \". $killer[\"Name\"];
}*/
function getitman() {
}
}
function displayThanks() {
echo \"<p><img src=\".\'\"\'.\"images/\".$_FILES[\"photo\"][\"name\"].\'\"\'.\" alt=\".\'\"\'.\"Photo\".\'\"\'.\"/> Thanks!</p>\";
}
function __destruct() {
}
}
?>
现在,这里变得完全怪异和疯狂。这行代码不会执行我告诉它的操作(仅保存图像)
$se->InsertPict($this->name,$this->id);
如果使用此if / else构造,它将仅保存我的图像,而不保存userdata
function processForm(){
$se = new User_AR();
if (isset($_FILES[\"photo\"]) && $_FILES[\"photo\"][\"error\"] == UPLOAD_ERR_OK){
if ($_FILES[\"photo\"][\"type\"] !=\"image/jpeg\") {
echo \"<p>Kun JPG or PNG </p>\";
$this->bool = false;
}
else if(!move_uploaded_file($_FILES[\"photo\"][\"tmp_name\"],\"images/\".basename($_FILES[\"photo\"][\"name\"])))
{
//echo \"<p>Im sorry there was a problem uploading that photo</p>\".$_FILES[\"photo\"][\"error\"];
}
else
{
$se->InsertPict($this->name,$this->id);
$this->displayThanks();
}
}else{
echo $_FILES[\"photo\"][\"error\"];
}
}
但是,一旦我将它放在if / else构造之外,它就会保存所有信息..但不会保存图像,并且在我连接到Facebook ap / canvas页面后立即执行此操作。这是不可取的(因为用户必须上传图片)。但是我很困惑,因为这个疯狂的代码而要疯了!
这是User_AR PHP文件:
<?PHP
include_once \'ClassLibrary/DbConn.PHP\';
include_once \'ClassLibrary/FacebookApi.PHP\';
class User_AR {
function getAllUsers() {
$exp = array();
$con = new DbConn();
$result = $con->command(\"select * FROM User\");
while (($row = MysqLi_fetch_array($result))!=false) {
$exp[] = array(\"ID\" => $row[\"UserID\"],\"Name\" => $row[\"UserName\"],\"Email\" =>$row[\"UserEmail\"],\"Img\" => $row[\"UserImg\"],\"FaceID\" => $row[\"UserFaceID\"]);
}
return $exp;
}
public function InsertPict($Name,$Email,$Img,$ID) {
$con = new DbConn();
if (MysqLi_num_rows($con->command(\"SELECT * FROM User WHERE UserFaceID =\".$ID.\"\"))== 0) {
$res = $con->command(\"INSERT INTO User(UserName,UserEmail,UserImg,UserFaceID) values(\'$Name\',\'$Email\',\'$Img\',\'$ID\')\");
echo $message = \"Dit billede er nu lagt op og du deltager i konkurrencen\";
}else
{
echo $message = \"Du har allerede indsendt et billede og deltager i konkurrencen\";
}
}
function exists($faceID) {
$fb = new FacebookApi();
$gg = $fb->getUserInfo();
//$game = count_chars($_COOKIE[\"fag\"][\"Name\"],3);
/// echo $game.$gg[\"Name\"];
$con = new DbConn();
if (MysqLi_num_rows($con->command(\"SELECT * FROM User WHERE UserFaceID = $faceID\")) == 0) {
$var = false;
return $var;
}else
{
$var = true;
return $var;
}
}
}
?>
我知道这是可行的,因为当我在ImageUpload类的if / else之外将函数“ InsertPict \”移到if / else之外时,它可以正常工作。
由于我曾从事此工作很长一段时间,而且可能对明显的错误等视而不见。在我完全发疯并因吃掉键盘而被解雇之前,请帮助我。我将很乐意为您提供任何帮助。
预先感谢!
解决方法
我最后重新编写了整个代码,这解决了问题。而不是使用facebook开发人员提供的示例代码。页面,我使用了php基本代码文件,并且有效。很抱歉给您带来不便。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。