Avatar billede datix2 Nybegynder
06. april 2001 - 20:52 Der er 15 kommentarer og
1 løsning

Klasser driller...hjælp!

Jeg har længe brugt en klasse som jeg har lavet til
brug med mysql.
Det den gør er at strukturere min kode lidt,
så queries og lignende fylder minimalt, hvilket er praktisk
i forbindelse med lidt større projekter.
Det jeg ikke kan få til at virke, er følgende:
Jeg vil, for at have en helt ren struktur, lave to funktioner
i klassen, QueryBegin() og QueryEnd(), som hhv. starter og afslutter
while løkken.
Startes med :  while ($row = mysql_fetch_array($Query)) {
og afsluttes med }
Nu er problemet at denne syntax vil php ikke acceptere.
Det er garanteret nemt, men jeg kan sq ikke komme på hvordan problemet løses.
Håber i forstår mit rodede spørgsmål, ellers må i jo lige sige til :)

Nogle vil måske nok mene at det er et luksus-\"problem\", men for mig handler det om at
opstille mine queries så simpelt så muligt :)

Min (her simpelt opskrevet) klasse som den ser ud,
eller som jeg gerne ville have den til at se ud.:


class mysql_class {

  function QueryBegin($str) {
      $Query = mysql_query($str);
      while ($row = mysql_fetch_array($Query))
      {
  }

  function QueryEnd($str) {
      }
  }

}

I praksis vil den fungere ca. således:

$sql = new mysql_class();
$sql->QueryBegin(\"SELECT * FROM names\");

  print $row[id];
  print $row[name]
 
$sql->QueryEnd();
Avatar billede codebase Praktikant
06. april 2001 - 21:10 #1
2 ting.

print $row[name]
 
mangler et ;


QueryEnd();
mangler en variabel

_codeb@se.

Avatar billede datix2 Nybegynder
06. april 2001 - 21:13 #2
ok, jeg læste vidst ikke god nok korrektur på min kode:

print $row[name]  mangler et ; .. ok

function QueryEnd() {
      }
  }

i stedet for...men mit problem er stadig ikke løst...
Avatar billede codebase Praktikant
06. april 2001 - 21:14 #3
I know, sidder pt. og tester :)

_codeb@se.
Avatar billede codebase Praktikant
06. april 2001 - 21:18 #4
Det er den besked jeg får:
Fatal error: Call to undefined function: queryend() in D:\\www\\codebase.dk\\test\\query.php on line 23
Avatar billede datix2 Nybegynder
06. april 2001 - 21:21 #5
jep, det afsluttende } smadrer jo opbygningen, således at php tror at der er en for meget af den :(
Avatar billede mortenfn Nybegynder
06. april 2001 - 21:23 #6
nu er jeg lidt ny - hvem gidder forklare hvad class er for noget
Avatar billede codebase Praktikant
06. april 2001 - 21:23 #7
denne line: $sql->QueryEnd(); giver fejlen
hvis du skriver: QueryEnd(); får du ikke fejlen!

_codeb@se.
Avatar billede codebase Praktikant
06. april 2001 - 21:27 #8
kan du beskrive LIDT *ggg*
Avatar billede datix2 Nybegynder
06. april 2001 - 21:29 #9
mortenfn: klasser er en lækker detalje i php, der gør at du kan opstille en slags template for oprettelse af forskellige objekter osv du ønsker at bruge. I det her tilfælde bruger jeg klasser til at holde styr på min mysql kode, men det kan også bruges til f.eks at lave en form.
Nu har jeg ikke skrevet selve class koden op, men her er et eksempel på min form-class i funktion:

$form = new form_class(\"target.php\");
$form->inputfield(\'type\',\'name\',\'size\',\'value\');
$form->inputfield(\'type\',\'name\',\'size\',\'value\');
$form->submitbutton(\'Ok\');

Jeg har desuden fundet en artikel på php.dk der forklarer lidt nærmere om det:

http://www.php.dk/artikler/oophp.php
Avatar billede mortenfn Nybegynder
06. april 2001 - 21:33 #10
datix2>> tak du fåer et point en dag - nu er der clint på DR!
Avatar billede erikjacobsen Ekspert
06. april 2001 - 23:41 #11
Du kan ikke erstatte en del af en kontrolstruktur (while) med et kald til en
funktion/metode i en klasse. Det er - som PHP så tydeligt siger - ulovlig syntaks.
Drop det, eller læs videre.

Du kan imidlertid give en funktion med som parameter til en anden funktion. Betragt:

function f($g) {
  for ($i=0;$i<10;$i++) {
    $g($i);
  }
}

function h($r) {
  echo \"Her er $r<br>\\n\";
}

f(h);

?>

I denne kode er f din sql-funktion, der laver SQL-kaldet, løbet resultatet igennem
med en whileløkke og rydder op (men det gad jeg ikke lige skrive). Den ligger
i din klasse og skal aldrig ændres.

h er en funktion, der så siger hvad der skal gøres på hvert række i resultatet
fra din SELECT. Den får rækken med som parameter, og skal måske blot skrive
det ud på passende vis. (Her er det bare et tal).

...det var bare lidt inspiration...

Avatar billede aggie Nybegynder
14. maj 2001 - 14:12 #12
manner, erikjacobsen er vild til det her...
Avatar billede sirius Nybegynder
13. juni 2001 - 00:11 #13
hvorfor ikke bare lave det hele i en:

class mysql_class {

  function Query($str) {
      $Query = mysql_query($str);
      while ($row = mysql_fetch_array($Query))
      {
          print $row[id];
          print $row[name];
      }   

  }

}

-------------------------------

$sql = new mysql_class();
$sql->Query(\"SELECT * FROM names\");
Avatar billede datix2 Nybegynder
13. juni 2001 - 01:09 #14
sirius: jeg har accepteret dit svar, men egentlig er det mest for at få lukket det her spørgsmål. Jeg kan nok heller ikke bruge din model, da jeg har ca. 2 siders kode mellem while { og }
Derfor prøvede jeg at få lidt struktur på mit kode...hvilket ikke lykkedes i denne omgang...
Avatar billede sirius Nybegynder
13. juni 2001 - 14:16 #15
tja du kunne vel lave nogle funktioner som du så kunne kalde i den funktion jeg har skrevet til dig..
Avatar billede datix2 Nybegynder
14. juni 2001 - 15:56 #16
det må jeg jo forsøge at rode lidt med...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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