Probleme php
Résolujordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
include_once 'idents.php'; # Redirection
Et on m'affiche cela comme erreur :
Parse error: syntax error, unexpected 'include_once' (T_INCLUDE_ONCE) in C:\wamp\www\exemple\connexion.php on line 3
Help please :) !!
28 réponses
- 1
- 2
Le problème signale une erreur de syntaxe Parse error: syntax error, unexpected 'include_once' (T_INCLUDE_ONCE) à la ligne 3 de connexion.php lors de l'inclusion du fichier idents.php.
Des solutions privilégient de placer le code à l'intérieur d'un bloc PHP, en ouvrant par <?php, et de vérifier que include_once 'idents.php'; se trouve bien dans ce contexte sans caractères invalides.
D'autres conseils évoquent de supprimer les espaces insécables et de corriger d'éventuels points-virgules manquants ou erreurs de syntaxe sur les lignes adjacentes pour éviter que l'erreur ne se propage.
Dernière précision utile: une correction typique consiste à commencer le fichier par <?php et à placer les directives d'inclusion à l'intérieur, sans autre texte avant le tag.
Le message d'erreur indique .. que le souci .. se trouve sur le fichier
connexion.php ... à la ligne 3
C'est donc ce fichier qu'il faut nous montrer..
//connexion.php
<?php
include_once 'idents.php'; # Redirection (voici ou se trouve l'erreur)
if(isset($_POST['login'], $_POST['mdp'])) # Si le formulaire est soumis
{
if (!empty($_POST['login']) && !empty($_POST['password']))
{
$login = $_POST['login']; # Protection des Injection SQL ect...
$mdp = sha1($_POST['password']);
$login_q = $bdd->prepare("SELECT * FROM users WHERE login = :login AND pass = :mdp AND valid = '1'");
$login_q->execute(array(
'login' => $login
'password' => $mdp
));
if($login_q->fetchColumn() > 0) # Si login pass et valid ok
{
$user = $login_q->fetch(PDO::FETCH_OBJ);
$token = sha1(uniqid().$user->id.sha1(uniqid()));
setcookie('token', $token, time()+3600); # Création des cookies
$user_id = $user->id;
$setToken_q = $bdd->prepare("UPDATE users SET token = :token, token_date = NOW() WHERE id = :user_id");
$setToken_q->execute(array(
'token' => $token,
'user_id' => $user_id
));
$token = null;
$_SESSION['login'] = $user->login; # Création des sessions
header('Location: ajout.php'); # Redirection
exit();
}
else # Sinon
{
# Login ou Mot de passe incorrect
}
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<title> Portail </title>
<link rel="stylesheet" href="style.css" type="text/css" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if lte IE 8]>
<link rel="stylesheet" type="text/css" media="all" href="ie8.css"/><! [endif]-->
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="ie7.css"/>
<script src="js/IE8.js" type="text/javascript"></script><![endif]-->
</head>
<body>
<!--[if IE]><div id="fond_ie"><! [endif]-->
<nav id="menu_top">
<ul>
<li><a href="#">Actualités</a></li>
<li><a href="#">Pages</a></li>
<li><a id="deco" href="logout.php">Se déconnecter</a></li>
</ul>
</nav>
<div></div>
<div>
<header id="header_top">
<a id="logo" href="#">
<h1><img src="images/image_meudon.png" alt="Real Tea : société spécialisée dans le thé rare de qualité"/></h1>
</a>
</header>
<section id="connexion">
<form method="post" action="connexion.php">
<label for="id">Identifiant</label>
<input id="login" name="login" type="text" required /> <!-- Remplir ce champ est requis -->
<br/>
<label for="mdp">Mot de passe</label>
<input id="mdp" name="mdp" type="password" required /> <!-- Remplir ce champ est requis -->
<a href="#" id="pwd_oubli" >Mot de passe oublié ?</a>
<input type="submit" value="Connexion">
</form>
</section>
<div></div>
<footer id="footer_site">
<aside>
<p>Retrouvez-nous aussi sur : </p><p style="float:left;"><a href="#"><img src="images/image_meudon.png" alt="Joignez-nous sur Facebook"/></a> <a href="#"><img src="images/twitter.png" alt="Joignez-nous sur Twitter"/></a></p>
</aside>
<p id="copyright">exemple de site : <a href="http://www.livingtuts.com">www.livingtuts.com</a></p>
<div></div>
</footer>
</div>
<!--[if lte IE 8]></div> <! [endif]-->
</body>
</html>
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
.
Efface la ligne 2 même si tu n'y vois aucun caractère.
Si tu as recopié ce code à partir d'un site par copier-coller, il est probable que tu aies de nombreuses espaces insécables que tu vas devoir remplacer "à la main" par des espaces normales
Retape aussi la ligne 1, l'espace insécable est peut-être après le <?php.
Si tu peux regarder ton source avec un éditeur hexadécimal, tu verras le code A0. au lieu de 20. Tu peux mettre ton fichier sur cjoint.com (ou autre) si tu veux que je te montre ce code.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionEssayes comme ceci :
<?php //connexion.php include_once 'idents.php'; # Redirection (voici ou se trouve l'erreur)
Voici comment j'écririerai ton code :
<?php
//connexion.php (après les balises de code PHP ! )
require_once 'idents.php'; # Redirection (voici ou se trouve l'erreur)
//récupération des variables:
$login = isset($_POST['login']) && !empty($_POST['login']) ? $_POST['login'] : NULL;
$password = isset($_POST['password']) && !empty($_POST['password']) ? sha1($_POST['password']) : NULL;
if($login && $password){
$sql = "SELECT * FROM users WHERE login = :login AND pass = :mdp AND valid = '1'" ;
$params = array(':login' => $login ,':mdp' => $mdp );
$login_q = $bdd->prepare($sql);
$login_q->execute($params);
// le reste de ton code
}//fin du IF login/password
?>
Cordialement,
Jordane
Et maintenant il m'affiche une erreur sur cette ligne :
if($login_q->fetchColumn() > 0)
... alors que tu as retiré les espaces insécables ?
Quel est le message d'erreur qui t'ai donné ??
<?php
//connexion.php
require_once 'idents.php';
//récupération des variables:
$login = isset($_POST['login']) && !empty($_POST['login']) ? $_POST['login'] : NULL;
$password = isset($_POST['password']) && !empty($_POST['password']) ? sha1($_POST['password']) : NULL;
//----------------------------------------------------------//
// FONCTIONS
//----------------------------------------------------------//
function getUser($login,$mdp ){
$global $bdd;
$sql = "SELECT * FROM users WHERE login = :login AND pass = :mdp AND valid = '1'" ;
$params = array(':login' => $login ,':mdp' => $mdp );
$login_q = $bdd->prepare($sql);
$login_q->execute($params);
return $login_q->fetchall();
}
function setToken($user_id){
$global $bdd;
$token = sha1(uniqid().$user_id.sha1(uniqid()));
setcookie('token', $token, time()+3600); # Création des cookies
$sql = "UPDATE users
SET token = :token
, token_date = NOW()
WHERE id = :user_id" ;
$setToken_q = $bdd->prepare($sql);
$params = array( ':token' => $token,
':user_id' => $user_id
);
$setToken_q->execute($params);
}
//----------------------------------------------------------//
// DEBUT du script
//----------------------------------------------------------//
if($login && $password){
// on récupère les infos du user
$user = getUser($login,$password);
if(count($user)>0){
$_SESSION['login'] = $login; # Création des sessions
$user_id = $user['id']; # User ID
// on créé le token
setToken($user_id);
header('Location: ajout.php'); # Redirection
}else{
# Login et/ou Mot de passe incorrect
}
}//fin du IF login/password
?>
<!-- LA SUITE DE TON CODE HTML -->
J'ai mis en "FONCTIONS" ce qui pouvait l'être...
Je trouve que ça rend le code plus compréhensible.....
A la limite.. tu pourrais même placer ces fonctions dans un fichier "fonctions_user.php" et en faire un INCLUDE dans ta page....
Par la suite... tu pourras y ajouter d'autres fonctions si tu en as besoin.
En quelques sortes.. c'est un premier pas vers la programmation de CLASS...
Cordialement,
Jordane
Pouvez-vous encore m'aider please ?
<!doctype html> <html lang="FR"> <P align="center"> <IMG src="image_meudon.png" /> <link rel="stylesheet" href="css.css" type="text/css" /> <form .. id="img"> <form method="post" <table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline"> <tr> <td class="row1" align="center"> <table border="0" cellspacing="0" cellpadding="2"> <div id="global"> <a href='inscription.html'><div id="gauche">connexion</div></a> <a href='inscription.html'><div id="droite">connexion avec un autre utilisateur</div></a> </div> </tr> </table></td> </tr> </table> </form> </form>
Merci.
Déjà.. premier petit souci visiblement.... dans ta page index..
<form method="post"
.... tu ne fermes pas la balise form ... et il manque l'attribut "action"
Par exemple
<form method="post" action="inscription.php">
NB : Ton fichier inscription ... n'est pas .html ... mais .php ...
Vérifies bien que ton fichier a bien la bonne extension
tu es sûr que ces lignes sont bonnes ??
$login = Frenet($_POST['login']); // mise en variable du nom d'utilisateur $pass = olivia(md5($_POST['pass'])); // mise en variable du mot de passe chiffré à l'aide de md5 (I love md5)
Que viennent faire ton nom et prénom dans ces lignes de code ?
<HTML>
<?php
require_once('connexion.php');
/*
-----------------------------------
------ SCRIPT DE PROTECTION -------
DBProtect V1.2
-----------------------------------
*/
session_start(); // début de session
if (isset($_POST['login'])){ // execution uniquement apres envoi du formulaire (test si la variable POST existe)
$login = login($_POST['login']); // mise en variable du nom d'utilisateur
$pass = pass(md5($_POST['pass'])); // mise en variable du mot de passe chiffré à l'aide de md5 (I love md5)
<!doctype html> <html lang="FR"> <P align="center"> <IMG src="image_meudon.png" /> <link rel="stylesheet" href="css.css" type="text/css" /> <form .. id="img"> <form method="post" action="inscription.php"> <table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline"> <tr> <td class="row1" align="center"> <table border="0" cellspacing="0" cellpadding="2"> <div id="global"> <a href='inscription.html'><div id="gauche">connexion</div></a> <a href='inscription.html'><div id="droite">connexion avec un autre utilisateur</div></a> </div> </tr> </table></td> </tr> </table> </form> </form>
<!DOCTYPE html>
<html lang="FR">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body>
<P align="center">
<img src="image_meudon.png"></img>
<link rel="stylesheet" href="css.css" type="text/css">
<form method="post" action="inscription.php">
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<td class="row1" align="center">
<table border="0" cellspacing="0" cellpadding="2">
<tr><td>
<div id="global">
<a href='#'><div id="gauche">connexion</div></a>
<a href='#'><div id="droite">connexion avec un autre utilisateur</div></a>
</div>
</td></tr>
</table>
</td>
</tr>
</table>
</form>
</p>
</body>
</html>
PS: N'oublie pas (si ce n'est pas déjà fait....)de renommer ton fichier inscription.html en inscription.php
<?php
// session pour stocker l'ID
session_start();
// connexion à la base
$maConnexion = new PDO('mysql:host=localhost;dbname=membres', 'root','');
$maConnexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$maConnexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// récupération du post dans des variables :
// c'est plus simple à écrire ensuite
$login=$_POST['login'];
$pass=$_POST['pass'];
// Requete de recherche d'une correspondance login/pass
$requete = $maConnexion->prepare(
"SELECT COUNT(*) FROM phplogin
WHERE login='$login' AND Pass='$pass'"
);
$requete->bindParam(":leLogin",$login);
$requete->bindParam(":lePass",$pass);
$requete->execute();
$resultat = $requete->fetchAll();
if (count($resultat)==1) {
// une seule ligne, et $resultat est un tableau :
// on récupère donc la ligne dans $resultat[0]
$ligne = $resultat[0];
// on stocke dans la session quelques informations qui nous intéressent :
// - l'identifiant, qui permettra de contrôler l'accès aux pages privées
// - le nom, les droits, etc : on pourrait les retrouver par une requête
// à partir de l'identifiant, mais c'est plus rapide de les conserver
$_SESSION['id']=$ligne['id_liens'];
$_SESSION['droit']=$ligne['droit'];
// on choisit la page à charger ensuite :
// - profil pour un visiteur
// - administration pour un admin
if ($ligne['droit']=='admin') {
header('Location:connexion.php');
}else{
header('Location:affichage.php');
}
}else{
// si on n'a pas trouvé de correspondance (ou s'il y en a plusieurs...)
// -> retour sur la page d'identification
header('Location:identification.html');
}
// fichier "pur php" : c'est une bonne pratique de ne pas fermer la balise />
EDIT ( ENCORE !!!!! ) : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
.
// Requete de recherche d'une correspondance login/pass
$requete = $maConnexion->prepare(
"SELECT COUNT(*) FROM phplogin
WHERE login='$login' AND Pass='$pass'"
);
$requete->bindParam(":leLogin",$login);
$requete->bindParam(":lePass",$pass);
$requete->execute();
A changer par :
// Requete de recherche d'une correspondance login/pass
$sql = "SELECT *
FROM phplogin
WHERE login=:leLogin
AND Pass=:lePass ";
$requete = $maConnexion->prepare($sql);
$requete->bindParam(":leLogin",$login);
$requete->bindParam(":lePass",$pass);
$requete->execute();
<?php
// session pour stocker l'ID
session_start();
// connexion à la base
$maConnexion = new PDO('mysql:host=localhost;dbname=membres', 'root','');
$maConnexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$maConnexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// récupération du post dans des variables :
// c'est plus simple à écrire ensuite
$login=$_POST['login'];
$pass=$_POST['pass'];
// Requete de recherche d'une correspondance login/pass
$sql = "SELECT *
FROM phplogin
WHERE login=:leLogin
AND Pass=:lePass ";
$requete = $maConnexion->prepare($sql);
$requete->bindParam(":leLogin",$login);
$requete->bindParam(":lePass",$pass);
$requete->execute();
if (count($resultat)==1) {
// une seule ligne, et $resultat est un tableau :
// on récupère donc la ligne dans $resultat[0]
$ligne = $resultat[0];
// on stocke dans la session quelques informations qui nous intéressent :
// - l'identifiant, qui permettra de contrôler l'accès aux pages privées
// - le nom, les droits, etc : on pourrait les retrouver par une requête
// à partir de l'identifiant, mais c'est plus rapide de les conserver
$_SESSION['id']=$ligne['id_liens'];
$_SESSION['droit']=$ligne['droit'];
// on choisit la page à charger ensuite :
// - profil pour un visiteur
// - administration pour un admin
if ($ligne['droit']=='admin') {
header('Location:connexion.php');
}else{
header('Location:affichage.php');
}
}else{
// si on n'a pas trouvé de correspondance (ou s'il y en a plusieurs...)
// -> retour sur la page d'identification
header('Location:identification.html');
}
// fichier "pur php" : c'est une bonne pratique de ne pas fermer la balise />
il me dise que j'ai un probleme a la ligne 12,13 et 25 de ma page login.php que je ne comprends vraiment pas
Et tu penses que SANS NOUS MONTRER les messages d'erreurs ... on va réussi à deviner et à t'aider ??
Merci de nous copier/coller les messages d'erreurs indiqués !
Notice: Undefined index: login in C:\wamp\www\mon-projet\login.php on line 12
Voici le message d'erreur de la ligne 13 :
Notice: Undefined index: pass in C:\wamp\www\mon-projet\login.php on line 13
Puis voici les 2 messages d'erreur de la ligne 25:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 La table 'membres.phplogin' n'existe pas' in C:\wamp\www\mon-projet\login.php on line 25
PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 La table 'membres.phplogin' n'existe pas in C:\wamp\www\mon-projet\login.php on line 25
Pour le savoir . il te suffit d'ajouter un
print_r($_POST);
Ensuite.. pour les messages d'erreur.. ligne 25 ... et bien le message est clair .... la TABLE que tu essaies d'utiliser dans la requête .... n'EXISTE PAS ( ou ne porte pas ce nom ! )
Vérifie le nom de tes tables dans ta BDD.... à mon avis phplogin.. n'en fait pas parti !
mais mon formulaire s'affiche meme avec les redirections
Soit je ne suis pas bien réveillé .. soit tu t'exprimes réellement mal ....
Pourrais tu être plus précise dans le souci rencontré ???
Sachant que, nous somme d'accord...., tu as :
- Une page : index.html qui contient ton formulaire
- Une page : Login.php qui contient le code PHP à traiter lorsque tu valides ton formulaire
=> Une fois ton formulaire rempli et envoyé (via le bouton Submit).. tu es redirigée sur ta page login.php (qui ne contient AUCUN FORMULAIRE) ...
Puis.. en fonction des droits de l'utilisateur (admin ou pas).. tu es redirigé sur l'une des pages :
connexion.php ou affichage.php
.... DONC .. peux-tu.. nous indiquer sur QUELLE PAGE tu es ( pour cela..regarde ta barre d'adresse ton navigateur.. ) lorsque tu nous dis que ça ne marche pas ????
Peut tu verifier mon code s'il te plait car j'ai encore des erreurs notamment a la ligne 53 et je ne comprend pas .
<?php
// session pour stocker l'ID
session_start();
// connexion à la base
$maConnexion = new PDO('mysql:host=localhost;dbname=membres', 'root','');
$maConnexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$maConnexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// récupération du post dans des variables :
// c'est plus simple à écrire ensuite
$login=print_r($_POST);
$pass=print_r($_POST);
// Requete de recherche d'une correspondance login/pass
$sql = "SELECT *
FROM les_membres
WHERE login=:leLogin
AND Pass=:lePass ";
$requete = $maConnexion->prepare($sql);
$requete->bindParam(":leLogin",$login);
$requete->bindParam(":lePass",$pass);
$requete->execute();
//if (count($resultat)==0){
// une seule ligne, et $resultat est un tableau :
// on récupère donc la ligne dans $resultat[0]
//$ligne = $resultat[1];
// on stocke dans la session quelques informations qui nous intéressent :
// - l'identifiant, qui permettra de contrôler l'accès aux pages privées
// - le nom, les droits, etc : on pourrait les retrouver par une requête
// à partir de l'identifiant, mais c'est plus rapide de les conserver
$_SESSION['id']=$ligne['id_liens'];
$_SESSION['droit']=$ligne['droit'];
// on choisit la page à charger ensuite :
// - profil pour un visiteur
// - administration pour un admin
if ($ligne['droit']=='admin') {
//header('Location:script.html')
}else{
header('Location:index.html');
}
else{
// si on n'a pas trouvé de correspondance (ou s'il y en a plusieurs...)
// -> retour sur la page d'identification
header('Location:login.php');
}
// fichier "pur php" : c'est une bonne pratique de ne pas fermer la balise />
- 1
- 2

if($login_q->fetchColumn() > 0)
Comment sais-tu que tu as rectifié ? Il y en a partout, ce sont toutes les espaces de ton fichier qu'il faut corriger.Enlève celle qu'il y a avant cette ligne, tu verras quu'il n'aura plus d'erreur ici mais qu'il y en aura plus loin.