webForumDet fria alternativet

Behöver hjälp av CGI-guru

6 svar · 496 visningar · startad av CyberPet

CyberPetMedlem sedan dec. 19996 588 inlägg
#1

Hej vänner,

Jag kan NOLL och intet om CGI och vänder mig därför till er som verkar ha superkoll.

Jag har en drinklista på webben där jag haft en sökfunktion. Tyvärr så har killen som var värd för scriptet haft datorproblem och scriptet är borta för alltid. Det innebär alltså att min finurliga sökning inte längre funkar.

Jag sliter mitt hår av irritation att jag inte stod på mig mer att få skriptet till min egen dator så att jag hade en backup att lägga upp hos min Internetleverantör.

Så... nu efterlyser jag en vänlig själ som skulle kunna göra om det hela med ett bra script som funkar som det tidigare gjorde.

Jag är inte rik så jag kan nog inte betala så mycket, men jag kan alltid göra reklam för dig som gjort scriptet på sidan och länka till dig osv. Det är ändå ganska många besökare varje vecka så det är hyfsad reklam.

Sidan finns på http://www.drinklistan.nu/ (eller som den riktiga adressen: http://www.communique.se/petra/drinkar/).

Sökscriptet har funkat tidigare så att man kan söka på drinknamn, spritsort och glastyp (fast jag behöver inte glas - hellre olika juicer "virke"). Dessutom så har scriptet haft funktionen att man kan fylla i de spritsorter man har hemma (tex vodka, gin och rom) och får då upp de möjliga drinkar som innehåller just dessa sorter och inget annat.

Låter det som en kul utmaning?

Vore jättetacksam om någon kunde hjälpa mig!

------------------
/Petra

RobbanMedlem sedan dec. 19992 555 inlägg
#2

I vilken form lagras drinkarna? I en databas, eller? Har ju betydelse när man skall bedömma tidsåtgång.

Kan tänka mig att hjälpa dig, under förutsättning att jag bedömmer kunna få det klart under morgondagen (sedan kommer jag nämligen inte ha någon tid över under de nästföljande två veckorna).

Har du egen server att lägga scriptet på? Var i så fall?

------------------
Robban < robban@lipogram.com >

CyberPetMedlem sedan dec. 19996 588 inlägg
#3

Hej Robban... min idol!

Jo, just nu är drinklistan inte en databas... hade önskat att det var så, men nu ligger alla drinkar på html-filer.

Som det är nu finns det en massa info-taggar i filerna för att scriptet ska hitta dem... typ detta:

<!-- Drinkstart -->
<TR VALIGN=Top BGCOLOR="#FFE2E2">
<TD COLSPAN=2>
<DRINK TYPE=NAME VALUE="Alabama Slammer">
<DRINK TYPE=SPRIT VALUE="Vodka, Southern Comfort, Amaretto">
<DRINK TYPE=VIRKE VALUE="Apelsinjuice, Grenadine">
<DRINK TYPE=GLAS VALUE="Highball-glas">
<A NAME="V1">A L A B A M A   S L A M M E R</A>
</TD>
</TR>
<TR VALIGN=Top>
<TD WIDTH="50%">
2 cl Vodka<BR>
2 cl Southern Comfort<BR>
2 cl Amaretto<BR>
12 cl Apelsinjuice<BR>
1 skvätt Grenadine
</TD>
<TD>
Highball-glas<BR>
Bygges<BR>
Is
</TD>
</TR>
<!-- Drinkslut -->

Jag tror du fattar bättre än jag, men det ser ganska enkelt ut och det gick enkelt att lägga in de olika typerna.

Scriptets fysiska placering vet jag inte riktigt idag. Antingen måste jag lägga det utanför www.communique.se eller så flirtar jag till mig en plats. Det är trots allt en gammal klasskompis till mig som äger servern och är scriptet stabilt tror jag inte det blir några problem att få ha egna cgi-script.

Du får gärna fortsätta via epost om detta verkar intressant.

Petra

emissionMedlem sedan dec. 19996 721 inlägg
#4

Hör gärna av er om ni behöver hjälp.

RobbanMedlem sedan dec. 19992 555 inlägg
#5

Hör gärna av er om ni behöver hjälp.

Kommentarer och tips på förbättringar (gärna med motivering till varför det är en bättre lösning) är alltid välkommna. Speciellt som man börjar bli trött i skallen och kanske inte ser de självklara lösningarna längre. :)

Detta är vad jag hunnit med hittills (har bara arbetat med själva sökalgoritmen än så länge):

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Perl-kod:<pre>
#!perl -w

# Copyright (C) 2000 Robert Hallgren, Lipogram.
# Färdigt script kommer att släppas som open source
# enligt samma vilkor som Perl självt.

use strict;
use Fcntl;

my $basepath = 'E:/Profiles/robert/Desktop/petra/drinkar/';

my @pages = (
'alkoholfritt.html',
'baler.html',
'champagne.html',
'gin.html',
'kaffe.html',
'konjak.html',
'likor.html',
'lattvin.html',
'rom.html',
'shots.html',
'tequila.html',
'vodka.html',
'whisky.html',
);

# Temporära sökvariabler tills vi fått rutin att ta emot formulärdata

my @SPRIT = ('Vodka');
my @VIRKE = ('*');
my @GLAS = ('*');

print "Content-Type: text/html";

# Loopa igenom alla sidor i @pages
foreach (@pages) {

# Kolla så att sidan ö.h.t. existerar
# Avsluta scriptet om så inte är fallet
die "Runtime error: $!" unless (-e "$basepath$_");

# Öppna sidan för läsning
# Avsluta scriptet om sidan inte gick att öppna
sysopen FILE, "$basepath$_", O_RDONLY or die "Runtime error: $!";

# Loopa igenom alla rader i den öppnade filen
while (<FILE> ) {

\# Leta efter drinkreceptens början
if (/\<!-- \*?drinkstart \*?--\>/i) {

  \# Initiera variabel som används för temporär lagring av recept
  my @drink = ();

  \# Initiera tre variabler som används för att kontrollera ifall
  \# kravet på ingredienser är uppfyllda. Om användaren angett \*
  \# i något fält anses alla krav uppfyllda för den kategorin
  my $sprit = 0;
  $sprit = 1 if $SPRIT\[0\] eq '\*';
  my $virke = 0;
  $virke = 1 if $VIRKE\[0\] eq '\*';
  my $glas = 0;
  $glas = 1 if $GLAS\[0\] eq '\*';

  \# Loopa igenom alla rader i drinkreceptet tills vi stöter på
  \# receptets slut (eller att filen tar slut, vilket som nu kommer
  \# först)
  while (\<FILE\> ) {
    last if (/\<!-- \*?drinkslut \*?--\>/i);
    push @drink, $\_;

    if (/\<drink +?type \*?= \*?\\"\*? \*?name \*?\\"\*? +?value \*?= \*?\\"(.\*?)\\"/i) {

# NAMNSÖK IN HÄR!!!
}

    \# Kontrollera så att kraven när det gäller spritingredienser är
    \# uppfyllda
    if (!$sprit &&
     (/\<drink +?type \*?= \*?\\"\*? \*?sprit \*?\\"\*? +?value \*?= \*?\\"(.\*?)\\"/i)) {
       my @ingredienser = split /, ?/, $1;
       my $ingrediens;
       $sprit = 1;	   
       foreach $ingrediens (@ingredienser) {
         $sprit = 0 unless grep /$ingrediens/i, @SPRIT;
         last if $sprit == 0;	     
       }
    }

    \# Kontrollera så att kraven när det gäller virkesingredienser är
    \# uppfyllda
    if (!$virke &&
     (/\<drink +?type \*?= \*?\\"\*? \*?virke \*?\\"\*? +?value \*?= \*?\\"(.\*?)\\"/i)) {
       my @ingredienser = split /, ?/, $1;
       my $ingrediens;
       $virke = 1;
       foreach $ingrediens (@ingredienser) {
         $virke = 0 unless grep /$ingrediens/i, @VIRKE;
         last if $virke == 0;	     
       }
    }

    \# Kontrollera så att kraven när det gäller glasinnehav är uppfyllda
    if (!$glas &&
     (/\<drink +?type \*?= \*?\\"\*? \*?glas \*?\\"\*? +?value \*?= \*?\\"(.\*?)\\"/i)) {
       my @ingredienser = split /, ?/, $1;
       my $ingrediens;
       $glas = 1;
       foreach $ingrediens (@ingredienser) {
         $glas = 0 unless grep /$ingrediens/i, @GLAS;	   
         last if $glas == 0;
       }
    }
  }

  \# Om samtliga krav är uppfyllda skriver vi ut receptet som temporärt
  \# sparats i @drink (annars kastas innehållet bort)
  if ($sprit && $virke && $glas) {
    local $, = "\\n";
    print @drink;
  }
}

}

# Stäng filen
close FILE;
}

CyberPetMedlem sedan dec. 19996 588 inlägg
#6

Mama Mia, han talar med hundar... öh... jag menar... jösses!

Jag förstod dina kommentarer i scriptet, men resten är då rena grekiskan! :)

Glöm inte att jag kommer att lägga till en ny kategori, Öldrinkar. (förslagsvis ol.html).

Jag är mäkta impad! :) :e :)

------------------
/Petra

demo
#7

Tyvärr, Robban!

Några förslag på förbättringar kan du nog inte räkna med från mig.

Tycker visserligen att jag har någorlunda bra kunskaper själv, men du står nog ett par klasser högre :-)

//Demo

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)