Avatar billede Jonas Nybegynder
18. december 2007 - 15:35 Der er 8 kommentarer og
1 løsning

optimering af databasekald.

Hej eksperter.

Jeg vil gerne havde lidt hjælp til optimering af den side jeg har.
jeg har en database(mysql) som ser sådan ud.

CREATE TABLE IF NOT EXISTS `indhold` (
  `id` int(11) NOT NULL auto_increment,
  `url` varchar(50) NOT NULL,
  `overskrift` text character set latin1 collate latin1_danish_ci NOT NULL,
  `billede` varchar(30) NOT NULL,
  `billede_alt` varchar(30) NOT NULL,
  `meta_desc` text NOT NULL,
  `meta_keyw` text NOT NULL,
  `tekst` longtext character set latin1 collate latin1_danish_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

Disse informationer henter jeg ud vha funktioner.php
<?php include("connect.php");
function titel(){
$titel_db = mysql_query("select * from indhold where    url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl
while ($row = mysql_fetch_array($titel_db)) {
print ("".nl2br($row["overskrift"]).""); }
}
?>

har så en funktion for hver row. hvordan forenkler jeg det således at hvis www.minside.dk/indhold.php?side=test bliver kaldt kan jeg bruge de felter som bliver brugt der ? i et kald i stedet for at have 5 kald.
Avatar billede dkfire Nybegynder
18. december 2007 - 16:19 #1
Først lav en index på dit felt url.

Resten af dit spørgsmål giver ikke særlig meget mening ud fra det du har skrevet af kode.
Vis noget mere kode, eller forklar dig bedre.
Avatar billede Jonas Nybegynder
18. december 2007 - 16:34 #2
funktioner.php
<?php include("connect.php");
function titel(){
$titel_db = mysql_query("select * from indhold where    url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
while ($row = mysql_fetch_array($titel_db)) {
print ("".nl2br($row["overskrift"]).""); }
}
function side(){
$side_db = mysql_query("select *  from indhold where url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
if(mysql_num_rows($side_db) == 0) {
header("HTTP/1.0 404 not Found");
}
while ($row = mysql_fetch_array($side_db)) {
print (nl2br($row["tekst"])); }
}
function billede(){
$billede_db = mysql_query("select * from indhold where url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
while ($row = mysql_fetch_array($billede_db)) {
print ("".nl2br($row["billede"]).""); }
}
function billede_alt(){
$billede_alt__db = mysql_query("select * from indhold where url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
while ($row = mysql_fetch_array($billede_alt__db)) {
print ("".nl2br($row["billede_alt"]).""); }
}
function meta_desc(){
$meta_desc_db = mysql_query("select * from indhold where url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
while ($row = mysql_fetch_array($meta_desc_db)) {
print ("".nl2br($row["meta_desc"]).""); }
}
function meta_keyw(){
$meta_keyw_db = mysql_query("select * from indhold where url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
while ($row = mysql_fetch_array($meta_keyw_db)) {
print ("".nl2br($row["meta_keyw"]).""); }
}
?>

indhold.php
<html>
<head>
<title><?php titel(); ?></title>
<meta name="description" content="<?php meta_desc();?>" />
<meta name="keywords" content="<?php meta_keyw();?>" />
</head>
<h2 class='overskrift'><?php titel();?></h2>
<?php
echo "<p class='text'>";

side();
echo "</p>";
}
echo "</div>";
?>
Avatar billede dkfire Nybegynder
18. december 2007 - 17:00 #3
Der er en ting som er helt galt:
header("HTTP/1.0 404 not Found");
Dette vil aldrig kunne lade sig gøre da du allerede har sendt en header inden du kalder funktionen side(), det eneste du vil opnå er en fejl på siden.

Kan en side bestå af flere rækker i din database ??
Avatar billede Jonas Nybegynder
18. december 2007 - 17:16 #4
dkfire >> ja den giver fejl derfor vil jeg gerne lave det på en anden måde.
Nej siden er ret simpel.

`id`
`url` (indhold.php?side=url
`overskrift` (bruges til <title>
`billede` (et billede der skifter på siden)
`billede_alt` (forskellig alt på billedet)
`meta_desc` (<meta name="description">)
`meta_keyw` (<meta name="keywords">)
`tekst` (selve teksten på siden)
Avatar billede dkfire Nybegynder
18. december 2007 - 17:31 #5
Jamen så gør du det jo også mere besværligt for dig selv.

<?php include("connect.php");

function titel($data){
print ("".nl2br($data)."");
}

function side($data){
print (nl2br($data));
}
function billede($data){
print ("".nl2br($data)."");
}
function billede_alt($data){
print ("".nl2br($data)."");
}
function meta_desc($data){
print ("".nl2br($data)."");
}
function meta_keyw($data){
print ("".nl2br($data)."");
}
?>

indhold.php
<?php
include("connect.php");
$side_db = mysql_query("select * from indhold where    url = '".$_GET["side"] . "' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
if(mysql_num_rows($side_db) == 0) {
header("HTTP/1.0 404 not Found");
exit;
}
$row = mysql_fetch_array($side_db)
?>
<html>
<head>
<title><?php titel($row['overskrift']); ?></title>
<meta name="description" content="<?php meta_desc($row['meta_desc']);?>" />
<meta name="keywords" content="<?php meta_keyw($row['meta_keyw']);?>" />
</head>
<h2 class='overskrift'><?php titel($row['overskrift']);?></h2>
<?php
echo "<p class='text'>";

side($row['tekst']);
echo "</p>";
}
echo "</div>";
?>
Avatar billede dkfire Nybegynder
18. december 2007 - 17:36 #6
Eller måske endnu mere simpelt:

<?php
include("connect.php");
$side_db = mysql_query("select * from indhold where url='".$_GET["side"]."' LIMIT 1")or die ("Der er sket en fejl. Fejl:".mysql_error());
if(mysql_num_rows($side_db) == 0) {
header("HTTP/1.0 404 not Found");
exit;
}
$row = mysql_fetch_array($side_db)
?>
<html>
<head>
<title><?php print($row['overskrift']); ?></title>
<meta name="description" content="<?php print($row['meta_desc']);?>" />
<meta name="keywords" content="<?php print($row['meta_keyw']);?>" />
</head>
<h2 class='overskrift'><?php print(nl2br($row['overskrift']));?></h2>
<?php
echo "<p class='text'>";

print(nl2br($row['tekst']));
echo "</p>";
}
echo "</div>";
?>
Avatar billede Jonas Nybegynder
18. december 2007 - 18:06 #7
det virkede sørme lige ud af posen :-)

mht til
CREATE TABLE IF NOT EXISTS `indhold` (
  `id` int(11) NOT NULL auto_increment,
  `url` varchar(50) NOT NULL,
  `overskrift` text character set latin1 collate latin1_danish_ci NOT NULL,
  `billede` varchar(30) NOT NULL,
  `billede_alt` varchar(30) NOT NULL,
  `meta_desc` text NOT NULL,
  `meta_keyw` text NOT NULL,
  `tekst` longtext character set latin1 collate latin1_danish_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

kunne denne forbedres ?
og hva mente du i starten med index på url ?
Avatar billede Jonas Nybegynder
18. december 2007 - 18:20 #8
og mht til HTTP/1.0 404 not Found kan man så ikke få den til at vise min 404 side ?

lige nu kommer der en blank side, men header viser rigtigt nok 404
Avatar billede dkfire Nybegynder
20. december 2007 - 00:27 #9
Jeg ved ikke lige om din tabel struktur kan forbedres, men du kan i phpmyadmin sætte en index på dit felt url, det vil lette søgningen i tabellen. Men jeg tror dog ikke det lige er nødvendigt i dit tilfælde.

Ang. header, kan du sagtens få php til at henvise til en anden side, i stedet for at vise en 404 side. Det gør du med:
header('Location: /mappemeddinside/dinside.php');

Håber det hjalp :-)
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