Connexion a une base de données avec PHP PDO [Résolu]

Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
- - Dernière réponse : LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
- 30 sept. 2019 à 23:23
Bonjour , j'ai fonctionner mon application sur serveur local et tout marche bien mais quand j'ai éssayé de la fonctionné a un serveur réel , la connexion a la base n'éxiste pas

voici mon fichier.php
<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: X-Custom-Header, Origin, Content-Type , Authorisation , X-Requested-With");
header("Content-Type: application/json; charset=UTF-8 ");


$json = file_get_contents('php://input');
$decoded = json_decode($json);

$email = htmlspecialchars($decoded->email, ENT_QUOTES);
$pass = htmlspecialchars($decoded->password, ENT_QUOTES);

function conn ()
{
	$dbhost="localhost";
	$user='smartlibffsmart';
	$pass='smartlibffsmart';
	$db='smart';

	$conn = new PDO('mysql:host=smartlibffsmart.mysql.db;dbname=smartlibffsmart', $user, $pass);
	return $conn;
}

function encrypt_decrypt($action, $string)
{
	$output = false;
	$encrypt_method = "AES-256-CBC";
	$secret_key = 'WS-SERVICE-KEY';
	$secret_iv = 'WS-SERVICE-VALUE';
	$key = hash('sha256', $secret_key);
	$iv = substr(hash('sha256', $secret_iv), 0, 16);
	if ($action == 'encrypt') {
		$output = base64_encode(openssl_encrypt($string, $encrypt_method, $key, 0, $iv));
	} else {
		if ($action == 'decrypt') {
			$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
		}
	}
	return $output;
}

if (empty($email) || empty($pass) || mb_strlen($pass) < 6 || mb_strlen($pass) > 30 ){
json_encode(false);
	die;
}else{

$db = conn();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$password = encrypt_decrypt('encrypt',$pass);

$res = $db->prepare("SELECT * FROM user WHERE email = ? and password = ? ");
$res->execute([$email,$password]);
$values = $res->fetchAll();

echo json_encode(sizeof($values) > 0 ? true : false);
}

?>


informations sur la base

Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
26519
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2019
1833
1
Merci
Tu dois remplacer le host par l'adresse du serveur

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63792 internautes nous ont dit merci ce mois-ci

LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
mais je ne sais pas comment déterminer l'adresse du serveur?
jordane45
Messages postés
26519
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2019
1833 > LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
c'est dans l'image que tu nous as posté....
LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
erreur : <br />
<b>Fatal error</b>: Call to a member function setAttribute() on a non-object in <b>/home/smartlibff/www/SmartLibrary/api/logins.php</b> on line <b>59</b><br /
jordane45
Messages postés
26519
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2019
1833 -
Tu peux virer ta ligne 56
Et penser a mettre un return dans ta fonction conn()
LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
d'accord , problème résolu et merci bro.
Commenter la réponse de jordane45
Messages postés
26519
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2019
1833
0
Merci
Bonjour,

Commence par ça :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Et dis nous le message d'erreur qui t'est renvoyé....

A savoir que la plus part des hébergeurs n'autorisent pas une connexion distante. Donc ton script PHP doit se trouver sur leur serveur et non en local sur ton ordi....

LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
elle n'a donné rien , le réponse est vide
voici le lien du sitehttp://www.smartlibrairie.com/#!/dashboard
dans la page connecter tu peux voir l'erreur dans le navigateur aprés la soumission du formulaire
le nom du domaine : www.smartlibrairie.com
jordane45
Messages postés
26519
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2019
1833 > LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
Tu as une erreur 500....
mais... as tu modifié le script en tenant compte de ce qui écrit dans le lien que je t'ai donné ?
Si oui.. montres nous ce que tu as modifié....

Vérifies également que ton fichier est bien encodé en utf8 sans BOM (voir chapitre un de ce lien : http://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8 )

Je précise également que l'instruction htmlspecialchars n'est à utiliser QUE pour l'affichage .. et en aucun cas pour la "récupération" des variables...
Je t'invite donc à lire et à appliquer le contenu de ce lien également :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Pour finir, pour déterminer où se situe ton erreur ( une fois que tu auras mis en pratique TOUS les conseils donnés dans mes liens... et si le souci persiste.... ) , tu devras mettre en commentaire tout ton code puis réactiver ligne par ligne (en testant à chaque fois ) jusqu'à tant que tu trouves la (ou les ) ligne(s) qui pose(nt) problème.
LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
voici l'appel du script dans la partie cliente angular 8 :

.........
 let newUser = new User(email, password, nomcomplet, occupation, '');
    console.log(newUser);
    this.httpSubscription = this.http.post("http://www.smartlibrairie.com/SmartLibrary/api/logins.php", JSON.stringify(newUser)).subscribe(res => {
      console.log(res);
      if (res === true) { ...............


capture ecran :



s'il te plait dis moi si j'appelle incorrecteent les fichiers serveur ou peut etre j'appelle incorrectement le host dans le serveur
LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
Est ce que je peux acceder a la base de donnés grace a cette adresse?
LearnDeep
Messages postés
42
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
1 octobre 2019
-
Ca a marché (gestion d'erreur)

voici le response : Erreur : SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

nouveau code php :
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: X-Custom-Header, Origin, Content-Type , Authorisation , X-Requested-With");
header("Content-Type: application/json; charset=UTF-8 ");


$json = file_get_contents('php://input');
$decoded = json_decode($json);

$email = htmlspecialchars($decoded->email, ENT_QUOTES);
$pass = htmlspecialchars($decoded->password, ENT_QUOTES);

function conn ()
{
	
try{
  $bdd =new PDO('mysql:host=localhost; 
 dbname=smartlibffsmart; charset=utf8', 'smartlibffsmart', 'Smartnour55');
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}	

}

function encrypt_decrypt($action, $string)
{
	$output = false;
	$encrypt_method = "AES-256-CBC";
	$secret_key = 'WS-SERVICE-KEY';
	$secret_iv = 'WS-SERVICE-VALUE';
	$key = hash('sha256', $secret_key);
	$iv = substr(hash('sha256', $secret_iv), 0, 16);
	if ($action == 'encrypt') {
		$output = base64_encode(openssl_encrypt($string, $encrypt_method, $key, 0, $iv));
	} else {
		if ($action == 'decrypt') {
			$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
		}
	}
	return $output;
}

if (empty($email) || empty($pass) || mb_strlen($pass) < 6 || mb_strlen($pass) > 30 ){
json_encode(false);
	die;
}else{

$db = conn();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$password = encrypt_decrypt('encrypt',$pass);

$res = $db->prepare("SELECT * FROM user WHERE email = ? and password = ? ");
$res->execute([$email,$password]);
$values = $res->fetchAll();

echo json_encode(sizeof($values) > 0 ? true : false);
}

?>
Commenter la réponse de jordane45