Forms verwenden für insert?
Hallo, wie könnte eine Forms aussehen, mit welcher ich in eine Datenbank inserten kann?
2 Antworten
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Überlege dir erst, welche Daten gespeichert werden sollen. Für all die benötigst du entsprechende Felder (mit einem name-Attribut). Im besten Fall sollten diese auch validiert werden, um zu verhindern, dass nicht erwünschte Daten aufgenommen werden.
In deinem PHP-Skript kannst du die Daten aus den superglobalen Arrays $_POST oder $_GET herauslesen. Je nachdem, über welche Request-Methode du die Formulardaten hast abschicken lassen. Den Wert eines Feldes erhältst du über den Schlüssel, den du im jeweiligen name-Attribut hinterlegt hast.
Auch im PHP-Code sollte eine Wertvalidation erfolgen, da eine clientseitige Validation umgangen werden kann. Du brauchst einen SQL-Query (INSERT INTO), den du mittels Prepared Statement an die Datenbank schicken kannst.
Im folgenden Beispiel wird ein Name in eine MySQL-Datenbanktabelles names geschrieben. Dafür gibt es ein HTML-Formular, welches seine Daten via POST an den Server schickt.
index.php:
<!doctype html>
<head>
<title>Example</title>
<meta charset="utf-8">
</head>
<body>
<form method="post">
<label for="name">Name:</label>
<input id="name" name="name" pattern="[A-Z][a-z]+" required>
<input type="submit">
<p><?php include_once 'dbinsert.php'; ?></p>
</form>
</body>
dbinsert.php:
<?php
function nameIsValid($name) {
return preg_match('/^[A-Z][a-z]+$/', $name);
}
if (!empty($_POST['name']) && nameIsValid($_POST['name'])) {
$connection = new mysqli('hostname', 'username', 'password', 'database name');
if ($connection->connect_error) {
print 'Data could not be saved.';
}
else {
$connection->set_charset('utf8mb4');
$statement = $connection->prepare('INSERT INTO names (name) VALUES (?)');
$statement->bind_param('s', $_POST['name']);
if ($statement->execute()) {
print 'Success.';
}
else {
print 'Failed.';
}
}
}
?>
Schau zudem in die PHP-Dokumentation. In der werden alle verfügbaren Datenbankschnittstellen (MySQLi, PDO, etc.) aufgeführt. Zu den einzelnen Funktionen findest du oftmals kurze Praxisbeispiele.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Servus, die Frage ist zwar sehr vage gestellt, jedoch kann ich dir hier ein Beispiel einer Übung welche ich vor kurzem gemacht habe einfügen:
<?php
echo '<h1>Ort hinzufügen</h1>';
makeTabelForAddress();
if(isset($_POST['save']))
{
//insert
$locname = $_POST['locationName'];
$plz = $_POST['plz'];
if ($locname != null and $plz != null)
{
$query = 'select ort_id from ort where ort_name = (?)';
$array = array($locname);
$stmt = makeStatement($query,$array);
if($stmt->rowcount() > 0)
{
echo $locname.' ist bereits vorhanden. Es können nur neue Orte hinzugefügt werden.';
}
else
{
$query = 'INSERT INTO ort (ort_name) VALUES (?)';
$stmt = makeStatement($query, $array);
if ($stmt instanceof Exception) {
echo '<h2>'.$locname.' kann nicht gespeichert werden!</h2>'. $stmt->getcode().': '.$stmt->getmessage();
}
else
{
$query = 'select plz_id from ort_plz where plz_id = (?)';
$array = array($plz);
$stmt = makeStatement($query,$array);
if($stmt->rowcount() > 0)
{
$query = 'select ort_id from ort where ort_name = (?)';
$array = array($locname);
$stmt = makeStatement($query, $array);
$row = $stmt -> fetch(PDO::FETCH_ASSOC);
$locid = $row['ort_id'];
$query = 'update ort_plz set ort_id = ? where plz_id = ?';
$array = array($locid,$plz);
$stmt = makeStatement($query,$array);
if ($stmt instanceof Exception) {
echo '<h2>'.$locname.' kann nicht gespeichert werden!</h2>'. $stmt->getcode().': '.$stmt->getmessage();
}
else{
echo '<h1>Ort zur PLZ angepasst</h1>';
}
}
else
{
$query = 'select ort_id from ort where ort_name = (?)';
$array = array($locname);
$stmt = makeStatement($query, $array);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$locid = $row['ort_id'];
/* $query = 'select plz_id from plz where plz_nr = (?)';
$array = array($plz);
$stmt = makeStatement($query,$array);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$plzid = $row['plz_id']; */
$query = 'INSERT INTO ort_plz (ort_id,plz_id) VALUES (?,?)';
$array = array($locid,$plz);
$stmt = makeStatement($query, $array);
if ($stmt instanceof Exception) {
echo '<h2>'.$locname.' kann nicht gespeichert werden!</h2>'. $stmt->getcode().': '.$stmt->getmessage();
}
else{
echo '<h1>Ort und PLZ gespeichert</h1>';
}
}
}
}
}
else
{
echo '<h2>Ort und PLZ müssen eingetragen sein</h2>';
}
}
else
{
?>
<form data-sb-form-api-token="API_TOKEN" method = "post">
<div class = "form-floating mb-3">
<input class="form-control" id="locationName" name = 'locationName' type = "text"
placeholder="location" data-sb-validations="required,email" />
<label for="locationName">Orts/Stadtname</label>
</div>
<?php
$sql = "Select plz_id,plz_nr FROM plz";
$result = makeStatement($sql);
// Dropdown-Menü erstellen
echo '<select name="plz" id="plz" >';
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo '<option value="' . $row['plz_id'] . '">' . $row['plz_nr'] . '</option>';
}
echo '</select>';
?>
<div class="d-grid">
<input class = "btn btn-primary btn-lg" name = "save" type = "submit" value = "speichern">
</div>
</form>
<?php
}