[RESOLU] Apostrophes et guillemets requête

Eléphant du PHP | 91 Messages

26 mai 2020, 16:47

Bonjour,
je galère avec ma requête qui n'affiche pas les apostrophes ni les guillemets,
j'ai créé un moteur de recherche sur la 1ère page et le code ci-dessous sur ma 2e page, j'ai tenté avec htmlspecialchars, et str_replace pour essayer de contourner le problème mais rien n'y fait, j'en ai marre, si quelqu'un pouvait m'aider ça serat super.
Merci d'avance



<h3>Resultat pour <? echo $search;?> :</h3>
<br />
<?
try{
$bdd = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'mdp') or die(print_r($bdd->errorInfo()));
$bdd->exec('SET NAMES utf8');
}
catch(Exeption $e){
die('Erreur:'.$e->getMessage());
}
$req = $bdd->query("SELECT * FROM livres WHERE titre LIKE '%$search%' OR auteur LIKE '%$search%'");

if($req->rowCount()>0)
{
while($data = $req->fetch(PDO::FETCH_OBJ))
{

$titre = $data->titre;
$titre = html_entity_decode($titre);
$search = html_entity_decode($search);

$auteur = $data->auteur;
$reference = $data->reference;
$dispo = $data->dispo;
?>

<form method="post" enctype="multipart/form-data" action="mediatheque-livres-reservation">
<?
$dispo = $dispo;
if ($dispo == '2') { $message =" : ---- EMPRUNTE ----";
}
?>
<input type="text" name="search" style="width:100%; border:none" value="réf : (<? echo $reference ?>) - <?php echo $titre ?> - <? echo $auteur ?> <? echo $message ?>" readonly="readonly">

<button class="button">Réserver</button>
</form>

LGV
Petit nouveau ! | 4 Messages

26 mai 2020, 20:03

Bonjour,

Ça donne quoi avec ça ?

$req = $bdd->query('SELECT * FROM livres WHERE titre LIKE \'%'.$search.'%\' OR auteur LIKE \'%'.$search.'%\' ');

Eléphant du PHP | 111 Messages

26 mai 2020, 20:38

j'y connais surement moins que vous mais j'utilise régulièrement un echo en lieu et place de la query pour voir si les paramètres passent bien comme je le veux

Eléphant du PHP | 111 Messages

26 mai 2020, 21:21

chez moi ça fonctionne comme ça
$query = "SELECT *from vividparts where Product_Name='$produit' AND Part_Description like '%$search%'";

Eléphant du PHP | 111 Messages

26 mai 2020, 21:52

Chez moi cela fonctionne parfaitement, j'ai juste une page avant pour choisir le produit

<?php
require('_connexion_pdo.php');


if (!isset ($_POST['produit'])){$produit="%";}
else $produit=$_POST['produit'];
if (!isset ($_POST['search'])){$search="%";}
else $search=$_POST['search'];
echo'<h1>'.$produit.'</h1>';
echo '<div>';
    echo'<a href="./lire.php">Choix du type de machine</a>';
    echo'<form action="toto.php" method="POST">';
        echo '<input type="text" name="search" value="'.$search.'" ;/>';
        echo '<input type="checkbox" name="produit" value="'.$produit.'" checked style.visibility="hidden";/>';
        echo'<input type="submit" name="submit" value="cherche";/>';
    echo'</form>';
echo'</div>';
$query = "SELECT *from vividparts where Product_Name='$produit' AND Part_Description like '%$search%'";
//echo "SELECT *from vividparts where Product_Name='$produit' AND Part_Description like '%$search%'";

try {
    $pdo_select = $pdo->prepare($query);
    $pdo_select->execute();
    $NbreData = $pdo_select->rowCount();
    $rowAll = $pdo_select->fetchAll();      // tout dans le meme tableau
}
catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
//affichage en fonction du resultat de la division Euclidiene "modulo" X%Nbcol si =col-1 tu es a la derniere colone si 0 tu es sur l premiere
$nbcol=1;
echo '<table id="u1">';
                       
for($i=0;$i<$NbreData;$i++){
	$valeur1=$rowAll[$i]['Part_Number'];
    $valeur2=$rowAll[$i]['Part_Description'];
    if($i%$nbcol==0) echo '<tr class="ligne">';
	echo '<td>'.$valeur1.'</td><td>'.$valeur2.'</td>';
    if($i%$nbcol==($nbcol-1)) echo '</tr>';
}
echo '</table>'; 

Eléphant du PHP | 91 Messages

27 mai 2020, 08:57

Bonjour et merci à vous pour vos réponses, hélas j'en suis toujours au même point, j'ai testé vos idées mais ça ne fonctionne malheureusement pas, je redonne mon code :
première page :
<!--Formulaire-->
<form action="mediatheque-result" method="post">
<div class="wrap">
<div class="search">
<input type="text" class="searchTerm" id="search" name="search" placeholder="Votre recherche..." value="'.$search.'">
<button type="submit" class="searchButton">
<i class="fa fa-search"></i>
</button>
</div>
</div>
</form>
<!--/formulaire-->

2e page :
<!--Traitement formulaire-->
<?php
if(empty($_POST) || empty($_POST['search']))
{
header('Location: mediatheque-livres2');
}
else
{
extract($_POST);
}
?>
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=mabase;charset=utf8', 'user', 'mdp');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

<h3>Resultat pour <? echo $search;?> : </h3>
<br />
<?
try{
$bdd = new PDO('mysql:host=localhost;dbname=^mabase', 'user', 'mdp') or die(print_r($bdd->errorInfo()));
$bdd->exec('SET NAMES utf8');
}
catch(Exeption $e){
die('Erreur:'.$e->getMessage());
}
$req = $bdd->query("SELECT * FROM livres WHERE titre LIKE '%$search%' OR auteur LIKE '%$search%'");

if($req->rowCount()>0)
{
while($data = $req->fetch(PDO::FETCH_OBJ))
{
$titre = $data->titre;
$auteur = $data->auteur;
$reference = $data->reference;
$dispo = $data->dispo;
?>
<form method="post" enctype="multipart/form-data" action="mediatheque-livres-reservation">
<?
$dispo = $dispo;
if ($dispo == '2') { $message =" : ---- EMPRUNTE ----";
}
?>
<input type="text" name="search" style="width:100%; border:none" value="réf : (<? echo $reference ?>) - <? echo str_replace("'", '5',$titre) ?> - <? echo $auteur ?> <? echo $message ?>" readonly="readonly">

<button class="button">Réserver</button>
</form>
<!--/Traitement formulaire-->

Eléphant du PHP | 111 Messages

27 mai 2020, 19:52

quand ut dis que cela ne fonctionne pas, c'est un message d'erreur ? une page vierge ?
si tu teste en fixant ta variable $search est ce que cela fonctionne ?

Eléphant du PHP | 91 Messages

28 mai 2020, 09:47

Bonjour, j'ai trouvé la solution, il suffisait de changer ma reqête, je lap ublie pour vous faire voir :
Encore merci à vous pour votre aide

Nouvelle reqûete
$req = $bdd->query('SELECT * FROM `livres` WHERE `titre` LIKE "%'.$search.'%" OR `auteur` LIKE "%'.$search.'%"');

Ancienne requête :
$req = $bdd->query("SELECT * FROM livres WHERE titre LIKE '%$search%' OR auteur LIKE '%$search%'");