[PHP] Lengte van veld in variabele

Pagina: 1
Acties:
  • 194 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb hier de tabel:

code:
1
2
3
4
5
6
7
8
        $getinputfieldsQ = mysql_query("SELECT * FROM rows");
        while($getinputfieldsR = mysql_fetch_object($getinputfieldsQ))
            {
            echo "<tr>";
                echo "<td align=right>" . $getinputfieldsR->rows . ":</td>";
                echo "<td><input name=\"" . $getinputfieldsR->rows . "\" size=35></td>";
            echo "</tr>";
            }


In plaats van size=35, wil ik nu de veldlengte hebben van het betreffende veld. In de tabel rows staan de rijen die ik wil hebben uit de tabel machines. De veldlengte moet dus uit de tabel machines komen. Betreffend mysql_field_len is zeer summier gedocumenteerd en ik kan nergens een goed voorbeeld vinden.

Wel vond ik:
code:
1
2
3
4
5
6
7
/* Erstellt Connect zu Datenbank her */
  $result = mysql_query("SELECT * FROM machines");
  $menge = mysql_num_rows($result);
  for($x=0;$x<$menge;$x++){
  echo mysql_field_len($result,$x);
    echo "<br>";
  }


Wat achtereenvolgens de lengte van alle rijen uit machines weergeeft. Maar daar kan ik natuurlijk verder nix mee. Stel, ik heb $huidigerij, en ik wil de veldlengte daarvan uit de tabel machines halen, hoe stop ik dat dan tussen mijn code? (Of is er een alternatief?)

Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
ehm...... je hebt toch de veldnaam als string ter beschikking?

gooi er dan een

code:
1
.... size='.strlen($getinputfieldsR->col_name).' ...


tussen door?

Ff uitzoeken wat je colomnaam is natuurlijk...... staat vast ook gedefinieerd in dat object.....

/edit
hmm dit werd dus niet gevraagd. oops ^_^

[ Voor 12% gewijzigd door cavey op 18-05-2004 11:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als het veld nu 'Processor' heet, krijg ik 9, omdat processor 9 letters heeft. Dat is dus niet wat ik zoek. Het veld processor is bijvoorbeelv varchar(15), en ik moet dus die 15 hebben...

Acties:
  • 0 Henk 'm!

Verwijderd

mysql_field_len

edit:
sorry, die had je zelf ook al gevonden :)

[ Voor 33% gewijzigd door Verwijderd op 18-05-2004 11:37 ]


Acties:
  • 0 Henk 'm!

  • Markieman
  • Registratie: December 2001
  • Laatst online: 01-06 11:37
Verwijderd schreef op 18 mei 2004 @ 11:33:
Als het veld nu 'Processor' heet, krijg ik 9, omdat processor 9 letters heeft. Dat is dus niet wat ik zoek. Het veld processor is bijvoorbeelv varchar(15), en ik moet dus die 15 hebben...
De lengte opvragen is redelijk overbodig, want die weet je al aangezien je hem al gedefinieerd hebt in de tabel.

Deze definitie is als het goed is niet variabel (ik ga er voor het gemak van uit dat je niet constant ALTER TABELS aanroept)

Zet die lengte dus gewoon hard-coded in je PHP script. Of liever als constanten declareren aan het begin van je script, zodat je het later eventueel makkelijk kan aanpassen.

You do not fear them? - The Wraith? Naah. Now *clowns*, that's another story.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je hebt een stukje code waarbij je voor elke kollom de breedte kunt bepalen en je hebt een stukje waarmee je elke rij afdrukt. Ik zie het probleem niet zo. Als je het resultaat van de eerste opslaat in een array oid en vdat vervolgens uitleest bij het afdrukken ben je toch klaar?

@markieman : dat ben ik niet met je eens. Op deze manier heb je slechts 1 plek waar de breedte van een veld wordt gedefinieerd, nl in de db. Zelfs al zou je constanten gebruiken, dan nog zijn er 2 plekken waar de breedte wordt gedefinieerd (tenzij je een configuratie script maakt die deze constanten gebruikt om de database aan te maken of aan te passen). Iig nooit hardcoded in je php zetten, maar dat gaf je zelf (iets minder strict) ook al aan.

Zodra iets op meer dan 1 plek wordt gedefinieerd gaat de onderhoudbaarheid van de code sterk achteruit. Andere dingen om de onderhoudbaarheid te bevorderen zijn trouwens het benoemen van je colomen in je query. Dat mag de TS ook wel gaan doen ;).

[ Voor 56% gewijzigd door Janoz op 18-05-2004 11:40 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn vraag was dus, hoe ik dat mysql_field_len (of een alternatief) in mijn geval kan toepassen. Ik heb een lijstje met rijen, dat ik uit de ene tabel haal (rows), en de tabel zelf (met oa de rijen uit die andere tabel). Ik maak dus een loopje die alles uit rows haalt, en dat op machines toepast, maakt verder niet uit.

De vraag is, hoe kom ik in mijn bovenstaand script te weten wat de lengte van een veld is? Met mysql_field_len misschien? (Zoals ik zei, dit is in de php manual zeer summier beschreven en ik kan geen voorbeelden vinden op internet, behalve dat voorbeeld dat ik gaf, zij het dat ik hier nix aan heb omdat de naam van het veld er niet uitgehaald wordt (daarentegen gewoon alle velden aangeroepen worden), dus.)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 18 mei 2004 @ 11:40:
Mijn vraag was dus, hoe ik dat mysql_field_len (of een alternatief) in mijn geval kan toepassen. Ik heb een lijstje met rijen, dat ik uit de ene tabel haal (rows), en de tabel zelf (met oa de rijen uit die andere tabel). Ik maak dus een loopje die alles uit rows haalt, en dat op machines toepast, maakt verder niet uit.

De vraag is, hoe kom ik in mijn bovenstaand script te weten wat de lengte van een veld is? Met mysql_field_len misschien? (Zoals ik zei, dit is in de php manual zeer summier beschreven en ik kan geen voorbeelden vinden op internet, behalve dat voorbeeld dat ik gaf, zij het dat ik hier nix aan heb omdat de naam van het veld er niet uitgehaald wordt (daarentegen gewoon alle velden aangeroepen worden), dus.)
Nee, hoe moet ik weten welk gegeven uit de array ik moet aanroepen? Ik moet daarbij niet alle kolommen hebben , maar alleen de kolommen die in de tabel rows (moet zijn columns) staan.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 18 mei 2004 @ 11:40:
Mijn vraag was dus, hoe ik dat mysql_field_len (of een alternatief) in mijn geval kan toepassen. Ik heb een lijstje met rijen, dat ik uit de ene tabel haal (rows), en de tabel zelf (met oa de rijen uit die andere tabel). Ik maak dus een loopje die alles uit rows haalt, en dat op machines toepast, maakt verder niet uit.

De vraag is, hoe kom ik in mijn bovenstaand script te weten wat de lengte van een veld is? Met mysql_field_len misschien? (Zoals ik zei, dit is in de php manual zeer summier beschreven en ik kan geen voorbeelden vinden op internet, behalve dat voorbeeld dat ik gaf, zij het dat ik hier nix aan heb omdat de naam van het veld er niet uitgehaald wordt (daarentegen gewoon alle velden aangeroepen worden), dus.)
Als je je veldnamen benoemd in je query weet je precies welke index welk veld heeft. Dy mysql_field_len kun je gewoon op je query resultat aanroepen om de lengtes te achterhalen. Je kunt het echter niet op de gefetchte row uitvoeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zou een array kunnen beginnen met array["veldnaam1"] enz. Maar dan moet ik dus eerst achter de index van kolom komen, en dan de lengte en dan ook de naam van die kolom. En dat schijnt dus onmogelijk met mysql_field_len, omdat ik alleen de veldnaam weet, niet de index, en ook niet de lengte want die wil ik juist weten.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Komop, je mag best wel zelf nadenken hoor ;)

Als jij SELECT kolomA, kolomB, kolomC FROM table hebt dan vraag je met mysql_field_length(0,$result) de lengte van kolomA op.

Als die kolommen dynamisch zijn dan kun je toch alsnog een mapping van index naar kolomnaam maken? Je hebt alle gegevens, je moet ze alleen nog even slim en efficient samenvoegen. Dat is de hele essentie van programmeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
associatieve arrays laten returnen ........ ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
komakeef schreef op 18 mei 2004 @ 11:59:
associatieve arrays laten returnen ........ ?
Daar dacht ik dus ook aan, maar dan moet ik uit de reply van Janoz de naam van de kolom eruit zien te krijgen.

mysql_field_length(0,$result) -> waar staat die 0 voor?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Voor de eerste kolom, maar ik zie net dat het eigenlijk andersom moet. het is dus mysql_field_len($result,0) voor de eerste kolom, mysql_field_len($result,1) voor de tweede kolom enz. Hier was je ook zelf wel achter gekomen waneer je een beetje had geporbeert.

[ Voor 87% gewijzigd door Janoz op 18-05-2004 14:36 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1