5 août 2024

Liste des erreurs sous PHP

Dans ce post, nous allons voir les différentes erreurs que l'on peut rencontrer sous PHP et comment les résoudre.

Il se peut que le post évolue avec le temps. N'hésitez pas à faire un CTRL + F pour faire une recherche spécifique.

Failed to open stream

file open stream error
L'erreur ci-dessus nous dit qu'il n'arrive pas à trouver le fichier correspondant, car le chemin ou le fichier est introuvable.

Dans notre cas, il fait référence au fichier config.php.

Pour régler le problème, vérifiez le chemin de votre fichier, si celui-ci se trouve dans un dossier, il faudra ajouter ../ devant votre chemin pour sortir du dossier et se retrouver à la racine.

l'arborescence est comme suit :

->index.php
->->/class/Baskets.php
->->/config/config.php

Dans notre fichier Baskets.php config est appelé comme suit :

<?php
require("config/config.php");


Et pour régler le soucis il suffit de rajouter ../ :

<?php
require("../config/config.php");



Cannot use object as array

Cannot use object as array
Dans l'erreur ci-dessus, l'erreur vient d'une utilisation de tableau mal géré :

<?php
public function addProductBis($material[]){ /* code ... */ }


Pour régler le souci, il faut ajouter un = entre la variable et le tableau pour pouvoir ensuite utiliser un foreach ou un for pour parcourir le tableau :

<?php
public function addProductBis($material = []){
foreach($material as $mat) {
/* code ... */
}
}



Data truncated for column

Data truncated
L'erreur ci-dessus, nous indique qu'il y a une erreur dans l'ajout dans la base de donnée, car notre session panier à un souci dans ses clés :

session panier
On peut constater que notre session a comme clé "3". Alors qu'il doit retourner un entier (int) 3 sans ".

Le problème vient du formulaire d'envoi sur la page addPanier.php qui ajoute dans l'URL une erreur sur une variable inexistante (car nous visons addPanier.php et non pas la page actuelle pour l'envoi du formulaire).

<form action="addPanier.php?id=<?php print $id; if ($quantity) {
print $quantity;
} ?>" method="post">
<form action="addPanier.php?id=<?php print $id; ?>" method="post">


Pour résoudre cette erreur, il suffit de récupérer votre formulaire dans la page addPanier.php et non pas dans votre page actuelle :

<form action="addPanier.php?id=<?php print $id; ?>" method="post">



Uncaught PDO Exception: SQLSTATE [42S22]

Uncaught PDO Exception: SQLSTATE [42S22]
Dans l'erreur ci-dessus, on peut voir que l'erreur nous indique qu'il manque une colonne dans notre requête sql dans notre cas "adresse_1"

<?php public function addAdresse()
{
$adresse_1 = $this->getAdresse_1();
$adresse_suite = $this->getAdresse_suite();
$codepostal = $this->getCodepostale();
$ville = $this->getVille();

$sql = $this->connecte()->prepare("INSERT INTO adresse (addresse_1,adresse_suite,codepostal,ville) VALUES (:adresse_1,:adresse_suite,:codepostal,:ville ) ");
$sql->bindParam(":adresse_1", $adresse_1);
$sql->bindParam(":adresse_suite", $adresse_suite);
$sql->bindParam(":codepostal", $codepostal);
$sql->bindParam(":ville", $ville);
$sql->execute(); }


Pour régler le problème, il suffit de changer "addresse_1" en "adresse_1". Faite bien attention à l'orthographe de vos colonnes SQL.

<?php public function addAdresse()
{
$sql = $this->connecte()->prepare("INSERT INTO adresse (adresse_1,adresse_suite,codepostal,ville) VALUES (:adresse_1,:adresse_suite,:codepostal,:ville ) "); }



Cannot modify header information

Cannot modify header information
L'erreur ci-dessous nous informe qu'il y a trop de redirection :

<?php
if (isset($_POST['moins'])) {
$idproduit = $_POST['moins'];
if($_SESSION['panier'][$idproduit]){
$_SESSION['panier'][$idproduit]--;
}
elseif ($_SESSION['panier'][$idproduit] == 0 ){
header('Location: delPanier.php?id='.$idproduit);
}


Pour palier à ça, il faut ajouter ob_start() à votre code, cela ajoute une temporisation de sortie à votre code puis on le nettoie avec ob_clean() :

<?php
ob_start();
if (isset($_POST['moins'])) {
$idproduit = $_POST['moins'];
if($_SESSION['panier'][$idproduit]){
$_SESSION['panier'][$idproduit]--;
header('Location: delPanier.php?id='.$idproduit);
ob_clean()
}
elseif ($_SESSION['panier'][$idproduit] == 0 ){
header('Location: delPanier.php?id='.$idproduit);
ob_clean()
}



Invalid parameter number

Invalid parameter number
Dans l'erreur ci-dessus, on nous indique qu'il manque des paramètres sur notre requête sql :

public function addQuantite()
{
// ... //
if (!$data) {
$sql = $this->connecte()->prepare("INSERT INTO produits_quantite (produits_id, quantites, taille_id) VALUES (:produits_id, :quantites, :taille_id)");
} else {
$sql = $this->connecte()->prepare("UPDATE produits_quantite SET quantites = :quantites WHERE produits_id = :produits_id");
}
$sql->bindParam(":produits_id", $id);
$sql->bindParam(":quantites", $quantite);
$sql ->bindParam(":taille_id", $tailleId);
$sql->execute();
}


Pour régler le souci, il faut prendre en compte le else et mettre les bindParam dans la condition :

PS : Pour savoir combien de paramètre, il faut, comptez simplement le nombre de colonnes que vous appelez.

public function addQuantite()
{
// ... //
if (!$data) {
$sql = $this->connecte()->prepare("INSERT INTO produits_quantite (produits_id, quantites, taille_id) VALUES (:produits_id, :quantites, :taille_id)");
$sql->bindParam(":produits_id", $id);
$sql->bindParam(":quantites", $quantite);
$sql ->bindParam(":taille_id", $tailleId);
} else {
$sql = $this->connecte()->prepare("UPDATE produits_quantite SET quantites = :quantites WHERE produits_id = :produits_id");
$sql->bindParam(":produits_id", $id);
}
$sql->execute();
}



Uncaught PDO Exception: SQLSTATE [23000]

Uncaught PDO Exception: SQLSTATE [23000]
Dans l'erreur ci-dessus, on peut voir que notre requête SQL ne s'exécute pas, car il y a un souci au niveau des clés étrangères.

Pour régler le souci, vérifiez dans votre base de données si la colonne de votre clé étrangère est au format BIGINT ou INT unsigned et que la correspondance à l'ID choisi est la même.

Exemple :

Vous avez une table "users" qui contient les colonnes :

  • - id
  • - pseudo
  • - password

et une table "photoUsers" qui contient :

  • - id
  • - userId
  • - namePicture

Si dans la table "users" l'id est au format BIGINT unsigned, il faudra que dans la table "photoUsers" l'userId soit au format BIGINT unsigned également ! Ils doivent correspondre au format de la clé auquel, ils sont liés.

Mots clés:

php poo sql pdo erreurs

Cours Du Dev

Recevez les dernières formations disponibles en vous inscrivant à la newsletter

Créé par arkunis