Avatar billede supermand69 Nybegynder
05. februar 2003 - 20:37 Der er 26 kommentarer og
1 løsning

antal karaktere i en kolonne i MySQL

Hey... :)

Hvordan kan man finde ud af hvor mange tegn der højest kan være i en kolonne?? Det skal bruges i et input ved MAXLENGTH så man ikke skriver mere end det tilladte

eks.
<input type="text" name="test" maxlength="4">
Avatar billede roo104 Nybegynder
05. februar 2003 - 20:40 #1
prøv at skrive:
desc tabelnavn;
Avatar billede roo104 Nybegynder
05. februar 2003 - 20:41 #2
den viser datatyperne for de forskellige kolonner.
Avatar billede supermand69 Nybegynder
05. februar 2003 - 20:47 #3
øhh, hvordan det?? :)
Avatar billede roo104 Nybegynder
05. februar 2003 - 20:49 #4
har du ikke et eller andet sted hvor du kan afvikle sql komendoer ?
DOS promt hvis du har databasen på din egen computer eller phpmyadmin, hvid det er hos et webhotel.
Avatar billede supermand69 Nybegynder
05. februar 2003 - 20:53 #5
jo, men hvordan kan man lave en kode på sit site der selv går ind og undersøger det???
Avatar billede erikjacobsen Ekspert
05. februar 2003 - 21:09 #6
Lad mig lige være sikker:

Du har et felt i en tabel i en MySql-database, og du skal
finde noget smart MySql og noget script - hvilket sprog? -
der finder max længde på feltet?
Avatar billede supermand69 Nybegynder
05. februar 2003 - 21:12 #7
ja... jeg bruger PHP

jeg skal f.eks. finde hvor mange tegn der max kan være i feltet "name"
Avatar billede roo104 Nybegynder
05. februar 2003 - 21:21 #8
Der findes en funktion i mysql der hedder length(), som finder længden af et felt, så kan du løbe alle felterne igennem og sætte den højeste fundne værdi til din maxlength
Avatar billede roo104 Nybegynder
05. februar 2003 - 21:25 #9
// Hent data ud
$resultat = mysql_query("select length(name) from tabel;")

// Kør så igennem for hver række
$max_length = 1;
while ($raekke = mysql_fetch_array($resultat)) {
  if ($raekke['navn'] > $max_length) {
      $max_length = $raekke['navn'];
  }


Eller sådan noget
Avatar billede roo104 Nybegynder
05. februar 2003 - 21:26 #10
Og så
<input type="text" name="test" maxlength="<?php echo $max_length ?>">
Avatar billede roo104 Nybegynder
05. februar 2003 - 21:28 #11
Mine PHP egenskaber er ikke de bedste, men på den her måde tilpasser maxlength sig efter hvad der står i databasen
Avatar billede erikjacobsen Ekspert
05. februar 2003 - 21:28 #12
roo104: det er jo ikke max mulig længde, som spørgeren ønsker
Avatar billede xyborx Nybegynder
05. februar 2003 - 21:33 #13
Efter at have læst lidt her, bliver jeg lidt i tvivl om spørgsmålet..
supermand69: Vil du have PHP til at undersøge hvor mange karakterer MySQL tillader i det pågældende felt, eller vil du finde længden på den længste eksisterende streng? :)
Avatar billede erikjacobsen Ekspert
05. februar 2003 - 21:36 #14
Der er nu da ikke noget at være i tvivl om :)
Her et udkast til løsning. Brug $maxlaengde['navn']

<?
  mysql_connect("localhost","","");
  mysql_select_db("test");
  $res = mysql_query("desc billeder") or die(mysql_error());
  while ($row=mysql_fetch_array($res)) {
    $max=0;
    if (ereg('([0-9]+)',$row['Type'],$reg)) {
      $max=$reg[1];
    } elseif ($row['Type']=='date') {
      $max=8;
    }
    $maxlaengde[$row['Field']]=$max;
  }
  print "<pre>";
  print_r($maxlaengde);
  print "</pre>";
?>
Avatar billede supermand69 Nybegynder
05. februar 2003 - 21:37 #15
jeg kan ikke få det til at virke??? :(

$get = mysql_query("SELECT length(nick) FROM users") or die(mysql_error());
$row = mysql_fetch_array($get);

echo $row[nick];
Avatar billede supermand69 Nybegynder
05. februar 2003 - 21:42 #16
xyborx -->
jeg vil finde ud af hvor mange tegn MySQL tillader i det pågældende felt :)
Avatar billede roo104 Nybegynder
05. februar 2003 - 21:48 #17
Du vil finde den dataype og max længe som tabellen blev oprettet med ik ?

fx varchar(50), så skal maxlength være 50 ?
Avatar billede supermand69 Nybegynder
05. februar 2003 - 21:49 #18
roos104 -->
jo :)
Avatar billede miraculix Nybegynder
05. februar 2003 - 21:59 #19
Du kan f.eks. bruge funktionen mysql_list_fields() sammen med mysql_field_len()

Check dem i PHP dokumentationen:
http://www.php.net/manual/en/function.mysql-list-fields.php
Avatar billede supermand69 Nybegynder
05. februar 2003 - 23:11 #20
miraculix -->
jeg har prøvet at se lidt på det, men er lidt forvirret...

gider du ikke lige hjælpe mig i gang?? :)
Avatar billede supermand69 Nybegynder
05. februar 2003 - 23:22 #21
kan man ikke gøre det på en eller anden simpel måde:

$get = mysql_query("SELECT length(*) FROM users");
$row = mysql_fetch_array($get);

echo $row[nick];
Avatar billede miraculix Nybegynder
05. februar 2003 - 23:35 #22
Jo det kan jeg godt. Den der mysql-list-fields.php skulle jo liste felterne.
Jeg antager at du har connected til mysql og at dit link identifier hedder  $link.

Hvis du så vil finde længden af feltet "blam" i tabellen "table1" i databasen "database1" skal du gøre følgende:

$fields = mysql_list_fields("database1", "table1", $link);
$columns = mysql_num_fields($fields);

for ($i = 0; $i < $columns; $i++) {
    if (mysql_field_name($fields, $i) == "blam" ) {
        $maxlen = mysql_field_len($fields, $i);
        break;
    }
}

Variablen $maxlen vil herefter indeholde længden på feltet "blam"

Jeg har ikke test ovenstående, men det kan jeg jo gøre mens du tygger lidt på den..
    echo mysql_field_name($fields, $i) . "\n";
}
Avatar billede miraculix Nybegynder
05. februar 2003 - 23:37 #23
Hov der kom lidt affald med i bunden...

I øvrigt kan det jo være at du vil have længden af flere felter på en gang. Du kunne f.eks. læse dem ind i et associativt array med felt-navnet som "key". Så kan du nemmere slå dem op når du udskriver din html-kode.
Avatar billede miraculix Nybegynder
05. februar 2003 - 23:43 #24
Nu har jeg test hos mig. Her virker den.
Avatar billede miraculix Nybegynder
05. februar 2003 - 23:50 #25
Her er en version der opbygger et array med længden på hvert felt: (i mit eksempel tabellen "members":

    $fields = mysql_list_fields("min_database", "members", $conn);
   
    $columns = mysql_num_fields($fields);
   
    $members_len = array();
 
    for ($i = 0; $i < $columns; $i++) {
      $members_len[mysql_field_name($fields, $i)] = mysql_field_len($fields, $i);
    }

    foreach ( $members_len as $key => $value ) {         
        echo ( "Feltet $key har længden $value <BR>");
    }

Jeg vælger altså her at liste alle felter og længder. Skal du have fat på længden af navn i et inputfelt der står i HTML delen af dokumentet kunne du gøre sådan:

<input type="text" name="navn" value="" maxlength="<?= $member_len['navn'] ?>">

Men med denne metode skal du altså oprette et array for hver tabel du bruger i din formular.
Avatar billede xyborx Nybegynder
06. februar 2003 - 13:12 #26
Du kan måske bruge den function jeg lige har bikset sammen.. :)
I field tager den enten et specifikt felt som resulterer i feltets max-længde, eller * som resulterer i et array med alle felternes max-længde (hvis angivet i typen, ellers ignoreres det). Der returneres false hvis der sker fejl eller feltet ikke gav brugbar information.

function mysql_maxlength($table,$field='*')
{
    if($query=@mysql_query('SHOW FIELDS FROM '.$table))
    {
        if($field=='*')
        {
            $array=Array();
            while(list($field_found,$type)=mysql_fetch_row($query))
            {
                if(ereg("[^\(]+\(([0-9]+)\)",$type,$regs))
                {
                    $array[$field_found]=intval($regs[1]);
                }
            }
            return count($array)?$array:false;
        }
        else
        {
            while(list($field_found,$type)=mysql_fetch_row($query))
            {
                if($field_found==$field && ereg("[^\(]+\(([0-9]+)\)",$type,$regs))
                {
                    return intval($regs[1]);
                }
            }
            return false;
        }   
    }
    else
    {
        return false;
    }
}
Avatar billede supermand69 Nybegynder
07. februar 2003 - 13:15 #27
Jeg har brugt miraculix's løsning, da jeg mener den er mest simpel og der ikke er så meget der skal eksekveres :)

function field_len($db, $table)
{
    global $link;
   
    $fields = mysql_list_fields($db, $table, $link);
    $columns = mysql_num_fields($fields);
    for($i = 0; $i < $columns; $i++) $field_len[mysql_field_name($fields, $i)] = mysql_field_len($fields, $i);
   
    return $field_len;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester