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

Signaler
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020
-
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020
-
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

2 réponses

Messages postés
29185
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 682
Tu dois remplacer le host par l'adresse du serveur
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

mais je ne sais pas comment déterminer l'adresse du serveur?
Messages postés
29185
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 682 >
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

c'est dans l'image que tu nous as posté....
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

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 /
Messages postés
29185
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 682
Tu peux virer ta ligne 56
Et penser a mettre un return dans ta fonction conn()
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

d'accord , problème résolu et merci bro.
Messages postés
29185
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 682
Bonjour,

Commence par ça :
https://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....

Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

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
Messages postés
29185
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 682 >
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

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 : https://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 :
https://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.
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

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
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

Est ce que je peux acceder a la base de donnés grace a cette adresse?
Messages postés
61
Date d'inscription
lundi 10 décembre 2018
Statut
Membre
Dernière intervention
6 août 2020

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);
}

?>