[php]Zdobycie danych użytkownika i wpisanie ich do bazy


(tndek) #1

Witam.

Stworzyłem aplikację na facebooka. Użytkownik przechodzi do niej poprzez link

Klikając "Przejdź do aplikacji" zostaje przekierowany do wybranego materiału.

Moim zadaniem jest "wyciągnięcie" informacji o nim (ID, imię, nazwisko, email) między kliknięciem Przejdź do aplikacji a przekierowaniem do tego materiału i zapisaniem ich do bazy danych do stworzonej już tabeli (bez fizycznej ingerencji użytkownika FB). Kod odpowiedzialny powinien zostać wrzucony do pliku "dane.php" do którego przekierowuje redirect.html (z linku wyżej), a dane.php zawiera przekierowanie do pożądanego materiału. Tak wygląda przerobiony przeze mnie kod:

<?

function connectToFacebook()

{

include_once('/home/facebook.php');

	// utworzenie obiektu $facebook

	$facebook = new Facebook(array(

	  'appId' => 'xxxx', // application id

	  'secret' => 'zzzz, // secret

	  'cookie' => true,

	));


	return $facebook;

}


function getUser($facebook)

{


// utworzenie pustego obiektu użytkownika

	$me = null;


	// jeżeli użytkownik jest zalogowany na Facebooku

	// do zmiennej $uid zostanie zapisany identyfikator użytkownika

	// do zmiennej $me zostaną zapisane dane użytkownika

	if ($facebook) {

	  try {

		$uid = $facebook->getUser();

		$me = $facebook->api('/me');

	  } catch (FacebookApiException $e) {

		error_log($e);

	  }

	}


	return $me;

}


/**

 * rejestracja nowego użytkownika

 * */

function registerNewUser($me)

{

	require '/home/db_conn.php';


	$insert = "INSERT INTO users (imie, nazwisko, email, haslo, fb_id) VALUES (" .

				"'" . $me['first_name'] . "', " . 

				"'" . $me['last_name'] . "', " . 

				"'" . sha1(time() ) . "', " . // generowanie losowego hasła

				"'" . $me['id'] . "')";


	$result = $db->query($insert);


	$affected = $db->affected_rows;

	$db->close();


	if ($affected == 1)

		return true;

	else

		return false;

}

Plik db_conn.php:

<?php

$db = @new mysqli ("host","user","haslo","baza"); //łącze z bazą [serwer bazy,użytkownik,hasło] 


  if (mysqli_connect_errno() != 0) 

	{ 

		echo 'Blad polaczenia z baza'; 

		exit; 

	}

Moje podstawowe pytanie brzmi - czy ten kod ma rację bytu? Stosując w tej postaci oraz wywołując kolejno te funkcje (nie wiem, czy dobrze to robię), wszystko działa teoretycznie poprawnie jednak żadne dane nie zostają wpisane do tabeli. W czym w zasadzie tkwi problem? Będę bardzo wdzięczny, jeśli ktoś krok po kroku pomoże mi się z tym uporać. Pozdrawiam. :slight_smile:


([alex]) #2

Czy zdajesz sobie sprawę że po odpaleniu tego łamiesz prawo?

Przetwarzanie danych osobowych bez zgody ...


(tndek) #3

Chciałbym zaznaczyć, że przed zaakceptowaniem działania aplikacji widnieje komunikat:

W tych dokumentach znajdują się wszystkie informacje jak również zdanie odnośnie wyrażenia zgody na przetwarzanie określonych danych. Te zapisy są jawne i każdy, kto chce mieć dostęp do aplikacji powinien się z nimi zapoznać.


(Grzelix) #4
= "INSERT INTO users (imie, nazwisko, email, haslo, fb_id) VALUES (" ."'" . $me['first_name'] . "', " . "'" . $me['last_name'] . "', " . "'" . sha1(time() ) . "', " .    // generowanie losowego hasła"'" . $me['id'] . "')"; [/code]

a gdzie wartość do pola email?



jak coś nie działa dodaj kod 
[code=php]echo $insert

 to Ci wyświetli zapytanie następnie skopiuj i spróbuj wykonać mysqladmin i wtedy otrzymasz więcej informacji na temat poprawności zapytania.



btw zamiast  

 if ($affected == 1)true;

Wystarczy:


[code=php]return $affected ==1;

(tndek) #5

Wartość do pola email już dodałem.

Dopisałem

echo $insert

po

return $affected ==1;
  • nic się nie wyświetliło. To samo, jeśli umieszczę ten kod zaraz po wywołaniu wszystkich funkcji. Jeśli dopiszę "echo" przed

    $insert = "INSERT INTO users...

wyświetla np.:

INSERT INTO users (imie, nazwisko, email, haslo, fb_id) VALUES ('', '', '', '88c3a3ba28f5a9f0f2d995d882711cc466298d2b', '')

.

SHA przy kazdej próbie zmienia się.

Skopiowałem tą treść do okienka zapytania w panelu Myadmin - po wykonaniu dodało nowy rekord do tabeli na podstawie powyższych danych, czyli wypełnione zostało tylko pole od zmiennego hasła.

W czym może tkwić problem?


(Grzelix) #6

try writing the following code in the try block where you have called the this($me = $facebook->api('/me'):wink: api.

Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;

source: http://stackoverflow.com/questions/3465 ... -any-value


(tndek) #7

Dziękuję za te sugestię. :slight_smile: Jest postęp, teraz następuje wpis do bazy danych, jednak w dalszym ciągu pozostają puste pola z wyjątkiem generowanego hasła. Kod funkcji getUser w moim mniemaniu wydaje się być poprawny. Co jeszcze można zmodyfikować?