Avatar billede el_gnu Nybegynder
27. september 2000 - 21:33 Der er 24 kommentarer og
1 løsning

Problem med MySQL

Et spærgsmål fra en newbie php\'er

I min quest for at blive PHP programmør har jeg sat mig for at lave en adressebog(originalt ik\').

Jeg har foreløbigt lavet den kode:

$foerste = true;
mysql_connect(\"host\",\"bruger\",\"password\"); //Tilslut MySQL
mysql_select_db(\"espendk\"); //Vælg db
$q = \"SELECT * FROM adresser WHERE \";
if ($HTTP_POST_VARS[\"fornavn\"]) {
    $q += \"fornavn LIKE \'\" . $HTTP_POST_VARS[\"fornavn\"] . \"%\'\";
    $foerste = false;
}
if ($HTTP_POST_VARS[\"efternavn\"]) {
    if ($foerste) {
        $q += \"efternavn LIKE \'\" . $HTTP_POST_VARS[\"efternavn\"] . \"%\'\";
        $foerste = false;
    }
    else
        $q += \" AND efternavn LIKE \'\" . $HTTP_POST_VARS[\"efternavn\"] . \"%\'\";
}
if ($HTTP_POST_VARS[\"mellemnavn\"]) {
    if ($foerste) {
        $q += \"mellemnavn LIKE \'\" . $HTTP_POST_VARS[\"mellemnavn\"] . \"%\'\";
        $foerste = false;
    }
    else
        $q += \" AND mellemnavn LIKE \'\" . $HTTP_POST_VARS[\"mellemnavn\"] . \"%\'\";
}
if ($HTTP_POST_VARS[\"email\"]) {
    if ($foerste) {
        $q += \"email LIKE \'\" . $HTTP_POST_VARS[\"email\"] . \"%\'\";
        $foerste = false;
    }
    else
        $q += \" AND email LIKE \'\" . $HTTP_POST_VARS[\"email\"] . \"%\'\";
}
if ($HTTP_POST_VARS[\"postnr\"]) {
    if ($foerste) {
        $q += \"postnr LIKE \'\" . $HTTP_POST_VARS[\"postnr\"] . \"%\'\";
        $foerste = false;
    }
    else
        $q += \" AND postnr LIKE \'\" . $HTTP_POST_VARS[\"postnr\"] . \"%\'\";
}
if ($HTTP_POST_VARS[\"adresse\"]) {
    if ($foerste) {
        $q += \"adresse LIKE \'\" . $HTTP_POST_VARS[\"adresse\"] . \"%\'\";
        $foerste = false;
    }
    else
        $q += \" AND adresse LIKE \'\" . $HTTP_POST_VARS[\"adresse\"] . \"%\'\";
}
if ($HTTP_POST_VARS[\"byen\"]) {
    if ($foerste)
        $q += \"byen LIKE \'\" . $HTTP_POST_VARS[\"byen\"] . \"%\'\";
    else
        $q += \" AND byen LIKE \'\" . $HTTP_POST_VARS[\"byen\"] . \"%\'\";
}

$resultat = mysql_query($q);

if ($row = mysql_fetch_array($resultat)) {

do {
  print $row[\"fornavn\"];
  print (\" \");
  print $row[\"efternavn\"];
  print (\"<p>\");
} while($row = mysql_fetch_array($resultat));

} else {print \"Der var desværre ingen der matchede denne søgning!\";}

Desværre giver den denne meddelelse når jeg udfylder min søgeform og poster den:

Warning: Supplied argument is not a valid MySQL result resource in d:\\home\\espendk\\www\\test\\find.php on line 69
Der var desværre ingen der matchede denne søgning!


Linie nummer to har jeg jo selv skrevet, men linie nummer et undre mig, hvad gør jeg galt???

Pleaze help!!!

(-: el Gnu
Avatar billede erikjacobsen Ekspert
27. september 2000 - 21:38 #1
Det betyder nok, at du har en fejl i din SQL-sætning. Jeg kan ikke se den, men du kan udskrive den,
evt i en HTML-kommentar  <!-- SELECT ... -->  så du kan beholde udskriften mens du leger
videre. Så kan du - eller vi - måske se hvad der er galt.
Avatar billede andreas Nybegynder
27. september 2000 - 21:39 #2
Dette lugter meget af fejl...

1) kan du bruge do i php ?
2) du sluttere en while lykke med ; det kan man da ikke ??????

----

if ($row = mysql_fetch_array($resultat)) {

do {
  print $row[\"fornavn\"];
  print (\" \");
  print $row[\"efternavn\"];
  print (\"<p>\");
} while($row = mysql_fetch_array($resultat));

} else {print \"Der var desværre ingen der matchede denne søgning!\";}
Avatar billede chris18 Nybegynder
27. september 2000 - 21:43 #3
Jeg vil gætte på at det er fordi du mangler et led i din SQL query sætning:
$q = \"SELECT * FROM adresser WHERE \";
Bagefter \"WHERE\" skulle der gerne stå noget.
Hvis du sletter \"WHERE\" så skulle det vist virke (jeg har ikke prøvet det!).

Christian

Avatar billede chris18 Nybegynder
27. september 2000 - 21:46 #4
andreas>>
1) du kan godt bruge do i php
2) Han kan godt afslutte while-løkken med ; når det står på den måde (det gør jeg i hvert tilfælde selv i mine scripts, og det virker fint) :o)
Avatar billede el_gnu Nybegynder
27. september 2000 - 21:48 #5
erikjacobsen => jeg siger echo $q er outputtet:

0

Det burde være en streng noget lignende:

SELECT * FROM adresser WHERE email LIKE \'eksperten@espen.dk\'
Avatar billede el_gnu Nybegynder
27. september 2000 - 21:50 #6
chris => WHERE er indsat da de efterfølgende tests gerne skulle tilføje noget til min query. Det bliver testet på afsender siden at mindst en af disse test vil returnere true.
Avatar billede erikjacobsen Ekspert
27. september 2000 - 21:58 #7
Nåh ja, alle steder du har

  $q += \"....

skal du have

  $q .= \"....

for det er tekstkonkatenering i PHP. += er jo aritmetisk addition... heh
Avatar billede el_gnu Nybegynder
27. september 2000 - 21:58 #8
Har vist fundet en af fejlene selvom det undrer mig. Hvis jeg udskifter linien:

$q += \"efternavn LIKE \'\" . $HTTP_POST_VARS[\"efternavn\"] . \"%\'\";

med

$q = $q . \"efternavn LIKE \'\" . $HTTP_POST_VARS[\"efternavn\"] . \"%\'\";

så bliver min query ikke 0 men SELECT * FROM adresser WHERE navn LIKE \'Efternavnet%\' men jeg får stadig samme fejlmeddelelse :-(


Avatar billede el_gnu Nybegynder
27. september 2000 - 21:59 #9
erikjacobsen => tjah, den har jeg ikke lige vænnet mig til endnu... men det virker stadig ikke
Avatar billede erikjacobsen Ekspert
27. september 2000 - 22:10 #10
OK, så skal vi til at kigge på den fejlmeddelelse som kommer, for den bliver man klog af:

  if (!($resultat=mysql_query($q))) {
    showerror($error=mysql_errno().\": \".mysql_error().\": \".$sql);
    exit;
  }

Prøv lige det
Avatar billede erikjacobsen Ekspert
27. september 2000 - 22:12 #11
Hov det var klippet fra en stump kode jeg havde liggende. Prøv lige

  if (!($resultat=mysql_query($q))) {
    echo mysql_errno().\": \".mysql_error().\": \".$sql;
    exit;
  }

Den det showerror er så avanceret at den også sender mig en email ,-)
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:15 #12
Den giver ikke nogen respons over hovedet!
Jeg har testet mit query direkte i MySQL og den kom med rigtige rækker så jeg gætter på at fejlen ligger i disse linier:

do {
  print $row[\"fornavn\"];
  print (\" \");
  print $row[\"efternavn\"];
  print (\"<p>\");
} while($row = mysql_fetch_array($resultat));

} else {print \"Der var desværre ingen der matchede denne søgning!\";}
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:15 #13
tester lige nummer to
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:18 #14
Heller ingen respons AT ALL!
Avatar billede erikjacobsen Ekspert
27. september 2000 - 22:23 #15
Hvad mener du med \"ingen respons\" - check lige \"vis kilde\" for en evt. skjult fejlmeddelelse.
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:29 #16
God ide. kilde:

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML>
<HEAD>
<!-- Minus AutoDato -->
    <TITLE>Søge resultat</TITLE>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
</HEAD>
<BODY>

<p>
</BODY>
</HTML>

Det kunne se ud til at do loopet bliver gennemløbet en gang men at der ikke er nogen værdier i arrayet. How come?
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:33 #17
Har fundet fejlen! Det associative array der bliver retuneret af mysql_fetch_array() kræver åbenbart store bogstaver for hvis jeg bruger det så virker det hele fint.

Men mange tak for din hurtige hjælp

(-: el Gnu
Avatar billede erikjacobsen Ekspert
27. september 2000 - 22:33 #18
Jeg ved ikke om  $row[\"fornavn\"]    er case sensitiv, så du måske skulle
skrive  $row[\"Fornavn\"]  hvis det er sådan det står i din tabel. SQL som
sådan er ikke case sensitiv.
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:35 #19
Netop på grund af SQL\'s insensitivitet over for case havde jeg slet ikke overvejet tanken før.
Avatar billede erikjacobsen Ekspert
27. september 2000 - 22:42 #20
Hurra. Vi fik den ;-)  Og jeg lærte også noget i dag!
Avatar billede el_gnu Nybegynder
27. september 2000 - 22:46 #21
Er det muligt? ;-)
Avatar billede jinxed Nybegynder
28. september 2000 - 11:49 #22
bare lige lidt generelt info : )
hvis du bruger php3 eller php4 før(og med) php4.0.2 bør du ikke kun bruge $HTTP_POST_VARS da den kun virker hvis track_vars er slået til(og så er serveren langsommer hvis den er slået til(ikke meget men lidt : ] ))

efter php4.0.2 vil man ikke længere kunne slå track_vars fra.

Jinxed : )
Avatar billede el_gnu Nybegynder
28. september 2000 - 16:42 #23
jeg bruger azero.dk og de siger man skal bruge $HTTP_POST_VARS etc. så det gør jeg :-)
Avatar billede andreas Nybegynder
28. september 2000 - 19:25 #24
el... de siger så mange ting. Er selv hos dem
Avatar billede el_gnu Nybegynder
28. september 2000 - 20:18 #25
tjah, så længe det virker så er jeg glad :-)
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