Avatar billede gil-galad Nybegynder
31. maj 2004 - 18:49 Der er 26 kommentarer og
2 løsninger

MySQL begynder

Hejsa

Jeg har leget lidt med programmet PHPMyAdmin som er installeret på mit webhotels server. Jeg har lavet en tabel som hedder 'fisk' med nogle felter der hedder laks, aborre og gedde. Jeg har givet felterene datatypen text, da de kun indeholder normal tekst. hvis jeg så vil hente indholdet af tabel fisk og feltet med laks ned på min hjemmeside, hvad gør jeg så? har kigget under eksport, men kender ikke rigtigt noget til SQL eller LaTex og hvad der nu ellers er. Kun XML ved jeg hvad er, men det er ikke det jeg vil bruge.

Nogen der kan give mig et eksempel på hvordan det kan gøres, og evt. nogle links til toturials? (er totalt begynder inde for emnet)
Avatar billede phpwiz Nybegynder
31. maj 2004 - 18:54 #1
kig forbi http://mbn.dk han har nogle fine guides til hvordan ting virker .. ;o)
Avatar billede thb Nybegynder
31. maj 2004 - 18:58 #2
Du siger mysql_query("SELECT laks FROM fisk");
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:00 #3
thb> skal man ikke connecte til databasen og alt muligt først? vil gerne se et komplet eksempel på det du siger.
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:04 #4
skriver dette i en php-fil, men får en bunke fejl:

<?php
$connection = mysql_connect("**", "**", "**");
mysql_select_db("fisk", $connection);

$result = mysql_query("SELECT laks FROM fisk");
echo $result;
?>
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:17 #5
ændrede lidt på det og nu siger den    Resource id #3    ??
Avatar billede dennismp Nybegynder
31. maj 2004 - 19:30 #6
<?php
$connection = mysql_connect("**", "**", "**") or die(mysql_error());
mysql_select_db("fisk", $connection) or die(mysql_error());

$result = mysql_query("SELECT laks FROM fisk") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
  print $row['laks'] . '<br>';
}
?>
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:39 #7
dennismp> det virker!

kan man via en variabel bestemme hvilket felt der så skal hentes?
Avatar billede dennismp Nybegynder
31. maj 2004 - 19:42 #8
Ja.

"laks" i din SELECT laks FROM fisk

fortæller at du vil trække feltet laks ud. Du kan sagents hente flere

fx:

SELECT laks, sild FROM fisk;

eller

SELECT * FROM fisk;

sidstnævnte henter alle felter ud fra tabellen.
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:43 #9
prøvede lige dette:

$result = mysql_query("SELECT * FROM fisk") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
  echo $row['laks'] . '<br>';
  echo $row['aborre'] . '<br>';
  echo $row['gedde'] . '<br>';
}

og den skrev alle tre ud. Men bliver man så invaderet af hackere eller er det en "ufin" måde at gøre det på?
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:44 #10
havde ikke set dit indlæg, men du siger det er ok...
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:45 #11
jeg mente noget alá dette:

$fisk = aborre;
$result = mysql_query("SELECT $fisk FROM fisk") or die(mysql_error());
Avatar billede dennismp Nybegynder
31. maj 2004 - 19:46 #12
prøv at kigge nærnere på dette - der er blot een af mange SQL tutorials:
http://www.w3schools.com/sql/default.asp

der kan du se hvilke SQL statements du kan bruge i dine scripts.
Avatar billede dennismp Nybegynder
31. maj 2004 - 19:52 #13
$fisk = 'aborre';
$result = mysql_query("SELECT $fisk FROM fisk") or die(mysql_error());

det her virker fint og er relativ risikofrit..

Det jeg tror du tænker på er SQL Injection.. Lad os sige at man kan slette sin post på en portal. Dette gøres i sql ved at:

$id = $_GET['id'];

mysql_query("DELETE FROM post WHERE id = '$id'");

Så vil den normalt slette en post, fx 4. hvis man bruger en url
http://site.com/sletpost.php?id=4

SQL'en til MySQL bliver så: DELETE FROM post WHERE id = '4'.. Fint.

SQL injection er så hvis man giver brugeren lov til at gøre mere end det er meningen. fx

http://site.com/sletpost.php?id=4'+OR+'1'='1

Hvis man ikke tjekker data ordenligt (som fx i vores eksempel) vil sql'en se sådan her ud:
DELETE FROM post WHERE id = '4' OR '1'='1'

Uhada! .. '1' er jo altid = '1'. Så nu får vi slettet alle rækker istedet for id-4. Den slags ting kan vi ikke lide, så man bør tjekke input og se om det nu er noget ordenligt noget vi får ind (man skal jo aldrig stole på brugeren)..

Dette kan gøres ved at bruge addslashes() eller fx. $id = intval($id);

Håber det giver en idé om hvad problemet er.. Det er nok lidt tidligt nu, at tænke for meget på det. I første omgang skal du fokuserer på at blive fortroligt med sql.
Avatar billede gil-galad Nybegynder
31. maj 2004 - 19:56 #14
hvad helt præcist gør denne linje: while($row = mysql_fetch_array($result))

Hvorfor kan jeg ikke bare skrive echo $result;  ?
Avatar billede gil-galad Nybegynder
31. maj 2004 - 22:12 #15
hallo?
Avatar billede dennismp Nybegynder
31. maj 2004 - 22:14 #16
fordi at MySQL (og databaser generelt) ikke har resultat i hukommelsen.. Tænk hvis du tabellen indeholder flere GB data - så vil det være en enorm belastning at skulle loop'e det igennem.. Derfor får man en række ad gangen..
Avatar billede gil-galad Nybegynder
31. maj 2004 - 22:19 #17
ok.

hvis nu variablen fisk = laks hvordan for jeg den så til at hente laks ud fra databasen? Har prøvet dette, men virker ikke: echo $row['$result']; men jeg er heller ikke den skarpeste kniv i skuffen hvad php angår...
Avatar billede dennismp Nybegynder
31. maj 2004 - 23:41 #18
din echo $row afhænger af din sql - vordan ser den ud?
Avatar billede gil-galad Nybegynder
01. juni 2004 - 16:02 #19
# phpMyAdmin SQL Dump
# version 2.5.5-pl1
# http://www.phpmyadmin.net
#
# Vært: localhost
# Genereringstidspunkt: 01/06 2004 kl. 16:02:40
# Server version: 4.0.17
# PHP version: 4.3.4
#
# Database: : `spiff`
#

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

#
# Struktur dump for tabellen `fisk`
#

CREATE TABLE `fisk` (
  `laks` text NOT NULL,
  `aborre` text NOT NULL,
  `gedde` text NOT NULL,
  PRIMARY KEY  (`laks`(2),`aborre`(2),`gedde`(2))
) TYPE=MyISAM;

#
# Data dump for tabellen `fisk`
#

INSERT INTO `fisk` VALUES ('laks laks laks laks laks laks laks laks ', 'aborre aborre aborre aborre aborre ', 'gedde gedde gedde gedde gedde gedde ');
   


Kan du bruge det til noget?
Avatar billede dennismp Nybegynder
01. juni 2004 - 16:05 #20
hvis du har en

$fisk = 'laks';
$res = mysql_query("SELECT $fisk FROM fisk");

osv..

så kan du hente resultatet med
$row[$fisk];
Avatar billede gil-galad Nybegynder
01. juni 2004 - 16:11 #21
$fisk = $_GET["fisk"];
$result = mysql_query("SELECT $fisk FROM fisk") or die(mysql_error());

$result = mysql_query("SELECT * FROM fisk") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
  echo $row['$fisk'];
}


sådan ser det ud, men det virker ikke.
Avatar billede dennismp Nybegynder
01. juni 2004 - 16:13 #22
$fisk = $_GET["fisk"];
$result = mysql_query("SELECT $fisk FROM fisk") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
  echo $row[$fisk];
}
Avatar billede gil-galad Nybegynder
01. juni 2004 - 16:13 #23
ahhh... dumme mig.

Glemte at fjerne ' erne
Avatar billede gil-galad Nybegynder
01. juni 2004 - 16:15 #24
ok. så et sidste spørgsmål, så skal du nok få fred :-)

Hvis jeg nu har 100 sider, som jeg gerne vil have vist på min hjemmeside, vil det så være smart at lave alle 100 på den måde som jeg har lavet gedde, laks og aborre?
Avatar billede dennismp Nybegynder
01. juni 2004 - 16:24 #25
Nix.

Lad os sige du har en masse artikler og en tabel

CREATE TABLE articles (
  id int primary key auto_increment not null,
  title varchar(32) not null,
  body text
);

Lad os tilføje et par tekster:

INSERT INTO articles(title,body) values('Artikel 1', 'Her står så en laaang telst, der ikke er lang' );
INSERT INTO articles(title,body) values('Artikel 2', 'Her står så en anden laaang telst, der ikke er lang' );

Som du ser angiver jeg intet id. auto_increment sørger for at de får et nummer (1, 2 .. ) hvis man ikke angiver noget..

Når du skal vise dem laver du et lille script i php der gør det. Lad os kalde den article.php - så den kan kaldes med article.php?id=1
<?php
  $id = intval($_GET['id']);

  $res = mysql_query("SELECT title, body FROM articles WHERE id = '$id'") or die(mysql_error());
  if( $row = mysql_fetch_row($res) ) {
    print "<h1>".$row['title']."</h1>";
    print $row['body'];
  }
  else {
    print "Fandt ikke artiklen";
  }
?>

Hvis du så vil have en oversigt, kan du bruge index.php som så ser sådan her ud:
<?php
  $res = mysql_query("SELECT id, title FROM articles ORDER BY title") or die(mysql_error());
  while( $row = mysql_fetch_row($res) ) {
    print '<a href="article.php?id=' .$row['id'] . '">'.$row['title'].'</a>';
  }
?>

Jeg har ikke testet det - men jeg håber det kan gi' dig en fornemmelse for hvordan man normalt laver det.
Avatar billede gil-galad Nybegynder
02. juni 2004 - 13:41 #26
ok, smider du et svar?
Avatar billede dennismp Nybegynder
02. juni 2004 - 13:49 #27
Joda - håber det hjalp.
Avatar billede gil-galad Nybegynder
02. juni 2004 - 18:34 #28
det må være en fair fordeling :-)
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