[RESOLU] Connexion à une autre base de donnée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Connexion à une autre base de donnée

Re: [RESOLU] Connexion à une autre base de donnée

par Saian » 24 nov. 2012, 21:43

Content de t'avoir aidé :)

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 20:42

Merci pour ton aide, j'ai enfin réussit.

Sujet clos de ce fait ^^

Cordialement

Re: Connexion à une autre base de donnée

par Saian » 24 nov. 2012, 17:03

A priori je dirai que tu peux, à la fin du traitement sur le serveur distant, afficher des données que tu vas traiter ensuite à partir du return du curl_exec.
Tout est imaginable à partir de la. Tu peux tenter par exemple quelque chose dans le style : echo un http_build_query($_SESSION) et de l'autre côté faire un $_SESSION = parse_str($return_curl_exec).
Le code n'est peut être pas fonctionnel mais manquerait pas grand chose pour qu'il le soit dans ce cas. Par contre écraser la session comme ça c'est plutôt sauvage.

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 16:52

Une question bête, puis je créer une session depuis mon site distant, et l'affichée sur le site local?

Ou y a t'il moyen de traiter les infos comme le panier et autre, sur le site local en fonction du retour du site distant?

Merci

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 16:47

J'ai posté et testé ^^ désolé, trop hâtif, mais s'était dans le cas où.

Bon tout fonctionne, merci beaucoup pour ton aide, me reste à supprimer le panier et à déduire la somme, ce qui devrais pas trop poser de problème.

Merci beaucoup

Cordialement

Re: Connexion à une autre base de donnée

par Saian » 24 nov. 2012, 16:21

As tu pris la peine d'essayer ?
$_POST['name'] = USERS_ID;
print_r($_POST);

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 16:13

oui c'est en session, mais pour l'injecter, puis je faire par exemple, $_POST['name']=USERS_ID?

Merci beaucoup

Cordialement

Re: Connexion à une autre base de donnée

par Saian » 24 nov. 2012, 16:08

L'input hidden c'est simple, mais c'est facile de modifier sa valeur avant de cliquer sur le bouton valider.
Donc si c'est juste à titre indicatif oui mais si c'est pour trouver le bon user sur la base distante non.
Récupère le dans le code avant de le transmettre à cURL. Pour ça injecte le dans $_POST avant le http_build_query (je suppose que l'information doit être dans tes variables de session).

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 16:04

Alors
print_r($_POST['itesm_id']);   donne : Array ( [0] => 330 [1] => 324 ) 
print_r($_POST['quantity']);   donne : Array ( [0] => 1 [1] => 1 ) 
Après réception des données envoyées via http_build_query() comme tu me l'a indiqué
Array ( [quantity] => Array ( [0] => 1 [1] => 1 ) [itesm_id] => Array ( [0] => 330 [1] => 324 ) [total] => 4 [valider] => Valider )
Je dois récupérer le pseudo, tu me conseil de le mettre en <imput type="hidden"> avant de valider le formulaire, ou tu connais une autre solution?

En tout cas merci, je récupère mes données comme si j'étais sur le même site, ce qui m'avance énormément ^^.

Merci beaucoup

Cordialement

Re: Connexion à une autre base de donnée

par Saian » 24 nov. 2012, 15:41

Affiche nous les contenus de $_POST['itesm_id'] et $_POST['quantity'] avant envoi et après réception et privilégie le http_build_query.
Logiquement cela devrait suffir :
curl_setopt($c, CURLOPT_POSTFIELDS, http_build_query($_POST));
Quand tu lis cette erreur , tu te dis quoi ?
Warning: array_combine() expects parameter 1 to be array, boolean given in /var/www/monsitedistant.fr/panier.php on line 25
Tableau attendu en paramètre 1, booléen donnée.
Tu devrais comprendre qu'il y a un problème avec ta variable $item qui est égal à true ou false (un booléen quoi) et donc que tu as un problème avec $_POST['item'] et tu devrais donc la vérifier avant et après réception pour comprendre pourquoi tu n'as pas le tableau que tu espères... think !

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 15:35

Voici ce que j'ai fait, j'ai très certainement dû me tromper, mais je ne vois pas où:

Sur le site local, dans panier.php, après appuie sur le bouton "Valider"
	if (!empty($total)){
$itid = serialize($_POST['itesm_id']);
$qnt = serialize($_POST['quantity']);
$msg = false;
		/*Initialisation de la ressource curl*/
		$c = curl_init();
		curl_setopt($c, CURLOPT_URL, 'http://monsitedistant.fr/panier.php');
		/*On indique à curl de nous retourner le contenu de la requête plutôt que de l'afficher*/
		curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
		/*On indique à curl de ne pas retourner les headers http de la réponse dans la chaine de retour*/
		curl_setopt($c, CURLOPT_HEADER, false);
		/*On indique à curl d'envoyer une requete post*/
		curl_setopt($c, CURLOPT_POST,true);
		/*On ddonne les paramètre de la requête post*/
		curl_setopt($c, CURLOPT_POSTFIELDS,array('owner'=>USERS_NAME,'count'=>$qnt,'item'=>$itid));		/*On exécute la requête*/
		$output = curl_exec($c);
		/*On a une erreur alors on la lève*/
		if($output === false)
		{
			trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
			exit;
		}
		/*Si tout c'est bien passé on affiche le contenu de la requête*/
		else
		{
			//on affiche le résultat de la page distante, peux importe le résultat de l'envoie
			echo $output;
			if (!preg_match('#à bien été ajouté#i', $output))
			{
				$msg = true;
			} 
		}
		/*On ferme la ressource*/
		curl_close($c);
}
Script permettant de récupérer les données sur le site distant. (testé aussi bien avec unserialize que http_build_query
	$item = $_POST['item'];
	$count = $_POST['count'];
$item = unserialize($_POST['item']);
$count = unserialize($_POST['count']);
		$table = array_combine ($item, $count);
		foreach ($table as $v => $q){
			echo $v.' '.$q;
		}

Le résultat:

Code : Tout sélectionner

Warning: array_combine() expects parameter 1 to be array, boolean given in /var/www/monsitedistant.fr/panier.php on line 25 Warning: Invalid argument supplied for foreach() in /var/www/monsitedistant.fr/panier.php on line 26
Merci de votre aide

Cordialement

Re: Connexion à une autre base de donnée

par Saian » 24 nov. 2012, 13:45

Coucou, ça fait déjà 2 fois que je te donne une solution (à priori), alors je vais le redire une troisième fois. ^^
Tu sérialises tes tableaux avant envoi et tu désérialises après réception.
Fonctions serialize et unserialize.

PS : c'est en admettant que les tableaux ne passent pas dans les post fields de cURL ce que je n'ai pas vérifié par moi même et dont je ne me souviens pas de tête.
EDIT : et j'oubliais aussi la possibilité d'utiliser la fonction http_build_query aussi qui permettrait à priori de n'avoir aucun traitement particulier à faire à la réception et serait donc la meilleur solution !

Re: Connexion à une autre base de donnée

par Fre3z69 » 24 nov. 2012, 06:12

Salut, bin justement

J'ai un système de panier, avec plusieurs articles et pour chaque articles une quantité différente.

Je sais pas trop, mis à part un foreach, comment faire pour récupérer tous mes articles.

J'ai penser à le faire en traitement (sur le site distant), mais je n'arrivais pas à fournir les tableaux.

Comment pourrais-je faire?

Merci beaucoup

Cordialement

Re: Connexion à une autre base de donnée

par Saian » 23 nov. 2012, 10:28

Plutot qu'une boucle tu peux sérialiser ton tableau avant de l'envoyer et le désérialiser à la réception sur le deuxième serveur. Peut être même qu'un http_build_query suffirait (sans avoir besoin de désérialiser à la réception).
Sinon pas sur d'avoir compris ta dernière question : "Comment je peux récupérer les infos pour les insérer en BDD?"
Tu viens justement de les transmettre au deuxième serveur, donc tu n'as plus qu'à faire tes requête d'insert, update, etc non ?

Re: Connexion à une autre base de donnée

par Fre3z69 » 23 nov. 2012, 02:29

Je sais pas si c'est la bonne méthode, mais j'ai fait un foreach sur le site local, et j'ai mit le script qui envoie les données dans le foreach
$itid = $_POST['itesm_id'];
$qnt = $_POST['quantity'];
$table = array_combine ($itid, $qnt);
foreach ($table as $v => $q){
		/*Initialisation de la ressource curl*/
		$c = curl_init();
		curl_setopt($c, CURLOPT_URL, 'http://fantasycompany.mtxserv.fr/includes/panier.php');
		/*On indique à curl de nous retourner le contenu de la requête plutôt que de l'afficher*/
		curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
		/*On indique à curl de ne pas retourner les headers http de la réponse dans la chaine de retour*/
		curl_setopt($c, CURLOPT_HEADER, false);
		/*On indique à curl d'envoyer une requete post*/
		curl_setopt($c, CURLOPT_POST,true);
		/*On ddonne les paramètre de la requête post*/
		curl_setopt($c, CURLOPT_POSTFIELDS,array('users_name'=>USERS_NAME,'quantity'=>$v,'itesm_id'=>$q));		/*On exécute la requête*/
		$output = curl_exec($c);
		/*On a une erreur alors on la lève*/
		if($output === false)
		{
			trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
		}
		/*Si tout c'est bien passé on affiche le contenu de la requête*/
		else
		{
			//on affiche le résultat de la page distante, peux importe le résultat de l'envoie
			echo $output;
		}
		/*On ferme la ressource*/
		curl_close($c);
}
Sur le site distant, j'ai créer une autre foreach et j'affiche le résultat.
$table = $_POST;
echo $_POST['items_id'];
foreach ($table as $v => $k){
	echo '<p>'.$v.' -> '.$k.'</p>'; 
}
J'ai ce que je veux, sauf que ...

Comment je peux récupérer les infos pour les insérer en BDD?

Merci de votre aide