Viennamade: Feldlänge für Eingabefelder beschränken

Liebes Forum,

ich mache eine HTML-Seite, mit der soll man dann mysql-Datensätze editieren können. Ich denke, daß macht man mit einem 'form'. Darin enthaltene 'input'- und 'textarea'-Felder sollen die Spaltenwerte aufnehmen. Dabei habe ich diese Probleme:
1.
Kann ich das 'max-length'-Attribut für die 'input'-Felder aus mysql rausziehen? Schließlich habe ich mysql bei CREATE DATABASE in Sachen Feldlängen informiert! (Mit mysql_fetch_field bekomme ich keine Infos, auch in max_length steht nix drinnen.)

2.
Eine Eingabegrenzung für 'textarea'-Felder? Nur mit Java-Script?

Danke
Viennamade

  1. Hello,

    nach vielen Verduchen und vielen unbeantwortet gebliebenen Fragen hier im Forum bleibt da nur die Möglichkeit eines zusätzlichen Statements. Das kann man dann aber getrost ausführen, wenn das Daten-Query ein Ergebnis geliefert hat.

    #-------------------------------------------------------------------------
    function get_info($con,$table)
    {
      if (!$con) return false;
      if (strlen($table) == 0) return false;

    $sql = "show columns from $table";
      $res = mysql_query($sql,$con);

    if (!$res) return false;

    $info = array();
      while ($rec = mysql_fetch_assoc($res))
      {
        $field=$rec["Field"];
        unset($rec["Field"]);
        $info[$field]=$rec;

    $type = strtolower($info[$field]["Type"]);

    if ((strpos($type,"tinyint")===0)
            or (strpos($type,"smallint")===0)
            or (strpos($type,"mediumint")===0)
            or (strpos($type,"int")===0)
            or (strpos($type,"bigint")===0)
            or (strpos($type,"float")===0)
            or (strpos($type,"doublet")===0)
            or (strpos($type,"decimal")===0))
        {
          $info[$field]["Style"]=" align="right"";
        }
        else $info[$field]["Style"]="";

    }
      return $info;
    }

    returns:

    info[fieldname1]["Type"]

    #                 ["Len"]     <-- das könntest Du verwollständigen
    #                 ["Null"]
    #                 ["Key"]
    #                 ["Default"]
    #                 ["Extra"]
    #                 ["Style"]

    info[fieldname2][...]

    ...

    Typen sind zur Zeit:

    #   tinyint
    #   smallint
    #   mediumint
    #   int
    #   bigint
    #   float
    #   double
    #   decimal
    #   date
    #   datetime
    #   timestamp
    #   time
    #   year
    #   char
    #   varchar
    #   tinyblob
    #   tinytext
    #   text
    #   blob
    #   mediumblob
    #   mediumtext
    #   longblob
    #   longtext
    #   enum
    #   set

    #-------------------------------------------------------------------------

    Die Funktion ist, wie man sieht, noch nicht ganz fertig. Es fehlt noch die Feldlängen-Information, so wie sie in der Datenbank VEREINBART ist.

    Die PHP-Funktionen liefern die Länge des Feldes des Ergebnissets, außerdem nicht über Namen sondern nur über Feldindex. Das ist unpraktisch.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hallo Tom!

      Herzlichen Dank! Das Script hilft mir sehr weiter! Ich war schon am überlegen die Feldlängen in einer separaten Tabelle zu speichern :-)

      Die Funktion ist, wie man sieht, noch nicht ganz fertig. Es fehlt noch die Feldlängen-Information, so wie sie in der Datenbank VEREINBART ist.

      Ich habe diese Zeilen eingefügt (wahrscheinlich sehr umständlich):
       $tmp = strpos($type,"(");
       if ($tmp !== false)
       {
        $tmp=substr($type,$tmp);
       } else {
        $tmp=$type;
       }
       $tmp=trim(str_replace("(","",$tmp));
       $tmp=trim(str_replace(")","",$tmp));
       $info[$field]["Len"]=$tmp;
      Und kann damit gut leben.
      Danke!
      Viennamade

      1. Hello,

        Ich habe diese Zeilen eingefügt (wahrscheinlich sehr umständlich):
         $tmp = strpos($type,"(");
         if ($tmp !== false)
         {
          $tmp=substr($type,$tmp);
         } else {
          $tmp=$type;
         }
         $tmp=trim(str_replace("(","",$tmp));
         $tmp=trim(str_replace(")","",$tmp));
         $info[$field]["Len"]=$tmp;

        Du solltest vielleicht noch warten. Ich habe weiter oben noch einen Thread zu dem Thema eröffnet, weil ich nicht genau weiß, ob ich noch 'was übersehen habe. Ich denke, die Aufsplittung in drei teile oder so wird am besten mit preg_match_all gehen. Aber genau diese Frage habe auch nochmal gestellt.

        Eigentlich ist diese Funktion für die Verarbeitung von MySQL-Tabellen in HTML (also PHP -> HTML) so essentiell, dass sie vernünftig designed als Standard-Funktion aufgenommen werden sollte.

        Die anderen bereits vorhandenen Funktionen http://de2.php.net/manual/en/ref.mysql.php mysql_field_len(), ~type(), etc sind nicht so prall.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hallo,

    ich mache eine HTML-Seite, mit der soll man dann mysql-Datensätze editieren können. Ich denke, daß macht man mit einem 'form'. Darin enthaltene 'input'- und 'textarea'-Felder sollen die Spaltenwerte aufnehmen. Dabei habe ich diese Probleme:
    1.
    Kann ich das 'max-length'-Attribut für die 'input'-Felder aus mysql rausziehen? Schließlich habe ich mysql bei CREATE DATABASE in Sachen Feldlängen informiert! (Mit mysql_fetch_field bekomme ich keine Infos, auch in max_length steht nix drinnen.)

    Würde ich gar nicht auf die maxlength Angabe von Html setzen, denn das heisst noch nicht, das keine überlangen Werte angenommen werden können, zb du hast ein TinyInt Feld in der Datenbank, das kann im besten Fall 255 Zeichen enthalten, also 3 Stellen - Damit kann der Benutzer aber Werte bis 999 eingeben, also müsstest du dies am besten mit zb PHP auf Richtigkeit überprüfen (Mysql schreibt sonst den max Wert in das Feld hinein, ohne dass der Benutzer darüber informiert wird)

    Grüsse,
    Daniel