MySQL PHP datensätze mit leeren Feldern erstellen bzw ändern


#1
Servus,
Sorry, dass ich schon wieder Hilfe brauche. Ich habe ein Script erstellt, mit dem ich neue Einträge in der Datenbank ändern bzw.
PHP:
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body>
<?php
    session_start();
    $Bibliothek = $_SESSION["Bibliothek"];
    echo "$Bibliothek";
if (isset($_POST["auswahl"]))
{
   $con = mysqli_connect("localhost", "root", "PW" "ms");
   $sql = "SELECT * FROM $Bibliothek WHERE id = "
      . $_POST["auswahl"];
   $res = mysqli_query($con, $sql);
   $dsatz = mysqli_fetch_assoc($res);

   echo "<p>Bitte neue Inhalte eintragen und speichern:</p>";
   echo "<form action = 'Datenbank_aendern_c.php' method = 'post'>";

    echo "<p><input type='hidden' name='ID' value='"
      . $_POST["auswahl"] . "'></p>";
       echo "<p><input name='mole' value='"
      . $dsatz["Name"] . "'> Name</p>";
       echo "<p><input name='casn' value='"
      . $dsatz["CAS_Number"] . "'> CAS-Number</p>";
       echo "<p><input name='mz1' value='"
      . $dsatz["mz1"] . "'> m/z1</p>";
       echo "<p><input name='mz2' value='"
      . $dsatz["mz2"] . "'> m/z2</p>";
       echo "<p><input name='mz3' value='"
      . $dsatz["mz3"] . "'> m/z3</p>";
       echo "<p><input name='mz4' value='"
      . $dsatz["mz4"] . "'> m/z4</p>";
    echo "<p><input name='mz5' value='"
      . $dsatz["mz5"] . "'> m/z5</p>";

   echo "<p><input type='submit' value='Speichern'>";
   echo " <input type='reset'></p>";
   echo "</form>";
 
   mysqli_close($con);
}
else
   echo "<p>Keine Auswahl getroffen</p>";
?>
</body></html>
PHP:
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body>
<?php
    session_start();
    $Bibliothek = $_SESSION["Bibliothek"];
    echo "$Bibliothek";

   $con = mysqli_connect("localhost", "root", "Moest-1983", "ms");
   $ID = $_POST["ID"];
   $mole = ($_POST["mole"]);
   $casn = ($_POST["casn"]);
   $mz1 = ($_POST["mz1"]);
   $mz2 = ($_POST["mz2"]);
   $mz3 = ($_POST["mz3"]);
   $mz4 = ($_POST["mz4"]);
   $mz5 = ($_POST["mz5"]);
   $sql = "UPDATE $Bibliothek SET Name = '$mole', `CAS_Number` = '$casn', mz1 = $mz1, mz2 = $mz2, mz3 = $mz3, mz4 = $mz4, mz5 = $mz5 WHERE ID = $ID";
   mysqli_query($con, $sql);

   $num = mysqli_affected_rows($con);
   if($num > 0) echo "Betroffen: $num<br>";
   else         echo "Betroffen: 0<br>";
 
    $_SESSION = array();
session_destroy();  

   mysqli_close($con);
?>
<p>Zur <a href="Datenbank_aendern.php">Change another entry</a></p>
<p>Alle <a href="db_tabelle_alkohole.php">anzeigen Alkohole</a></p>
<p>Alle <a href="db_tabelle_aldehyde.php">anzeigen Aldehyde</a></p>

</body></html>

anlegen kann.
PHP:
<!DOCTYPE html><html><head><meta charset="utf-8">
<?php
   
   if (isset($_POST["gesendet"]))
   {
      $con = mysqli_connect("localhost", "root", "PW", "ms");
      $mole = $_POST["mole"];
      $casn = $_POST["casn"];
      $Bibliothek = ($_POST['Bib']);
      $mz1 = doubleval($_POST["mz1"]);
      $mz2 = doubleval($_POST["mz2"]);
      $mz3 = doubleval($_POST["mz3"]);
      $mz4 = doubleval($_POST["mz4"]);
      $mz5 = doubleval($_POST["mz5"]);
      $sql = "INSERT INTO $Bibliothek (Name, `CAS_number`,mz1, mz2, mz3, mz4, mz5)"
         . "VALUES('$mole', '$casn ', $mz1, $mz2, '$mz3', '$mz4', '$mz5')";
      mysqli_query($con, $sql);

      $num = mysqli_affected_rows($con);
      if ($num>0)
      {
         echo "<p><font color='#00aa00'>";
         echo "Ein Datensatz hinzugekommen";
         echo "</font></p>";
      }
      else
      {
         echo "<p><font color='#ff0000'>";
         echo "Es ist ein Fehler aufgetreten, ";
         echo "es ist kein Datensatz hinzugekommen";
         echo "</font></p>";
      }

      mysqli_close($con);
   }
?>
</head>
<body>
<p>Geben Sie bitte einen Datensatz ein<br>
und senden Sie das Formular ab:</p>
<form action = "Eintraege_hinzufügen.php" method = "post">
   <p><input name="mole"> Name</p>
   <p><input name="casn"> CAS-Number</p>
   <p><input name="mz1"> mz1</p>
   <p><input name="mz2"> mz2</p>
   <p><input name="mz3"> mz3</p>
   <p><input name="mz4"> mz4</p>
   <p><input name="mz5"> mz5</p>
   <form action="Datenbank_aendern_a.php" method="POST">
<div class="auto-style1">
<input name="Bib" type="radio" checked="checked" value="alkohole" class="auto-style3" /><span class="auto-style3">Alkohole
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span>
<input name="Bib" type="radio" value="aldehyde" class="auto-style3" /><span class="auto-style3">Aldehyde
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span>
<input name="Bib" type="radio" value="Siloxane" class="auto-style3" /><span class="auto-style3">GC-Siloxane
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span>
<input name="Bib" type="radio" value="LC" class="auto-style3" /><span class="auto-style3">LC-MS
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span>
<input name="Bib" type="radio" value="polare" class="auto-style3" style="height: 20px" /><span class="auto-style3">LC-polare Substanzen
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span>
<input name="Bib" type="radio" value="Phthalate" class="auto-style3" /><span class="auto-style3">LC-Phthalate
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </span>
<input name="Bib" type="radio" value="Proteine" class="auto-style3" /><span class="auto-style3">LC-Proteinmethode</span>
</div>

   <p><input type="submit" name="gesendet">
   <input type="reset"></p>
</form>

<p>Alle <a href="db_tabelle_alkohole.php">anzeigen Alkohole</a></p>
<p>Alle <a href="db_tabelle_aldehyde.php">anzeigen Aldehyde</a></p>
</body></html>
Jetzt habe ich das Problem, dass die Felder, die ich leer lasse beim erstellen in die Datanbank eine "0" eintragen bzw. dass ich nur die Einträge ändern kann, bei denen alle Felder einen Wert haben, also keine Felder die "" sind.
Habt ihr eine Idee, woran das liegen könnte?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#2
Hi,

ohje, da sind einige Probleme in deinem Code...

<!DOCTYPE html><html><head><meta charset="utf-8"></head><body>
<?php session_start();
session_start() muss vor der ersten Ausgabe an den Browser gemacht werden, sonst gehts nicht / gibt Warnungen. Das muss vor dem Doctype geschehen!

$sql = "SELECT * FROM $Bibliothek WHERE id = " . $_POST["auswahl"];
SQL-Injection – Wikipedia

echo "<p><input type='hidden' name='ID' value='" . $_POST["auswahl"] . "'></p>";
Cross-Site-Scripting – Wikipedia

$ID = $_POST["ID"];
$mole = ($_POST["mole"]);
$casn = ($_POST["casn"]);
$mz1 = ($_POST["mz1"]);
$mz2 = ($_POST["mz2"]);
$mz3 = ($_POST["mz3"]);
$mz4 = ($_POST["mz4"]);
$mz5 = ($_POST["mz5"]);
$sql = "UPDATE $Bibliothek SET Name = '$mole', `CAS_Number` = '$casn', mz1 = $mz1, mz2 = $mz2, mz3 = $mz3, mz4 = $mz4, mz5 = $mz5 WHERE ID = $ID";
SQL-Injection – Wikipedia

$mz1 = doubleval($_POST["mz1"]);
$mz2 = doubleval($_POST["mz2"]);
$mz3 = doubleval($_POST["mz3"]);
$mz4 = doubleval($_POST["mz4"]);
$mz5 = doubleval($_POST["mz5"]);
$sql = "INSERT INTO $Bibliothek (Name, `CAS_number`,mz1, mz2, mz3, mz4, mz5)" . "VALUES('$mole', '$casn ', $mz1, $mz2, '$mz3', '$mz4', '$mz5')";
Das ist der Grund, warum du "0" erhältst. Du nimmst das was vom POST her kommt und wandelst das in eine Zahl um.

Grüsse,
BK
 

Yaslaw

n/a
Moderator
#3
Ich versteh nicht, was dein Problem ist. Wird jetzt 0 eingetragen oder kommt ein Fehler?
Und was soll drin stehen?

Noch was. Niemals direkt die Strings aus $_POST in ein SQL einbauen.
Entwder mit Prepared Statements arbeiten oder mindestens jeden Wert mittels mysqli_real_escape_string() konvertieren