---
title: "Effektivisering och konstruktiv kritik"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/47569-effektivisering-och-konstruktiv-kritik"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "LAMP"
published: "2002-07-09T15:06:12.000Z"
updated: "2002-07-10T13:22:32.000Z"
replies: 19
views: 457
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/47569-effektivisering-och-konstruktiv-kritik"
---

# Effektivisering och konstruktiv kritik

## #1 — LAMP, 2002-07-09T15:06Z

Någon vänlig själ som vill hacka lite på min första kod i PHP.

Alla tips på förbättringar mottages tacksamt. Hacka på, jag tål det ;)

```php
<?php

// *** inkludera ett connectionobjekt ***
   require("connection.php");
		
// *** Gör en select och loopa ut alla kategorier ***
   $strSQL = ("SELECT intCategoryId, strName, strDescription FROM Forums_category
      ORDER BY strName ASC");

   $Result = mysql_query( $strSQL )
      or die( mysql_error() );

   if( mysql_num_rows( $Result ) < 1 ) 

   {
      print ("<tr><td colspan=\"6\" style=\"background-color:#B1BFC9;\"><p><b>Ett fel inträffade. Det gick inte hämta från            databasen, prova ladda om sidan.</b></p></td></tr>\n");      

   }

   else {
    
   while ($data = mysql_fetch_array($Result)) {
 
      print ("<tr><td colspan=\"6\" style=\"background-color:#B1BFC9;\"><p><b> " .$data['strName']. " </b></p></td></tr>\n");

// *** definera en variabel att jämföra med ***
   $id = $data["intCategoryId"];

// *** Hämta alla forum som tillhör kategorin ***
   $strSQL = ("SELECT IntForumId, intCatagoryId, strForumUse, strForumName, intForumLedareMemberId 
      FROM Forums_forum WHERE intCatagoryId = '$id' ORDER BY strForumName ASC");

   $mysqlResult = mysql_query( $strSQL )
     or die( mysql_error() );

   if( mysql_num_rows( $mysqlResult ) < 1 ) {

      print ("<tr><td colspan=\"6\" style=\"background-color:#B1BFC9;\"><p><b>Ett fel inträffade. Det gick inte hämta från            databasen, prova ladda om sidan.</b></p></td></tr>\n");      
}

   else {

   while ($data2 = mysql_fetch_array($mysqlResult)) {

// *** Definiera variabler som ska användas ***
   $intForumId = $data2["IntForumId"];
   $strForumName = $data2["strForumName"];
   $strForumUse = $data2["strForumUse"];

// *** Skriv ut de olika forumen ***
print ("<tr>");

   print ("<td width=\"20\" valign=\"middle\" bgcolor=\"#C0CFD9\">Ic</td>\n");
   print ("<td width=\"380\" valign=\"middle\"><p><a href=\"threadlist.php?forumid=$intForumId\">$strForumName</a><br>$strForumUse</p></td>\n");

   print ("<td width=\"50\" valign=\"middle\" align=\"center\" bgcolor=\"#C0CFD9\">");

// *** Räkna ut hur många trådar det finns i aktuellt forum ***
  $res = mysql_query("SELECT IntForumId FROM Inlagg WHERE IntForumId = '$intForumId' AND Orginal = 1", $db);
  $antaltopics = mysql_num_rows($res);

// *** Skriv ut hur många trådar det finns i aktuellt forum ****
   print ("<p><b>$antaltopics</b></p></td>\n");

// *** Räkna ut hur många inlägg det finns i aktuellt forum ***
  $result = mysql_query("SELECT IntForumId FROM Inlagg WHERE IntForumId = '$intForumId'", $db);
  $antalthreads = mysql_num_rows($result);

// *** Skriv ut hur många inlägg det finns i aktuellt forum ****
   print ("<td width=\"50\" valign=\"middle\" align=\"center\" bgcolor=\"#C0CFD9\"><p><b>$antalthreads</b></p></td>\n");

// *** Hämta senaste inlägget och skribent i forumet ***
   $SQL = ("Select Profil.Username, Profil.AnvId, Inlagg.Inlagg_AnvId, Inlagg.IntForumId, Inlagg.dteDate
   FROM Inlagg 
   LEFT JOIN Profil 
   ON Inlagg.Inlagg_AnvId = Profil.AnvId 
   WHERE Inlagg.IntForumId = '$intForumId' ORDER by Inlagg.dteDate DESC LIMIT 1");

$last_post_result = mysql_query( $SQL )
     or die( mysql_error() );

if( mysql_num_rows( $last_post_result ) < 1 ) {

print ("<td width=\"120\" valign=\"middle\"><p>&nbsp;</p></td>\n");

}
else {

$data3 = mysql_fetch_array($last_post_result);

  $last_topicdate = $data3["dteDate"]; 
  $last_topicdate = substr($last_topicdate, 0, 16);
  $last_topicwriter = $data3["Username"]; 

print ("<td width=\"120\" valign=\"middle\"><p>$last_topicdate av $last_topicwriter</p></td>\n");

}

print ("<td width=\"130\" valign=\"middle\" bgcolor=\"#C0CFD9\">Forumledare</td>\n");

print ("</tr>");

}

  }

    }

       }

mysql_close ();
?>
```

Permalänk: https://www.webforum.nu/p/47569

## #2 — SPiN, 2002-07-09T21:36Z

Ser ok ut. :)

En fråga: Kan du inte använda dig av färre SQL-frågor på något sätt? Det ser lite jobbigt ut att använda så många. :)

Permalänk: https://www.webforum.nu/p/716053

## #3 — LAMP, 2002-07-09T22:12Z

Jag har slagit ihop de jag kan till joinar. Eftersom databasen är normaliserad så långt det går så blir det svårt att använda färre. I varja fall med min kunskap i SQL. 

Har du något konkret tips på vilka som tekniskt sätt skulle gå att slå ihop. Tabellerna till forumet i stort ser ut så här:

kategorier - innehåller forumkategorier (id, namn, beskrivning)
forum - innehåller de olika forumen (id, namn, beskrivning, kategoriid, forumledarid)
trådar - innehåller (trådid, subject, datum, forumid, memberid)
inlägg - innehåller (meddelande, memberid, datum, trådid, orginal, mfl)

Tillvägagångssätt nu är att loopa ut alla kategorier, och för varje kategoriid loopa ut forumen tillsammans med lite statestik, som tex senaste inlägg, antal trådar, antal inlägg.

Permalänk: https://www.webforum.nu/p/716075

## #4 — SPiN, 2002-07-09T22:25Z

Nej, jag är ingen höjdare på SQL - jag tyckte bara att det såg pillimarigt ut. :)

Permalänk: https://www.webforum.nu/p/716082

## #5 — LarsG, 2002-07-09T22:27Z

Om du bara vill ha antalet poster så är det bättre att använda select count(\*) än mysql_num_rows

Varför har du apostrofer kring värdet om det är ett tal (som namnet antyder)

```
IntForumId = '$intForumId'
```

Det är nästan bara Mysql som tillåter att du blandar typer på detta vis.

Permalänk: https://www.webforum.nu/p/716084

## #6 — LAMP, 2002-07-09T22:32Z

> **LarsG skrev:**
>
> Om du bara vill ha antalet poster så är det bättre att använda select count(\*) än mysql_num_rows
> 
> Varför har du apostrofer kring värdet om det är ett tal (som namnet antyder)
> 
>
>
> ```
> IntForumId = '$intForumId'
> ```
>
> 
> 
> Det är nästan bara Mysql som tillåter att du blandar typer på detta vis.

Jag har läst att man ska ha apostrofer kring alla variabler i SQL-frågor för att förhindra att "dumma besökare" skickar med tex kommenteringstecken som #, vilket skulle resultera i att eventuella vilkorssatser aldrig kontrolleras.

Ska genast byta till SELECT COUNT(\*) :D

Permalänk: https://www.webforum.nu/p/716091

## #7 — LarsG, 2002-07-09T22:38Z

Det du skall göra är att kontrollera att alla numeriska värden som matas in av en användare bara innehåller giltiga tecken.

Permalänk: https://www.webforum.nu/p/716095

## #8 — spango, 2002-07-09T22:39Z

Nej, det skulle inte hjälpa. I sådana fall skulle du säga "SELECT *(fälten)* FROM Forums_forum WHERE intCatagoryId = '".addslashes($id)."' ORDER BY strForumName ASC". Problemet du syftar på är att man kan köra egna SQL-strängar om man är elak, det har inget med PHP-koden att göra, men jag skulle nog rekommendera att casta till int i stället. Sen har du lite onödiga paranteser som borde bort också.

```php
$id = (int) $id;
$strSQL = "SELECT IntForumId, intCatagoryId, strForumUse, strForumName, intForumLedareMemberId ".
"FROM Forums_forum WHERE intCatagoryId = $id ORDER BY strForumName ASC";
```

Dessutom är jag av den åsikten att ungersk notation är ett verk av Beelzebub själv, men det är ju bara min åsikt :stud

Permalänk: https://www.webforum.nu/p/716097

## #9 — LAMP, 2002-07-09T22:44Z

Okey, två följdfrågor:

1) Hur kollar jag om det är giltiga tecken? I ASP finns ju funktionen IsNumeric(), finns det liknande i PHP?

2) Hur får jag ut resultetet från count(\*) på ett smidigt sätt utan att använda count(\*) as intAntal. I ASP kan man ju använda RS(0). Hur gör man det i PHP?

Permalänk: https://www.webforum.nu/p/716105

## #10 — LAMP, 2002-07-09T22:48Z

> **spango skrev:**
>
> Dessutom är jag av den åsikten att ungersk notation är ett verk av Beelzebub själv, men det är ju bara min åsikt :stud

Tack för dina ypperliga förslag, men ursäkta, jag älskar  :f ungersk notation och har svårt att ta död på min lilla darling. :D

Hur tycker du man ska skriva namn på variabel, tabell, metod, function etc ?

Permalänk: https://www.webforum.nu/p/716110

## #11 — SPiN, 2002-07-09T22:49Z

1\. is_numeric();

2\.

```
$mysqlResult = mysql_query( "SELECT COUNT(*) FROM TABLE" );
$antal = mysql_result( $mysqlResul, 0 );
```

Permalänk: https://www.webforum.nu/p/716111

## #12 — spango, 2002-07-09T22:59Z

> **LAMP skrev:**
>
> Hur tycker du man ska skriva namn på variabel, tabell, metod, function etc ?

Efter vad de gör och är, inte vad de består av. Exempelvis $strSql &rArr; $sql, intForumId &rArr; forumId, strForumName &rArr; forumName, dteDate &rArr; postingDate eller writtenOn.

Permalänk: https://www.webforum.nu/p/716114

## #13 — LAMP, 2002-07-09T23:09Z

Nu är jag kanske ute på hal is, men jag vill minnas att (jag läst i någon bok att) PHP kör funktionen addslashes() på alla variabler automagiskt?

Permalänk: https://www.webforum.nu/p/716120

## #14 — LAMP, 2002-07-09T23:15Z

Bör man rent av göra som man alltid gör i ASP när man tar emot okänd data som ska behandlas av SQL-frågor:

```
$escaped_string = ereg_replace("'","''",$string_with_single_quotes);
```

Permalänk: https://www.webforum.nu/p/716126

## #15 — Mungo, 2002-07-10T12:04Z

Och jag skulle vilja veta vad UNGERSK NOTATION är? :)

Permalänk: https://www.webforum.nu/p/719258

## #16 — LAMP, 2002-07-10T12:49Z

det är ett sätt att döpa variabler som anger vilken typ av variabel det är. Ex

$strName - string
$intUserId - integer
$dteDate - datum

Finns en hel lista här:
<http://support.microsoft.com/default.aspx?scid=kb;EN-US;q173738>

Permalänk: https://www.webforum.nu/p/719299

## #17 — SPiN, 2002-07-10T12:54Z

> Nu är jag kanske ute på hal is, men jag vill minnas att (jag läst i någon bok att) PHP kör funktionen addslashes() på alla variabler automagiskt?

Japp, det gör den. Men det kan man stänga av. :)

```
set_magic_quotes_runtime( 0 ); // Av
set_magic_quotes_runtime( 1 ); // På
```

> Bör man rent av göra som man alltid gör i ASP när man tar emot okänd data som ska behandlas av SQL-frågor:

Ja, du bör alltid replace:a skumma tecken. Jag brukar alltid köra htmlentities(), för att få HTML-entiteter istället för dubbla ''. Ex:

```
$str = htmlentities( $str );
```

> Och jag skulle vilja veta vad UNGERSK NOTATION är?

Det är när du har med typen av variabeln innan namnet:

```
$dteDatum = date( "Y-m-d" );
$dteTime = time();
$strLand = $_GET[ 'land' ];
// osv...
```

Permalänk: https://www.webforum.nu/p/719302

## #18 — LAMP, 2002-07-10T13:01Z

> Japp, det gör den. Men det kan man stänga av.  
> 
> set_magic_quotes_runtime( 0 ); // Av
> set_magic_quotes_runtime( 1 ); // På

Gör man det längst upp på sidan, eller gör man det i PHP inställningsfil?

Permalänk: https://www.webforum.nu/p/719309

## #19 — SPiN, 2002-07-10T13:09Z

Du kan göra det i PHP.ini, men då ser det inte ut så där. :)

Det där var exempelkod på hur du gör, och förslagsvis gör du det högst upp på dina sidor. :)

Permalänk: https://www.webforum.nu/p/719318

## #20 — LAMP, 2002-07-10T13:22Z

Tack!

Permalänk: https://www.webforum.nu/p/719327

---

Tråden på webben: https://www.webforum.nu/amne/php/47569-effektivisering-och-konstruktiv-kritik
