Bonjour,
Voila je rencontre un petit problème avec mon code.
Voici mon code
<?php
session_start();
$hote = "localhost";
$user = "root";
$password = "";
global $pdo;
try {
$pdo = new pdo('mysql:host='.$hote.';dbname=base', $user,$password);
} catch (Exception $e) {
$e->getMessage();
}
$err = 0;
$err1 = 0;
$err2 = 0;
$err3 = 0;
if(isset($_POST['username']) && !empty($_POST['username'])) {
$username = $_POST['username'];
}else {
$username = '';
$err++;
}
if(isset($_POST['mdp']) && !empty($_POST['mdp'])) {
$mdp = $_POST['mdp'];
}else {
$mdp = '';
$err++;
}
if (!empty($username) and !empty($mdp)) {
$user = $pdo->prepare('SELECT * FROM personne WHERE NOM_PER = ? AND pass = ?');
$user->execute(array($username,$mdp));
$userexist = $user->rowCount();
if ($userexist == 1) {
$userdata = $user->fetch();
$_SESSION['u_id'] = $userdata['ID_PER'];
$u_id = $_SESSION['u_id'] ;
$statut = $userdata['STATUT'];
if ($statut == 'DG') {
header('location: ../pages/index.php?user='.$u_id.'');
}else{
header('location: ../page/index.php?user='.$u_id.'');
}
}else {
if ($userdata == 0) {
header('location: ../login.php?cu=1');
}else if($err != 0) {
header('location: ../login.php?cu=2');
}
}
}
?>
Je voudrais me connecter via un compte utilisateur créé manuellement dans la bdd.
et je recois comme message d'erreur : PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in................................ on line 34.
Merci pour votre aide
Cordiallement
akkomah
Bonsoir,
Activation des erreurs PDO (cf la doc de php) et $e-getmessage c'est bien mais il faut aussi l'afficher
Etonnant d'avoir un nom de champs en majuscules et un en minuscule. (enfin ça ne viens pas de là)
Et c'est Location et non location (fonctionne en local mais en fois en ligne c'est moins sur)
Toutes mes excuses pour le dérangement mais je n'y arrive toujours pas. Même après avoir corrigé (location et passé le nom du champs pass en PASS) je reçois toujours la même erreur.
Je débute à peine avec php et mysql ; aidez moi s'il vous plait
Merci une fois encore à la communauté
Je viens de corriger mon code côté "erreur" et par surprise le message que je recois maintenant a changé.
Échec de la connexion : SQLSTATE[28000] [1045] Access denied for user 'wwwdomaine_root'@'46.4.210.192' (using password: YES) alors que les informations sont correctes !!! pfffff je sais que je commence par déranger un peu mais.... svp
Voici mon nouveau code:
<?php
session_start();
$hote = "www.mondomaine.com";
$user = "wwwdomaine_root";
$password = "90045889652";
global $pdo;
try {
$pdo = new pdo('mysql:host='.$hote.';dbname=wwwzonepro_base', $user,$password);
} catch (PDOException $e) {
echo 'Échec de la connexion : ' . $e->getMessage();
exit;
}
$err = 0;
$err1 = 0;
$err2 = 0;
$err3 = 0;
if(isset($_POST['username']) && !empty($_POST['username'])) {
$username = $_POST['username'];
}else {
$username = '';
$err++;
}
if(isset($_POST['mdp']) && !empty($_POST['mdp'])) {
$mdp = $_POST['mdp'];
}else {
$mdp = '';
$err++;
}
if (!empty($username) and !empty($mdp)) {
$user = $pdo->prepare('SELECT * FROM personne WHERE NOM_PER = ? AND PASS = ?');
$user->execute(array($username,$mdp));
$userexist = $user->rowCount();
if ($userexist == 1) {
$userdata = $user->fetch();
$_SESSION['u_id'] = $userdata['ID_PER'];
$u_id = $_SESSION['u_id'] ;
$statut = $userdata['STATUT'];
if ($statut == 'DG') {
header('Location: ../pages/index.php?user='.$u_id.'');
}else{
header('Location: ../page/index.php?user='.$u_id.'');
}
}else {
if ($userdata == 0) {
header('Location: ../login.php?cu=1');
}else if($err != 0) {
header('Location: ../login.php?cu=2');
}
}
}
?>
Bonjour.
L'utilisation de global
ne se fait qu'à l'intérieur d'une fonction pour accéder à la variable qui en est externe, tu peux donc commencer par supprimer son utilisation dans ce fichier.
Tu peux également supprimer l'utilisation de la fonction isset
si tu utilises la fonction empty
par la suite pour la même variable.
Remplaces donc par exemple:
if (isset($_POST['username']) && !empty($_POST['username']))
// Par
if (!empty($_POST['username']))
Car la fonction empty
ne fais pas que vérifier la valeur de la variable, mais également son existence.
Lartak merci pour ton aide mais lorsque je supprime la fonction global du fichier, je recois comme message d'erreur : class pdo not found !
SVP les amis, pouvez vous me corriger le code pour que je puisse avancer un peu? ça fait quasiment une semaine que suis coincé là.
merci d'avance
autant pour moi, j'ai confondus $user et $dbname.
Es-tu de te connecter à la bonne BDD ? il y a surement le port à ajouter dans la connexion. Tu te connectes à mariaDB alors que tu utilises mysql
Bonjour
toujours besoin de votre aide les pro. j'ai ajouté le port mais l'erreur persiste : Failed to connect to MySQL: Access denied for user 'wwwdomaine_root'@'46.4.210.192' (using password: YES)
Suite à de nombreux test infructueux, j'ai jugé bon de tester la connexion vers ma base de données sql pour voir si tout allait bien et à ma grande surprise, même avec mon fichier de test, la connexion est impossible. Toujours le même message d'erreur : Failed to connect to MySQL: Access denied for user 'wwwdomaine_root'@'46.4.210.192' (using password: YES)
voici le code de ma page de test (testconnexion.php)
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
<meta charset="utf-8">
</head>
<body>
<h1>Test bases de données MySQL</h1>
<?php
$servername = 'www.mondomaine.com';
$username = 'wwwdomaine_root';
$password = 'monmotdepasse';
$conn = new mysqli($servername, $username, $password);
if($conn->connect_error){
die('Erreur : ' .$conn->connect_error);
}
echo 'Connexion réussie';
?>
</body>
</html>
le port est absent comme indiqué et en plus passer de PDO à mysqli ne vas rien changé
est-ce que ton serveur de BDD accepte les connexion extérieur ?
Merci courage10. Comme mentionné tout haut, je débute en php et je n'est pas encore une grande connaissance en la matière. Alors dis moi stp, comment faire pour savoir si mon serveur de BDD accepte les connexions extérieur ?
Bonjour.
comment faire pour savoir si mon serveur de BDD accepte les connexions extérieur ?
Si le serveur de la base de données est chez un hébergeur et que tu tentes de t'y connecter à distance, il te faut vérifier auprès de l'aide de l'hébergeur en question et selon l'offre que tu détient, afin de savoir si tu peux y accéder à distance ou non.