Parse error: syntax error, unexpected '$sql'

Résolu/Fermé
legameur6810 Messages postés 45 Date d'inscription mardi 21 novembre 2017 Statut Membre Dernière intervention 14 avril 2018 - Modifié le 14 avril 2018 à 16:32
legameur6810 Messages postés 45 Date d'inscription mardi 21 novembre 2017 Statut Membre Dernière intervention 14 avril 2018 - 14 avril 2018 à 21:10
Bonjour ou bonsoir j'ai créer une barre de recherche en php.
Cette barre me serviras d'exemple pour mes prochain site.
Voici tout les codes avec leurs noms, si vous pouvez m'aider se seras génial.

Code : INDEX.PHP
Attention celui la il est en en html mais j'ai mis l’extension php
<!DOCTYPE html>
<html lang="fr">
 <head>
  <meta charset="utf-8">
  <title>Ma barre de recherche ajax</title>
  <link rel="stylesheet" type="text/css" href="style.css" charset="utf-8" />
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script type="text/javascript" src="search.js"></script>
 </head>
 <body>
  <div class="wrap">
   <div class="search">
    <input type="text" name="recherche" class="text" id="recherche" />
   </div>
   <div class="resultat" id="resultat"></div>
  </div>
 </body>
</html>


Ensuite le STYLE.CSS

body, div, dl, dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {
 margin: 0; padding: 0;
}

table {border-collapse: collapse; border-spacing: 0;}
fieldset, img { boder:0; }
address, caption,cite,code,dfn,var { font-style: normal; font-weight: normal; }
ol, ul {list-style: none;}
q:before, q:after{ content:""; }
abbr,acronym {border:0;}

input {font-family:Arial,Verdana,sans-serif;font-size:12;}

h1{color:#8A975B; line-height: 71px;float: left;}
h1{color:#8A975B; line-height: 71px;float: left; width:100%;}
body {background: url(img/back.png) repeat; font-family:Arial,Verdana,sans-serif; font-size: 12px; line-height: 16px;}


.wrap{margin:0 auto; width: 800px;font-size: 16px;}
.search {background:#1a1a1a; width: 700px; height: 86px;margin-top: 250px; padding-top: 80px;}7
.search,.text{width: 620px;height: 50px;float: left;font-family:Arial;font-size:20px;}

.resultat {backround: #1a1a1a; width: 700px;height:86;padding-left:80px;font-family:Arial;font-size:10px;}


Ensuite le code de la connexion à la base de données. (CNX.PHP)

<?php 

$serveur = 'localhost';
$user = 'root';
$pass = '';
$bdd = 'tutoriel_search_ajax';
$port = '3306';

try {
 $cnx = new PDO('mysql:host='.$serveur.';port='.$port.';dbname='.$bdd, $user, $pass);
}
catch(PDOException $e)
{
 echo $e->getMessage(); 
}

?>


Ensuite le code Javascript (search.js)

$(document).ready(function(){
 $("#recherche").keyup(function(){
  var recherche = $(this).val();
  var data = 'motclef=' + recherche;
  if(recherche.length>2){

   $.ajax({
    type : "GET",
    url : "result.php",
    data : data,
   success: function(server_response){

    $("#recherche").html(server_response).show();
   }
  });

  }

 });
});


Ensuite le RESULT.PHP

<?php
include_once 'cnx.php';
if(isset($_GET['motclef'])){
 $motclef = $_GET['motclef'];
 $q = array('motclef'=>$motclef. '%')
 $sql = 'SELECT title,message FROM blog WHERE title like :motclef or message like :motclef';
 $req = $cnx->prepare($sql);
 $req->execute($q);
 $count = $req->rowCount($sql);

 if($count == 1){
  while ($result = $req->fetch(PDO::FETCH_OBJ)){
   echo " Titre :".$result->title."<br />Message:".$result->message;
  }
 }else {
  echo "Aucun resultat pour :".$motclef;
 }
}







?>


Voila les codes si vous s'avez d'ou viens le problème, merci de me répondre


Legameur6810

2 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
14 avril 2018 à 16:37
Problème classique ...
Dans ce cas, toujours faire ces 3 vérifications :
- Ais-je oublié un ;
- Ais-je mal fermé une ( )
- Ais-je mal fermé { }

Contrôle de base, mais qui donne pas mal de réussites.
1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 14 avril 2018 à 20:54
Bonjour,

Ton erreur vient de cette ligne
$count = $req->rowCount($sql)

Ce n'est pas $sql que tu dois utiliser ici, mais la variable issue de ton execute :
 $req 

$req->execute($q);


De toutes façons... comme précisé dans la doc officielle du php, il est déconseillé d'utiliser la fonction rowCount sur le résultat d'une requête SELECT.
A la place, tu peux utiliser un COUNT comme ceci par exemple :
try{
    $req = $cnx->prepare($sql);
     $req->execute($q);
     $result = $req->fetchAll(); //on stocke le resultat de la requete dans un array
}catch(Exception $e){
  echo "erreur dans la requête ! ".$e->getMessage();
}
   $count = count($resultat); //nombre de valeurs retournées par ta requête

    if(!empty($result)){
       foreach($result as $R){
          echo " Titre :".$R['title']."<br />Message:".$R['message'];
       }
     }      




NB: Pense à utiliser des blocs TRY/CATCH a CHAQUE requête.

Je t'invite fortement à lire ceci
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
et cela :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


0
legameur6810 Messages postés 45 Date d'inscription mardi 21 novembre 2017 Statut Membre Dernière intervention 14 avril 2018
Modifié le 14 avril 2018 à 21:10
Merci beaucoup.
0