Je rencontre une erreur fatale : mysqli_SQL_exception non intercepté dans mon code PHP d’édition

la programmation


Bonjour! Je crée un tableau simple pour un projet scolaire et j’ai trouvé ce tutoriel utile
“https://www.youtube.com/watch?v=NqP0-UkIQS4″>
PHP et MySQL avec opérations CRUD : créer, lire, mettre à jour, supprimer – YouTube
J’ai tout suivi mais lorsqu’il s’agit de mettre à jour/éditer mon tableau cela donne toujours :

Erreur fatale : mysqli_sql_exception non interceptée : vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour connaître la bonne syntaxe à utiliser près de ‘= `2023-03-22T11:50:28`, Number_Of_Items = `5`, Item = `Tempra`, Expiration_D…’ à la ligne 1 dans C:\xampp\htdocs\Inven\edit.php:75 Trace de pile : #0 C:\xampp\htdocs\Inven\edit.php(75) : mysqli_query(Object(mysqli), ‘UPDATE clinic_i… ‘) #1 {main} lancé dans C:\xampp\htdocs\Inven\edit.php à la ligne 75.

Désolé pour le mauvais anglais, ce n’est pas ma langue maternelle et merci.

Ce que j’ai essayé :

query($sql);
	$row = $result->fetch_assoc();

	if (!$row) {
		header("location: /inven/index.php");
		exit;
	}


$Date_Received = $row["Date_Received"];
$Number_Of_Items = $row["Number_Of_Items"];
$Item = $row["Item"];
$Expiration_Date = $row["Expiration_Date"];
$Last_Updated = $row["Last_Updated"];
$Quantity = $row["Quantity"];

}
	else{

$id = $_POST["id"];
$Date_Received = $_POST["Date_Received"];
$Number_Of_Items = $_POST["Number_Of_Items"];
$Item = $_POST["Item"];
$Expiration_Date = $_POST["Expiration_Date"];
$Last_Updated = $_POST["Last_Updated"];
$Quantity = $_POST["Quantity"];

	do {
		if ( empty($id) || 
			empty($Date_Received) || 
			empty($Number_Of_Items) || 
			empty($Item) || 
			empty($Expiration_Date) || 
			empty($Last_Updated) || 
			empty($Quantity) ) 
			{ $errorMessage= "All the Fields are required";
				break;
		} 

		$sql = "UPDATE clinic_inventory" .
			"SET Date_Received = `$Date_Received`, Number_Of_Items = `$Number_Of_Items`, Item = `$Item`, Expiration_Date = `$Expiration_Date`, Last_Updated = `$Last_Updated`, Quantity = `$Quantity`" . "WHERE id = $id";
		
			$result = mysqli_query($connection, $sql);

			if (!$result) {
			$errorMessage = "Invalid Query: " . $connection->error;
			break;
		}

			$successMessage = "Item Successfully Added";
			header("location: /inven/index.php");
			exit;
			
}	while (false);
	
}


?>

Solution 1

En SQL, les guillemets simples doivent être utilisés pour les valeurs de chaîne, pas pour les backticks. De plus, il manque un espace avant le « SET » dans votre requête qui se lit comme suit : « UPDATE clinic_inventorySET. Votre SQL devrait ressembler à :

PHP
$sql = "UPDATE clinic_inventory SET " .
       "Date_Received = '$Date_Received', " .
       "Number_Of_Items = '$Number_Of_Items', " .
       "Item = '$Item', " .
       "Expiration_Date = '$Expiration_Date', " .
       "Last_Updated = '$Last_Updated', " .
       "Quantity = '$Quantity' " .
       "WHERE id = $id";

Vous vous laissez également grand ouvert à l’injection SQL, vous devriez plutôt utiliser des instructions préparées et des requêtes paramétrées – Déclarations préparées et procédures stockées[^]

Votre code devrait, à titre indicatif, ressembler à ceci :

PHP
$sql = "UPDATE clinic_inventory SET " .
       "Date_Received = ?, " .
       "Number_Of_Items = ?, " .
       "Item = ?, " .
       "Expiration_Date = ?, " .
       "Last_Updated = ?, " .
       "Quantity = ? " .
       "WHERE id = ?";

$stmt = $connection->prepare($sql);

if ($stmt) {
    $stmt->bind_param("ssssssi", $Date_Received, $Number_Of_Items, $Item, $Expiration_Date, $Last_Updated, $Quantity, $id);

    $stmt->execute();

    if ($stmt->affected_rows > 0) {
        //Your query was successful...
        $successMessage = "Item Successfully Added";
        header("location: /inven/index.php");
        exit;
    } else {
        //Handle error/s...
        $errorMessage = "Error updating item: " . $stmt->error;
    }

    $stmt->close();
} else {
    //Handle error/s...
    $errorMessage = "Error preparing statement: " . $connection->error;
}

コメント

タイトルとURLをコピーしました