Patrick: Vielleicht auch PHP! Kann nicht in DB schreiben.

Hallo,

ich habe ein Eingabeformular, mit welchem per PHP in eine MYSQL-DB geschrieben werden soll. Dieses Formular besteht aus 3 Feldern.
Wenn ich jedoch eines der Felder leer lasse, wird nicht in die DB geschrieben. Woran kann das liegen?
Ist es vielleicht möglich, dass mit dem Script eine Eingabe in Zeile 11 erzwungen wird?? Muss ich das dann ändern?

Bin nicht der PHP-Profi, erst Anfänger.
Vielen Dank für eure Hilfe.
Patrick

Hier das Script:

<?

require("database.php");

include("navbar.php");

if(($deleteButton != "") && ($brancheID != "")) {
 mysql_query("delete from tbl_sachgebiet where id = " . $brancheID);
 mysql_query("delete from tbl_mitarbeiter_sachgebiet_assoc where branche_id = " . $brancheID);
} else if (($addButton != "") && ($addText != "") && ($addamt != "") && ($addwas != "")) {
 $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet");
 $row = mysql_fetch_array($result);

mysql_query("insert into tbl_sachgebiet (id, name, amt, was) values (" . $row["id"] . ", '" . $addText . "', '" .$addamt . "' , '" .$addwas . "')");
}
?>

<p>

<form action="index.php" method="get">

<table border="0"> <tr><td>

Bekannte Sachgebiete:<br><br>

</td> <td></td> </tr><tr> <td>

<select name="brancheID" size=8 style="width:600">

<?

$result = mysql_query("select * from tbl_sachgebiet order by name");

while($row = mysql_fetch_array($result)) {

echo "<option value="" . $row["id"] . ""> " . $row["name"] . " -> " . $row["amt"] . " -> " . $row["was"] . "\n";

} ?>

</select>

</td><td valign="top">

<input type="submit" name="deleteButton" value="löschen" tabindex="2" style="width:100">
<input type="hidden" name="tab" value="branchen">

</td></tr>

<p> </p>
  <table width="514" border="0" height="11">
    <tr>
      <td width="190">Sachgebiet </td>
      <td width="108">Amt</td>
      <td width="319">Was wird benötigt?</td>
    </tr>
    <tr>
      <td width="190">
        <input type="text" name="addText" maxlength ="255" value="Sachgebiet"  size="30" tabindex="0" style="width:180">
      </td>
      <td width="108">
        <input type="text" name="addamt" maxlength ="255" value="Amt" size="30" tabindex="0" style="width:180">
      </td>
      <td width="319">
        <input type="text" name="addwas" maxlength ="255" value="Was wird benötigt?" size="30" tabindex="0" style="width:180">
      </td>
    </tr>
  </table>
  <p></p>
  <input type="submit" name="addButton" value="hinzufügen" tabindex="1" style="width:100">

</td></tr>
</table>

</form>

  1. Hallo,

    hab es schon selbst rausbekommen, was ich falsch gemacht habe.
    Statt:
    else if (($addButton != "") && ($addText != "") && ($addamt != "") && ($addwas != "")) {
     $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet");
     $row = mysql_fetch_array($result);

    Hab ich es so gemacht:
    else if (($addButton != "") && ($addText != "") || ($addamt != "") || ($addwas != "")) {
     $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet");
     $row = mysql_fetch_array($result);

    Jetzt können die Felder auch leer bleiben.

    Nur habe ich jetzt folgendes Problem:
    Wie erzwinge ich die Eingabe von $addText ?

    Vielen Dank
    Patrick

    1. <form .... name="daten" ....>

      <input type="button" name="addButton" value="hinzufügen" tabindex="1" style="width:100" onclick=check()>
      <script language=javascript>
      function check()
      {
      if(document.getElementById('addtext')=="") alert("keinen Text eingegeben!");
      else document.daten.submit();
      }

      1. if(document.getElementById('addtext')=="")
        muss natürlich so aussehen:
        if(document.getElementById('addtext').value=="")

    2. else if (($addButton != "") && ($addText != "") || ($addamt != "") || ($addwas != "")) {
      $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet");
      $row = mysql_fetch_array($result);

      Jetzt können die Felder auch leer bleiben.

      Nur habe ich jetzt folgendes Problem:
      Wie erzwinge ich die Eingabe von $addText ?

      Anstatt wild in der Gegend rumzuprobieren solltest Du Dich mal mit Sinn und Bedeutung von Klammern und Operatoren auseinandersetzen. Die Funktion der Klammern ist genauso wie in der Mathematik, die innerste wird zuerst bearbeitet, dann weiter schrittweise nach außen. Setz Dich damit mal ein bißchen auseinander, das ist ein wirklich _grundlegendes_ Thema in der Programmierung mit so gut wie _allen_ Sprachen und Du wirst ohne Verständnis für das, was Du da oben gemacht hast, nicht weit kommen.

      Gruß,
        soenk.e

      1. if (($addButton != "") && ($addText != "") || ($addamt != "") || ($addwas != ""))

        wohl wahr, wenn addamt != "" is, sind die ersten beiden uninteressant
        if (($addButton != "") && (($addText != "") || ($addamt != "") || ($addwas != "")))

        dürfte besser sein

      2. Hi,

        danke erstmal an alle, die mir geholfen haben.
        Statt:
        if (($addButton != "") && ($addText != "") || ($addamt != "") || ($addwas != ""))

        Habe ich es jetzt so gemacht:
        if (($addButton != "") && ($addText != "") && ($addamt >= "") && ($addwas >= ""))

        Wäre es so in Ordnung?
        Oder ist das immer noch nicht das Nonplusultra?

        Vielen Dank
        Patrick

        1. Hi,

          danke erstmal an alle, die mir geholfen haben.
          Statt:
          if (($addButton != "") && ($addText != "") || ($addamt != "") || ($addwas != ""))

          Habe ich es jetzt so gemacht:
          if (($addButton != "") && ($addText != "") && ($addamt >= "") && ($addwas >= ""))

          Wäre es so in Ordnung?
          Oder ist das immer noch nicht das Nonplusultra?

          in diesem falle würde dein eintrag nicht stattfinden, sollte $addtext leer sein, jedoch weiß das der benutzer nich .... weil ja keine fehlermeldung ausgegeben wird oder?

          Vielen Dank
          Patrick

        2. Statt:
          if (($addButton != "") && ($addText != "") || ($addamt != "") || ($addwas != ""))

          Habe ich es jetzt so gemacht:
          if (($addButton != "") && ($addText != "") && ($addamt >= "") && ($addwas >= ""))

          Wäre es so in Ordnung?
          Oder ist das immer noch nicht das Nonplusultra?

          Also so wird das nichts, wirklich :) Nimm Dir doch bitte erstmal zu Herzen, was ich Dir eben zu Klammern und Operatoren geschrieben habe. Und dann stellst Du Dir die Frage "Was will ich eigentlich?" und baust die komplette Zeile 11 Deinen Wünschen entsprechend neu auf.
          Im Moment wurschtelst Du nur planlos im existierenden Code rum in der Hoffung, daß es irgendwann in dreiundzwanzig Jahren mal funktioniert.

          Überlege Dir, welche Felder müssen ausgefüllt sein? Welche Felder sind mir egal? Die Felder, die Dir egal sind, brauchst Du auch nicht prüfen. Für den Rest schreibst Du dann schön ordentlich hintereinander auf, welche Bedingungen sie erfüllen müssen.
          Das ist alles nichts weiter, als einen Satz zu formulieren, zum Beispiel "Ich möchte, daß $a nicht leer ist und $b nicht leer ist", daraus wird dann 'if (($a!="") && ($b!=""))'. Ganz einfach, oder?

          Soweit ich das bis jetzt rauslesen konnte, wird Deine Version der Zeile 11 noch simpler aussehen und da mußt Du wirklich alleine drauf kommen, ansonsten stehst Du bei dem nächsten kleinen Problem wieder auf dem Schlauch und schmeißt den ganzen Kram frustriert in die Ecke.

          Gruß,
            soenk.e

          1. Hi,

            danke an alle, die mir geholfen haben.
            Jetzt klappt es.

            Grüße
            Patrick

  2. if (($addButton != "") && ($addText != "") && ($addamt != "") && ($addwas != ""))
    sobald eins von den teilen =nix is wird doch der teil ganrich ausgeführt

  3. Hi,

    probier mal das... (ich habe eine andere Schreibweise benutzt)
    deine ist für mich unleserlich

    $que="INSERT INTO tbl_sachgebiet ".
      "SET id = '{$row["id"]}' ".
      "name = '$addText' ".
      "amt = '$addamt' ".
      "was = '$addwas'";

    Hallo,

    ich habe ein Eingabeformular, mit welchem per PHP in eine MYSQL-DB geschrieben werden soll. Dieses Formular besteht aus 3 Feldern.
    Wenn ich jedoch eines der Felder leer lasse, wird nicht in die DB geschrieben. Woran kann das liegen?
    Ist es vielleicht möglich, dass mit dem Script eine Eingabe in Zeile 11 erzwungen wird?? Muss ich das dann ändern?

    Bin nicht der PHP-Profi, erst Anfänger.
    Vielen Dank für eure Hilfe.
    Patrick

    Hier das Script:

    <?

    require("database.php");

    include("navbar.php");

    if(($deleteButton != "") && ($brancheID != "")) {
    mysql_query("delete from tbl_sachgebiet where id = " . $brancheID);
    mysql_query("delete from tbl_mitarbeiter_sachgebiet_assoc where branche_id = " . $brancheID);
    } else if (($addButton != "") && ($addText != "") && ($addamt != "") && ($addwas != "")) {
    $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet");
    $row = mysql_fetch_array($result);

    mysql_query("insert into tbl_sachgebiet (id, name, amt, was) values (" . $row["id"] . ", '" . $addText . "', '" .$addamt . "' , '" .$addwas . "')");
    }
    ?>

    <p>

    <form action="index.php" method="get">

    <table border="0"> <tr><td>

    Bekannte Sachgebiete:<br><br>

    </td> <td></td> </tr><tr> <td>

    <select name="brancheID" size=8 style="width:600">

    <?

    $result = mysql_query("select * from tbl_sachgebiet order by name");

    while($row = mysql_fetch_array($result)) {

    echo "<option value="" . $row["id"] . ""> " . $row["name"] . " -> " . $row["amt"] . " -> " . $row["was"] . "\n";

    } ?>

    </select>

    </td><td valign="top">

    <input type="submit" name="deleteButton" value="löschen" tabindex="2" style="width:100">
    <input type="hidden" name="tab" value="branchen">

    </td></tr>

    <p> </p>
      <table width="514" border="0" height="11">
        <tr>
          <td width="190">Sachgebiet </td>
          <td width="108">Amt</td>
          <td width="319">Was wird benötigt?</td>
        </tr>
        <tr>
          <td width="190">
            <input type="text" name="addText" maxlength ="255" value="Sachgebiet"  size="30" tabindex="0" style="width:180">
          </td>
          <td width="108">
            <input type="text" name="addamt" maxlength ="255" value="Amt" size="30" tabindex="0" style="width:180">
          </td>
          <td width="319">
            <input type="text" name="addwas" maxlength ="255" value="Was wird benötigt?" size="30" tabindex="0" style="width:180">
          </td>
        </tr>
      </table>
      <p></p>
      <input type="submit" name="addButton" value="hinzufügen" tabindex="1" style="width:100">

    </td></tr>
    </table>

    </form>

  4. ich habe ein Eingabeformular, mit welchem per PHP in eine MYSQL-DB geschrieben werden soll. Dieses Formular besteht aus 3 Feldern.
    Wenn ich jedoch eines der Felder leer lasse, wird nicht in die DB geschrieben. Woran kann das liegen?
    Ist es vielleicht möglich, dass mit dem Script eine Eingabe in Zeile 11 erzwungen wird?? Muss ich das dann ändern?

    Wenn das so ist, mußt Du das wohl ändern, ja :)

    } else if (($addButton != "") && ($addText != "") && ($addamt != "") && ($addwas != "")) {

    Und hier passiert auch genau das, was Du schon vermutet hast: Bei den vier Variablen wird geprüft, ob sie ungleich "" (sprich: nicht leer) sind.
    Möchtest Du, daß eine davon leer sein darf, mußt Du die entsprechende Prüfung einfach nur rausnehmen. Aber:

    $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet");
    $row = mysql_fetch_array($result);

    Wer immer das geschrieben hat, was hat sich offensichtlich nicht für die armen Leute interessiert, die das Ding auch benutzen müssen :) Schon bei Deinem Problem hat man darauf verzichtet, eine nette kleine Fehlermeldung auszugeben, falls ein Feld leer gelassen wurde.
    Hier geht man sogar noch einen Schritt weiter und prüft nichtmal mehr, ob bei der Datenbankabfrage mittels mysql_query() eventuell ein Fehler aufgetreten ist; $result wird einfach in der nächsten Funktion weiterverwendet. IMHO ein grober Schnitzer.

    Ersetze die Zeile mit $result=mysql_query durch etwas wie:

    if (! $result = mysql_query("select max(id)+1 'id' from tbl_sachgebiet")) die("SQL-Fehler: ".mysql_error());

    Falls dann mal ein Fehler auftreten sollte, bekommst Du den auch angezeigt und tappst nicht im Dunkeln, was schiefgegangen sein könnte (bzw. in diesem Fall: kriegst nichtmal mit, daß etwas schiefgegangen ist).

    Gruß,
      soenk.e