7997 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Bonsoir,

J'ai effectué ma requete au sein de ma base et les resultats sont bons, ca voudrait dire que le nom du produit est altéré mais pourtant lorsque je l'afficher apres ma requete il est valide et correspond avec le produit.
De plus comment pourrait-il etre altéré sachant que je ne fais rien dans mon code qui devrait interféré avec cela...
Bonjour,

Que veux-tu que je te dises : le code php est bon. Donc c'est ce qu'on lui fournit qui n'est pas bon.

Dans le code initial de ton premier post par exemple, si le produit contient une apostrophe, ça fait échouer la requête (ça plante lors du $select->execute()). Ce n'est pas le cas avec le code que je t'ai fourni par contre. C'est le ? dans le requête, et la fourniture plus tard du nom du produit lors du $select->execute(array($product)) qui permet d'éviter ce premier plantage possible.

Après, il peut y avoir les problèmes multiples. Comme on a aucune indication de ce que tu utilises, les mauvais coups peuvent arriver de n'importe où.

Comme test, tu peux essayer le code suivant :

$query = "SELECT * FROM products";
$select = $db->prepare($query);
$select->execute();
$s = $select->fetch(PDO::FETCH_OBJ);
if ($s) echo "enfin title=".$s->title." !";
else echo "perdu, select->fetch s'est ramassé !";


Si ce code affiche bien le nom du premier produit de ta table products, alors tu peux suspecter que $produit ne contient pas ce que tu attends. Sinon, si ce code ne fonctionne pas, alors c'est que le problème est ailleurs.

Amicalement,
Bonsoir,

Je suis désolé, je ne suis que débutant en PHP et j'ai encore du mal à me faire avec ce langage de programmation... Je vous suis extrêmement reconnaissant de l’intérêt que vous apportez a ma demande ainsi que de votre ténacité face a un problème qui n'est pas le votre.

Après avoir insérer votre code, il affiche bien le nom du premier produit de la table products.

J'ai tester $produit juste après son instanciation et juste avant son utilisation, et les résultats conviennent parfaitement, et je ne comprend pas comment ma valeur peut être altérer par quoi que ce soit sans qu'elles ne soit ne serait-ce que mentionner dans une autre page...

Merci infiniment de votre aide,

Amicalement,
Bonjour,

Tu vas mettre le code ci-dessous, mais à la ligne $product = "toto";, tu remplaces "toto" par le nom de ton produit (il faut le mettre entre guillemets évidemment). Et tu regardes si ça marche.

Tu fais ensuite un deuxième test en remplaçant "toto" par le nom du premier produit de ta base. Et tu regardes si ça marche pour ce produit-là aussi.

EDIT: éventuellement, ça m'intéresse de savoir quel est le nom du produit qui ne marche pas.


if ($db)
{
  $product = "toto";
  $query = "SELECT * FROM products WHERE title=?";
  $select = $db->prepare($query);
  if ($select)
  {
    if ($select->execute(array($product)))
    {
      $s = $select->fetch(PDO::FETCH_OBJ);
      if ($s) echo "enfin !";
      else echo "perdu, select->fetch s'est ramassé !";
    }
    else echo "perdu, select->execute s'est ramassé !";
  }
  else echo "perdu, db->prepare s'est ramassé !";
}
else echo "perdu, new PDO s'est ramassé !";


Amicalement,
Modifié par parsimonhi (26 Dec 2018 - 10:15)
Bonjour,

J'ai essayé ces lignes de codes avec l'intégralité de mes produits et tout fonctionne, en revanche dès que mets $product=$_GET['show'], mes erreurs sont de retour.

Il n'y a pas de nom de produit qui ne marche pas, ils fonctionnent tous.

Amicalement,
Merci,
Bonsoir,
Mon code ne fonctionne que lorsque je rentre des noms de produit en dur dans mon code. A partir du moment ou j'ustilise le $select, mon erreur enoncé au debut du post revient...

Oui, le charset de ma page est UTF-8 !

Amicalement,
Bonjour,

Tu vas insérer ce code juste avant l'endroit où est ton if (isset($_GET["show"])) à toi, en replaçant "toto" par le nom d'un produit.

Le script va afficher deux lignes avec des nombres, une qui commence par P1: et une qui commence par P2:. Tu me dis si les nombres sont identiques ou pas. S'ils ne le sont pas, il me faut les lignes de nombres pour faire le diagnostic.


if (isset($_GET["show"]))
{
  $product = "toto";
  echo "P1: ";
  for($k=0;$k<strlen($product);$k++) echo ord($product[$k])." ";
  echo "<br>";
  echo "P2: ";
  $product = $_GET["show"];
  for($k=0;$k<strlen($product);$k++) echo ord($product[$k])." ";
  echo "<br>";
}


Amicalement,
Bonjour,

Les chiffres qui sont apparus sont :
P1: 116 101 115 116
P2: 32 116 101 115 116.

Si nous arrivons a résoudre le problème, et que vous ne saturez pas de m'enseigner, serait-il possible que vous m'expliquez ce système de diagnostic que problème.
Sinon je ferai mes recherches sur internet ne vous en faites pas.

Merci,

Amicalement,
skrtMan a écrit :

Les chiffres qui sont apparus sont :
P1: 116 101 115 116
P2: 32 116 101 115 116.

Si nous arrivons a résoudre le problème, et que vous ne saturez pas de m'enseigner, serait-il possible que vous m'expliquez ce système de diagnostic que problème.
Sinon je ferai mes recherches sur internet ne vous en faites pas.


Y a un espace devant le nom de ton produit dans la variable $_GET['show'].

C'est ça qui fait planter ta requête. Il faut trouver où cet espace est ajouté. Dans le code de la page qui permet de saisir le produit ? Où bien parce que tu fais un copier-coller en sélectionnant par mégarde un espace devant le nom de ton produit ? Ou ailleurs ?

Chercher sur internet ne te mènera à rien de plus. Il faut que tu suives toutes les étapes par lesquelles passe le nom du produit et que tu trouves où cet espace est ajouté.

EDIT: le système de diagnostic est ici simple. le code affiche tous les codes ascii de la chaine de caractères, y compris ceux qui sont invisibles. Le code 32 correspond à un espace.

Amicalement,
Modifié par parsimonhi (28 Dec 2018 - 13:00)
Meilleure solution
Bonjour,

Malgré vos indications je ne suis pas parvenu a trouver le espace qui s'était insérer, j'ai cherché sur toute les pages ayant un lien avec ces affichages d'articles.

Merci pour toutes ces informations, je n’hésiterais pas a réutilisé cette methodes pour mes problèmes à l'avenir !

Amicalement,