Yadgar: PHP/MySQL: Unterscheidung zwischen Neueintrag und Bearbeitung eines vorhandenen Datensatzes

Beitrag lesen

Hi(gh)!

Nächstes Problem: nachdem ich die Anzeige der vorhandenen Datensätze fehlerfrei hinbekommen hatte, fügte ich in der Spalte "Operationen" Textlinks für "Bearbeiten" und "Löschen" hinzu. Bei "Bearbeiten" wird mit $_GET die Nummer des zu bearbeitenden Datensatzes an das Dokument gesendet und der bisherige Wert des Feldes "name" im Eingabeelement angezeigt.

Nur - wie weiß mein Formular danach, ob es jetzt einen weiteren Datensatz einfügen oder den in der Liste ausgewählten Datensatz bearbeiten soll?

Hier mein aktueller Code (bitte nicht an kosmetischen oder Sicherheitsfragen aufhalten, das kann ich auch später noch ändern):

<!DOCTYPE html lang="de">
<html>
  <head>
    <title>"GREENBOOK-Dateneingabe: Bundesland (land)"</title>
    <meta charset="UTF-8">
    <style>
      table { width:100%; padding:5px; background-color:#ffe0c2; }
      th { background-color:#ffb369; }
      th, td { text-align:left }
      tr:nth-child(2n+1) { background-color:#ffb369; } 
      td:nth-child(1) { width:20% }
      td:nth-child(2) { width:5% }
      td:nth-child(3) { width:75% }
      .error { color:#ff0000; font-weight:bold }
    </style>
  </head>
  <?php 
require("greenbook_admin_input_menu.php");
require("greenbook_functions.php");
$lengths=[22];
$db = new mysqli("localhost", "root", "***", "***");
ccheck($db);
?>
  <body>
<?php
$mode = htmlspecialchars($_GET["mode"]);
if ($mode == "edit")
  $bundesland = htmlspecialchars($_GET["bundesland"]);
else
  $bundesland = "";
?>

    <div style="position:absolute; width:74%; height:40%; top:0%; left:26%; padding-left:5px; background-color:#99ff99">
<?php
  if (!isset($_POST["liststart"]) && !isset($_POST["listend"]) && !isset($_GET["listpos"]))
  {
    $offset= 0;
    $range = 10;
  }
  else if (isset($_POST["liststart"]) && isset($_POST["listend"]))
  {
    $offset = 0;
    $range = 10;
    if ($_POST["liststart"] < 0 || $_POST["listend"] - $_POST["liststart"] < 0)
    {
      $fehler = "Fehler: erste Datensatznummer kleiner als 1 oder größer als letzte Datensatznummer!";
    }
    else if ((!empty($_POST["liststart"] && empty($_POST["listend"])) || empty($_POST["liststart"]) && !empty($_POST["listend"])))
    {
      $fehler = "Fehler: bitte Start- und End-Datensatznummer eingeben!";
    }
    else
    {
      $offset = trim(htmlspecialchars($_POST["liststart"]))-1;
      $range = trim(htmlspecialchars($_POST["listend"])) - $offset;
      $next10 = $offset + $range;
    }
  }
  else if (isset($_GET["listpos"]))
  {
    $offset = $_GET["listpos"];
    $range = 10;
    $next10 = $offset + 10;
  }

  $prev10 = $offset - 10;
  
  $sql = "SELECT COUNT(*) FROM land";
  $res = $db->query($sql);
  qcheck($res, $db);
  $zeile = $res->fetch_array();
  $all = $zeile[0];
  $last10 = $all - 10;
  
  if ($offset < 0)
  {
    $fehler = "Fehler: erste Datensatznummer kleiner als 1!";
  }
  if ($offset >= $all)
  {
    $fehler = "Fehler: erste Datensatznummer größer als höchste vorhandene Datensatznummer!";
  }
    
  if (!isset($fehler))
  {
    $sql = "SELECT * FROM land LIMIT 0".$offset.", ".$range.";";
    $res = $db->query($sql);
    echo "<table>\n";
    echo "  <tr>\n";
    echo "    <th>Operationen</th>\n";
    echo "    <th>id</th>\n";
    echo "    <th>name</th>\n";
    echo "  </tr>\n"; 
    while ($zeile = $res->fetch_array())
    {
      echo "  <tr>\n";
      echo "    <td><a href='".htmlspecialchars($_SERVER["PHP_SELF"])."?edit=".$zeile['id']."'>Bearbeiten</a> Löschen</td>\n";
      echo "    <td>{$zeile['id']}</td>\n";
      echo "    <td>{$zeile['name']}</td>\n";
      echo "  </tr>\n";
    }
    echo "</table>\n";
  }
  else
  {
    echo "<p class='error'>$fehler</p>";
  }
?>
      
      <form style="position:absolute; top:73%" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
	Datensätze von Nr.
	<input type="text" size="2" maxlength="2" name="liststart"> bis
	<input type="text" size="2" maxlength="2" name="listend">
	<!-- <input type="submit" value="anzeigen"> -->
	<button>anzeigen</button>
      </form>
      <p style="position:absolute; top:80%">
	<a href="<?=htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=0">Erste 10</a> | 
	<a href="<?=htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=<?=$prev10 ?>">vorige 10</a> | 
	<a href="<?=htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=<?=$next10 ?>">nächste 10</a> | 
	<a href="<?=htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=<?=$last10 ?>">letzte 10 Datensätze</a>
      <p>
    </div>
    <div style="position:absolute; width:74%; height:60%; top:40%; left:26%; padding-left:5px; background-color:#ccffcc">
<?php
if (empty($_GET["edit"]))
  $entry = "";
else
{
  $sql = "SELECT name FROM land WHERE id=".$_GET["edit"].";";
  $res = $db->query($sql);
  qcheck($res, $db);
  $zeile = $res->fetch_array();
  $entry = $zeile[0];
}  
?>
      <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
	Bundesland:<br>
	<input type="text" name="bundesland" size="<?php echo $lenghts[0]; ?>" maxlength="<? echo $lengths[0]; ?>" value="<?php echo $entry; ?>"><br>
	<input type="submit" value="Abschicken">
      </form>
<?php

if (!empty($entry))
{
  $sqlpart1 = "UPDATE land SET name ='";
  $sqlpart2 = "' WHERE id=".$_GET["edit"].";";
}
else
{
  $sqlpart1 = "INSERT INTO land (name) VALUES ('";
  $sqlpart2 = "');";
}

if (isset($_POST["bundesland"]) && !empty($_POST["bundesland"]))
{
  $bundesland = lencheck($_POST["bundesland"], $lengths[0]);
  $bundesland = trim(htmlspecialchars($bundesland, ENT_QUOTES));
  // $bundesland = $db->real_escape_string($bundesland);
  // $sql = "INSERT INTO land (name) VALUES ('".$bundesland."');";
  $sql = $sqlpart1.$bundesland.$sqlpart2;
  $res = $db->query($sql);
  qcheck($res, $db);
  echo "$bundesland wurde eingegeben.\n";
}

if (isset($_POST["bundesland"]) && empty($_POST["bundesland"]) && empty($_GET["bundesland"]) && empty($_GET["edit"]))
{
  echo "Fehler: keine Daten eingegeben!\n";
}
?>
      <p>
	<a href="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>?mode=refresh">Datensatzliste aktualisieren
      </p>
    </div>  
  </body>
</html>