Avatar billede hoejgaard Juniormester
16. august 2008 - 23:32 Der er 29 kommentarer og
1 løsning

problem med if sætning

hvad er der galt her ?? :
if ($_SESSION['soeger']=='tidligere fer') {........
Avatar billede leif Seniormester
16. august 2008 - 23:36 #1
Der er vel ikke noget galt ?


Hvad skulle være galt med den ?
Avatar billede w13 Novice
16. august 2008 - 23:38 #2
Der er intet galt.
Avatar billede hoejgaard Juniormester
17. august 2008 - 00:01 #3
Jeg har disse sætinger, men de to første if sætninger virker ikke..
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in .........

if ($_SESSION['soeger']=='tidligere fer') {
                  $query = mysql_query("SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%' "); }
                  if ($_SESSION['soeger']=='kommende fer') {
                  $query = mysql_query("SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%' "); }

                  if ($_SESSION['soeger']=='') {
                  $query = mysql_query("SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%'"); }

       
                   
                 
                  $taeller=0;
                  while ($row = mysql_fetch_array($query)) { $taeller++; }
Avatar billede w13 Novice
17. august 2008 - 00:40 #4
Hvad får du, hvis du bruger:
echo $_SESSION['soeger'];

?
Avatar billede olebole Juniormester
17. august 2008 - 01:01 #5
<ole>

Er MySQL-fejlen mon det største problem? Jeg har i hvertfald umiddelbart ikke fantasi til at forestille mig et mere ineffektivt DB-kald  =)

/mvh
</bole>
Avatar billede victor22 Nybegynder
17. august 2008 - 03:01 #6
mysql_fetch_array(): supplied argument is not a valid MySQL result resource in...

Fortæller at det er ugyldigt argurment.. og som jeg læser det er -- at det mangler en Array til sidste.. du kaldet en Tæller frem som du har sat til at være 0 OG SKAL tælle op med tæller ++ -- den argument er vist ugyldigt.. for det skrives :

while($row = mysql_fetch_array($query)
{
echo $row["navn"];
}
} else {
echo "Søgningen fandt ingenting!";
}
Avatar billede victor22 Nybegynder
17. august 2008 - 03:11 #7
Jeg kom på en anden ide..

Hvis du sætter den stump kode i linjen i if sætningen kan man få vist hvor det opstå fejlen.. Altså du sætter den lille stump kode - efter den første if sætningen -- for at se hvis det er der hvor der gå galt.. If -- Or die og viser dig så den fejl..

or die(mysql_error());
Avatar billede victor22 Nybegynder
17. august 2008 - 03:34 #8
DEN BEDSKED kommer også når det er ikke forbindelse med databasen.
Så skal db_connection se sådan her ud ikke??

<?
mysql_connect("Host", "XXXXXXX", "12345 - kode");
mysql_select_db("dit databasenavn");
?>

Jeg løb nu tør for ideer. :-)
Avatar billede tmi Nybegynder
17. august 2008 - 06:21 #9
Tilføj dette:
echo mysql_error();

Før dette:
$taeller=0;
while ($row = mysql_fetch_array($query)) { $taeller++; }

Så kan du se din SQL fejl (som skaber problemet)
Avatar billede olebole Juniormester
17. august 2008 - 12:20 #10
For en let genkendelig fejlmeddelelse er det somregel en fordel at fejlsøge lige efter stedet, hvor det går galt. F.eks:

if ($_SESSION['soeger']=='tidligere fer') {
    $sql = "SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%' ";
    $query = mysql_query($sql) or die ($sql."<br>\r\n".mysql_error());
}

- men som sagt vil jeg mene, der er langt større problemer med koden. Alene slutningen er rent overkill. I stedet for at bladre resultatet igennem og inkremere en tæller, kan du få samme resultat betydeligt mere effektivt med:
    $tæller = mysql_num_rows($query);

- men selve query'en virker også ekstremt ineffektiv. Er det f.eks. nødvendigt at hente samtlige felter fra begge tabeller? Og er det virkelig nødvendigt med 4 (FIRE...!) dobbelte wildcard-søgninger - hvoraf den ene ovenikøbet bygger på en RegExp?

Som sagt, har jeg svært ved at forestille mig et væsentligt mere ineffektivt kald til en MySQL-DB - og koden får mig til at frygte, du heller ikke har indekseret tabellerne ... men det er selvfølgelig kun et gæt  =)
Avatar billede hoejgaard Juniormester
17. august 2008 - 12:29 #11
ole
nej det er ikke nødvendigt at hente samtlige felter fra begge tabeller....

Hvad mener du med 4 dobbelte wildcard løsninger ???

Hvorfor gætter du på at jeg ikke har indekseret tabellerne ??

Jeg må lige kigge på jeres forslag til fejlsøgning.
Avatar billede olebole Juniormester
17. august 2008 - 12:36 #12
1) så bør du ikke kalde med "medlemmer.*, fer.*", men specifisere de ønskede felter i stedet for at bruge asteriks (*)

2) du bruger fire gange LIKE med et wildcard (%) i hver ende af det søgte ord

3) da koden savner effektivitet på alle hylder, er det vel en nærliggende tanke  =)
Avatar billede victor22 Nybegynder
17. august 2008 - 14:38 #13
I din sidste linje skal du ændre (Tæller) og angive Arrays

den linje er dødelig!

$taeller=0;
                  while ($row = mysql_fetch_array($query)) { $taeller++; }

I stedet for skal du ændre den til
while($row = mysql_fetch_array($query)
{
echo $row[" "];
}
} else {
echo "Søgning bla bla!";

det er nok lettere at skrive koden om igen !! :-)
Avatar billede olebole Juniormester
17. august 2008 - 15:54 #14
victor22 >> kan du elaborere lidt på, hvad du finder 'dødeligt' i de to linjer?

Jeg ville også gerne høre, hvad du mener, han skulle bruge din ændring til? Hvad tror du selv, den kan/gør?  =)
Avatar billede olebole Juniormester
17. august 2008 - 16:00 #15
I de to linjer sætter han en tæller til 0 - og løber derefter recordset'et igennem, mens han for række tæller tælleren én op. Det er der absolut intet 'dødeligt' i!
Som sagt kan det dog gøres nemmere med:
    $taeller = mysql_num_rows($sql);

Dit eget ændringsforslag er vist helt ude i hampen! Jeg har i hvertfald aldrig hørt om en 'while/else ting' i PHP ... har du?  ;o)
Avatar billede hoejgaard Juniormester
17. august 2008 - 17:59 #16
ole
ved godt koden nok ikke er optimeret helt...
Men det skulle jo virke uanset ,
og kan ikke se hvorfor ,mit ikke skulle virke.. det virker som sagt når : $_SESSION['soeger']==''

men ikke ved de 2 andre tilfælde...
Avatar billede victor22 Nybegynder
17. august 2008 - 18:13 #17
Ok Olebole :-) Har du ikke hørt While / else?? :-) Koder hører man jo ikke om -- man læser dem!

hoejgaard - jeg håber du få det afklaret. Jeg kom blot med de betragtninger jeg mener kan undersøges -- og som Olebole mener er ude i rampen.. som eksempel nævner jeg i starten efter hans kritik uden mening - at du kunne bruge en check :or die(mysql_error()); så du kan få en præcisering af fejlen i din IF sætningen.
Så vil jeg kigge nærmere på Array sagde jeg i min første kommentar og connections.
OLEBOLe er god til at kritisere alle forslag men han fremkommer ikke selv med noget særlige konstruktiv andet end at vi andre skal føles som idioter der ikke kan tænke. :-) Olebole har vist nogen private Frustrationer der skal udløses.. jeg er den der er gået!
Ha -- Pøj pøj!
Avatar billede hoejgaard Juniormester
17. august 2008 - 22:49 #18
victor tak for dine forslag, men kan ikke lige gennemskue dem.
Denne virker jo:

  if ($_SESSION['soeger']=='') {
                  $query = mysql_query("SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%'"); }

Så der er jo ikke noget galt med tælleren..
Det er de 2 andre forespørgsler der er problemet...

if ($_SESSION['soeger']=='tidligere fer') {
                  $query = mysql_query("SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%' "); }
                  if ($_SESSION['soeger']=='kommende fer') {
                  $query = mysql_query("SELECT medlemmer.*, fer.* FROM medlemmer, fer WHERE medlemmer.brugernavn = fer.brugernavn && medlemmer.koen LIKE '%$_SESSION[koen]%' && fer.maal LIKE '%$_SESSION[maal]%' && fer.soegerfer LIKE '%$_SESSION[soegerfer]%' && medlemmer.brugernavn LIKE '%".preg_replace("/[_]/","\\\\_",$_SESSION['brugernavn'])."%' "); }
Avatar billede hoejgaard Juniormester
17. august 2008 - 22:53 #19
jeg kommer ikke ind i if sætningen så min
$_SESSION['soeger']=='tidligere fer'
er åbenbart ikke opfyldt....selvom jeg har valgt 'tidligere fer'
Avatar billede hoejgaard Juniormester
17. august 2008 - 23:01 #20
damn det var en skrivefejl..
'tidligere fer' skulle have været 'Tidligere fer'  og
'kommende fer'  skulle have været  'Kommende fer'

Nå læg svar dem af jer der vil have points for jeres hjælp og interesse !
Avatar billede victor22 Nybegynder
18. august 2008 - 02:07 #21
Hi :-) Hoejgaard - Jeg synes at det er dig den der skal give sig selv Points. Tænkt at tidligere skulle skrives med stort T. Det er da herligt at du fik det til at virke!
Avatar billede olebole Juniormester
18. august 2008 - 23:57 #22
victor22 >> "Koder hører man jo ikke om -- man læser dem!" >> Så undrer det mig, du ikke var i stand til at læse hoejgaards kode - og ligefrem kaldte den dødelig.

Derudover undrer det mig også, hvad det mere præcist er i mit forslag til kode, du ikke finder konstruktivt?

Til sidst må jeg korrigere dig lidt: Jeg kritiserer absolut ikke alle forslag ... kun de, der er grund til at kritisere  =)
Avatar billede hoejgaard Juniormester
19. august 2008 - 12:25 #23
ole
du skriver :
2) du bruger fire gange LIKE med et wildcard (%) i hver ende af det søgte ord

Hvordan skal jeg dog undgå det, når jeg vil søge i de 4 felter..??
Avatar billede olebole Juniormester
26. august 2008 - 23:52 #24
Måske, du skal undlade at søge på de fire felter - det er ikke altid godt at gøre det, man gerne ville.

Jeg kender ikke din applikation i enkeltheder, så jeg kan ikke foreslå andre løsninger eller et andet design. Jeg kan kun konstatere, at søgningen er _ekstremt_ ineffektiv, og at de fleste kodere ville være villig til at begå mord for at undgå den søgning  =)
Avatar billede hoejgaard Juniormester
08. september 2008 - 11:01 #25
læg et svar, dem der vil ha points !
Avatar billede hoejgaard Juniormester
23. september 2008 - 15:04 #26
ingen der vil ha points ???
Avatar billede olebole Juniormester
23. september 2008 - 15:18 #27
Vores opgave er at forsøge at løse dine kodemæssige problemer. Din opgave i projektet er derefter at vælge én eller flere, der bør have points. Hvem synes _du_, skal have points?  =)
Avatar billede hoejgaard Juniormester
14. januar 2009 - 17:54 #28
olebole du får pointsne
Avatar billede hoejgaard Juniormester
26. januar 2009 - 11:54 #29
olebole læg et svar :-)
Avatar billede hoejgaard Juniormester
15. februar 2009 - 14:31 #30
okay lukker så..
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