Już nie powinieneś używać <center>
Jednym ze sposobów sprawdzenia czy formularz jest uruchomiony pierwszy raz, czy kolejny raz (dane przesłane pochodzą z formularza) to: isset($_POST['submit'])
if (isset($_POST['submit'])) { ... }
lub empty($_POST)
if (!empty($_POST)) { ... }
można też if ($_POST)
if ($_POST) { ... }
Ja osobiście preferuję
if ($_SERVER["REQUEST_METHOD"] == "POST") { ... }
Propozycja
add_new_dish.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST)) { // 1
// var_dump($_POST);
$nazwa = (empty($_POST['nazwa'])) ? '' : trim($_POST['nazwa']);
$cena = (empty($_POST['cena'])) ? '' : (int)$_POST['cena'];
$typ = (empty($_POST['typ'])) ? '' : $_POST['typ'];
try { // 2
$conn = new mysqli('localhost','root','','dane')
or die('Błąd połączenia z bazą danych!');
$sql = 'INSERT INTO dania (nazwa, cena, typ) VALUES (?, ?, ?)';
if ($stmt = $conn->prepare($sql)) {
$stmt->bind_param('sii', $nazwa, $cena, $typ);
$stmt->execute();
$return_message = 'Danie zostało zapisane.';
} else {
// echo $conn->errno . ' ' . $conn->error;
$return_message = 'Wystąpił problem z zapisaniem dania.';
}
$stmt->close();
$conn->close();
} catch (Exception $e) { // 2
$return_message = $e->getMessage();
}
} else { // 1
// Dane nie zostały z formularza przysłane
// np.: pierwsze uruchomienie skryptu
$return_message = '';
}
?>
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Wyszukiwarka</title>
<link rel="stylesheet" href="2.css">
<style>
* {
box-sizing: border-box;
}
.form-adding-db-container {
display: flex;
justify-content: center;
}
.form-adding-db-container .wrap {
width: 245px;
font: 1em/1.2em monospace;
}
.form-adding-db-container .wrap label, input, select {
display: block;
margin: 0.5em;
}
.form-adding-db-container .wrap input[type="text"], select {
width: 230px;
padding: 0.2em;
}
.form-adding-db-container .wrap .buttons {
display: flex;
justify-content: space-between;
margin: 1em 0.5em;
}
.form-adding-db-container .buttons button, a.button {
font: 1.1em/1.3em monospace;
width: 60px;
margin: 0.5em 0;
cursor: pointer;
border: 1px solid gray;
text-align: center;
text-decoration: none;
color: black;
background-color: rgb(239, 239, 239);
}
.form-adding-db-container .return-message {
color: green;
}
</style>
</head>
<body>
<div class="form-adding-db-container">
<div class="wrap">
<form action="" method="post">
<label for="nazwa">Nazwa:</label>
<input type="text" id="nazwa" name="nazwa" required>
<label for="cena">Cena:</label>
<input type="text" id="cena" name="cena" value="0" required>
<label for="typ">Typ:</label>
<select id="typ" name="typ">
<option value="1">Zupy</option>
<option value="2">Dania mięsne</option>
<option value="3">Przystawki</option>
<option value="4">Napoje</option>
</select>
<div class="buttons">
<button type="submit">Dodaj</button>
<a href="index.php" class="button">Wróć</a>
</div>
</form>
<div class="return-message">
<?php echo $return_message; ?>
</div>
</div>
</div>
</body>
</html>
[ mysqli_stmt::bind_param ]
[ How to remove all leading zeros in a string in PHP ? ]