Avatar billede mibu Nybegynder
21. november 2008 - 11:08 Der er 24 kommentarer og
1 løsning

Søgning på flere felter

Hvordan får jeg dette kald til at kunne søge på flere felter, lige nu kan den kun søge på feltet firmanavn:

$firma      = $_REQUEST["firma"];
$adr        = $_REQUEST["adr"];
$postnr      = $_REQUEST["postnr"];
$bynavn      = $_REQUEST["bynavn"];
$land        = $_REQUEST["land"];
$tlf        = $_REQUEST["tlf"];
$fax        = $_REQUEST["fax"];
               
//Hent indholdet i database
$soeg    = mysql_query("SELECT * FROM `kunder` WHERE firmanavn = '".$firma."'")or die (mysql_error());
                while ($row = mysql_fetch_array($soeg, MYSQL_ASSOC))
{

//Viser forespørgelse
    echo "
Avatar billede fsconsult.dk Nybegynder
21. november 2008 - 11:15 #1
$soeg    = mysql_query("SELECT * FROM `kunder` WHERE firmanavn = '".$firma."' AND adr = '" .$adr."'" )or die (mysql_error());

(tilføj selv de øvrige felter)
Avatar billede Slettet bruger
21. november 2008 - 11:16 #2
Eller OR er måske bedre i dette tilfælde

$soeg    = mysql_query("SELECT * FROM `kunder` WHERE firmanavn = '".$firma."' OR adr = '" .$adr."'" )or die (mysql_error());

Du indsætter flere betingelser, der skal tjekkes ved at indsætte AND eller OR på denne måde.

  // Steeven
Avatar billede mibu Nybegynder
21. november 2008 - 11:16 #3
Der skal kun kunne søges på korrekt stavemåde!
Man skal vel putte et "or" ind et sted, kan bare lige finde ud af hvor.
Avatar billede mibu Nybegynder
21. november 2008 - 11:21 #4
Takker!
begge svar var jo rigtige, men steeven var lige i øjet, så vil han venligst lægge et svar.
Avatar billede Slettet bruger
21. november 2008 - 11:37 #5
Okay, tak.
Hvis man også skal kunne søge på dele af et ord, så skal du bruge LIKE-kommandoen i stedet for et ligmedtegn.

  // Steeven
Avatar billede Slettet bruger
21. november 2008 - 11:40 #6
Læs lidt mere her:
http://www.sql-tutorial.net/SQL-LIKE.asp

hvis det har interesse. Det er lidt mere avanceret søgning du får lavet i så fald.

  // Steeven
Avatar billede mibu Nybegynder
21. november 2008 - 11:43 #7
Der er da vist noget galt! nu henter den alle poster i db'en, også selv om jeg ikke taster noget!
Avatar billede Slettet bruger
21. november 2008 - 12:03 #8
??
Der er ikke umiddelbart nogen fejl at se. Hvordan har du sat det sammen med søgefelter, der skal udfyldes.

Hvis der ikke er indtastet noget, skal der så komme en fejlmeddelelse? Det kan du jo teste ved en simpel IF-kommando (det er vist nok noget i retningen af følgende i PHP):

if($firma=="") {
  echo "Du har ikke indtastet et firmanavn i søgefeltet"
}

  // Steeven
Avatar billede mibu Nybegynder
21. november 2008 - 12:17 #9
if sætter bare "du har ikk..... i bunden, men henter alligevel db indeholdet.
Et lille udsnit af min søgeform (jeg har prøvet med bare et søgefelt, samme resultat)

<table align="center">

<tr>
    <td>Firmanavn</td>
<td><input type="text" size="12" maxlength="50" name="firma"></td>
</tr>

<tr>
    <td>Adresse</td>
<td><input type="text" size="12" maxlength="50" name="adr"></td>
</tr>

<tr>
    <td>Postnr.</td>
<td><input type="text" size="12" maxlength="50" name="postnr"></td>
</tr>

<tr>
    <td>By</td>
<td><input type="text" size="12" maxlength="50" name="bynavn"></td>
</tr>
Avatar billede Slettet bruger
21. november 2008 - 12:25 #10
Hmm... Jeg ved ikke umiddelbart, hvad problemet er. Måske hvis du også kunne vise din PHP-kode, nu hvor du har redigeret lidt i den.

Du kan godt bruge IF-kommandoen, hvis du ønsker det. Se fx her:


$firma      = $_REQUEST["firma"];
$adr        = $_REQUEST["adr"];
$postnr      = $_REQUEST["postnr"];
$bynavn      = $_REQUEST["bynavn"];
$land        = $_REQUEST["land"];
$tlf        = $_REQUEST["tlf"];
$fax        = $_REQUEST["fax"];

if($firma=="") {
  echo "Du har ikke indtastet et firmanavn i søgefeltet"
} else {
//Hent indholdet i database
$soeg    = mysql_query("SELECT * FROM `kunder` WHERE firmanavn = '".$firma."'")or die (mysql_error());
                while ($row = mysql_fetch_array($soeg, MYSQL_ASSOC))
{

//Viser forespørgelse
    echo "
...
}

Så udføres database-forspørgslen KUN, hvis feltet ikke er tomt.


  // Steeven
Avatar billede mibu Nybegynder
21. november 2008 - 12:51 #11
Ok! så skriver den ingen poster hvis søgefeltet er tomt, men med et søgeord, henter den aller poster, også hvis jeg søge på et ord der ikke findes.

Her er hele min php.

<?


                $firma      = $_REQUEST["firma"];
                $adr        = $_REQUEST["adr"];
                $postnr      = $_REQUEST["postnr"];
                $bynavn      = $_REQUEST["bynavn"];
                $land        = $_REQUEST["land"];
                $tlf        = $_REQUEST["tlf"];
                $fax        = $_REQUEST["fax"];
                $e_fornavn  = $_REQUEST["e_fornavn"];
                $e_efternavn = $_REQUEST["e_efternavn"];
                $e_mobil    = $_REQUEST["e_mobil"];
                $e_mail      = $_REQUEST["e_mail"];
                $k_fornavn  = $_REQUEST["k_fornavn"];
                $k_efternavn = $_REQUEST["k_efternavn"];
                $k_mobil    = $_REQUEST["k_mobil"];
                $k_mail      = $_REQUEST["k_mail"];

                if($firma=="") {
  echo "Du har ikke indtastet noget i søgefeltet";
}
  else
{


//Hent indholdet i database
$soeg    = mysql_query("SELECT * FROM `kunder` WHERE firmanavn = '".$firma."' OR adr = '" .$adr."' OR postnr = '" .$postnr."' OR bynavn = '" .$bynavn."' OR land = '" .$land."' OR tlf = '" .$tlf."' OR fax = '" .$fax."' OR -e_fornavn = '" .$e_fornavn."' OR e_efternavn = '" .$e_efternavn."' OR e_mobil = '" .$e_mobil."' OR e_mail = '" .$e_mail."' OR k_fornavn = '" .$k_fornavn."' OR k_efternavn = '" .$k_efternavn."' OR k_mobil = '" .$k_mobil."' OR k_mail = '" .$k_mail."'" )or die (mysql_error());

{
          while ($row = mysql_fetch_array($soeg, MYSQL_ASSOC))
         
         
//Viser forespørgelse
    echo "




<table width='700' border='0' bgcolor='#ffffff'>
<tr>
    <td>

<table width='700' border='0' bgcolor='#FFFFFF'>
<tr>
    <td>
<table align='center'>

<tr>
    <td>Firmanavn</td>
<td><input type='text' size='12' maxlength=50' name='firmanavn' value=".$row["firmanavn"]."></td>
</tr>

<tr>
    <td>Adresse</td>
<td><input type='text' size='12' maxlength='50' name='adr' value=".$row["adr"]."></td>
</tr>

<tr>
    <td>Postnr.</td>
<td><input type='text' size='12' maxlength='50' name='postnr' value=".$row["postnr"]."></td>
</tr>

<tr>
    <td>By</td>
<td><input type='text' size='12' maxlength='50' name='bynavn' value=".$row["bynavn"]."></td>
</tr>

<tr>
    <td>Land</td>
<td><input type='text' size='12' maxlength='50' name='land' value=".$row["land"]."></td>
</tr>

<tr>
    <td width='25'>Telefon</td>
<td><input type='text' size='12' maxlength='' name='tlf' value=".$row["tlf"]."></td>
</tr>

<tr>
    <td>Fax</td>
<td><input type='text' size='12' maxlength='50' name='fax' value=".$row["fax"]."></td>
</tr>
</table>



</td>
    <td>
<table align='center'>
<tr>
    <td>Ejer fornavn</td>
<td><input type='text' size='12' maxlength='50' name='e_fornavn' value=".$row["e_fornavn"]."></td>
</tr>

<tr>
    <td>Ejer efternavn</td>
<td><input type='text' size='12' maxlength='50' name='e_efternavn' value=".$row["e_efternavn"]."></td>
</tr>

<tr>
    <td>Ejer mobil</td>
<td><input type='text' size='12' maxlength='50' name='e_mobil' value=".$row["e_mobil"]."></td>
</tr>

<tr>
    <td>Ejer mail</td>
<td><input type='text' size='12' maxlength='50' name='e_mail' value=".$row["e_mail"]."></td>
</tr>

<tr>
<td>Dok 1&nbsp;</td>
<td bgcolor='#808080'>&nbsp;".$row["dok1"]."</td>
</tr>

<tr>
<td>Dok 2&nbsp;</td>
<td bgcolor='#808080'>&nbsp;".$row["dok2"]."</td>
</tr>

<tr>
<td>Dok 3&nbsp;</td>
<td bgcolor='#808080'>&nbsp;".$row["dok3"]."</td>
</tr>

</table>


</td>
    <td>
<table align='center'>
<tr>
    <td>Kontakt fornavn</td>
<td><input type='text' size='12' maxlength='50' name='k_fornavn' value=".$row["k_fornavn"]."></td>
</tr>

<tr>
    <td>Kontakt efternavn</td>
<td><input type='text' size='12' maxlength='50' name='k_efternavn' value=".$row["k_efternavn"]."></td>
</tr><tr>
    <td>Kontakt mobil</td>
<td><input type='text' size='12' maxlength='50' name='k_mobil' value=".$row["e_mobil"]."></td>
</tr>

<tr>
    <td>Kontakt mail</td>
<td><input type='text' size='12' maxlength='50' name='k_mail' value=".$row["k_mail"]."></td>
</tr>

<tr>
<td>Dok 4&nbsp;</td>
<td bgcolor='#808080'>&nbsp;".$row["dok4"]."</td>
</tr>

<tr>
<td>Dok 5&nbsp;</td>
<td bgcolor='#808080'>&nbsp;".$row["dok5"]."</td>
</tr>

<tr>
<td>Dok 6&nbsp;</td>
<td bgcolor='#808080'>&nbsp;".$row["dok6"]."</td>
</tr>


<tr>
<td></td>
<td></td>
</tr>
</table>

</td>
</tr>
</table>

<table width='700' border='0' bgcolor='#ffffff'>
<tr>
<td align='center'>Noter</textarea>
</td>
</tr>

<tr>
<td align='center'><textarea wrap='physical' rows='6' cols='37' name='noter'>".$row["noter"]."</textarea>
</td>
</tr>
</td>
</tr>

</table>
</td>
</tr>
</table>
<hr width='700'>

  ";

}
}


?>
Avatar billede mibu Nybegynder
21. november 2008 - 12:53 #12
Og min søge form:

<form name='indtast' method='post' action='/DGM/kontakt/kontakt.php?side=svar_soeg'>

<table width="700" border="0" bgcolor="#ffffff">
<tr>
    <td>

<table width="700" border="0" bgcolor="#FFFFFF">
<tr>
    <td>
<table align="center">

<tr>
    <td>Firmanavn</td>
<td><input type="text" size="12" maxlength="50" name="firma"></td>
</tr>

<tr>
    <td>Adresse</td>
<td><input type="text" size="12" maxlength="50" name="adr"></td>
</tr>

<tr>
    <td>Postnr.</td>
<td><input type="text" size="12" maxlength="50" name="postnr"></td>
</tr>

<tr>
    <td>By</td>
<td><input type="text" size="12" maxlength="50" name="bynavn"></td>
</tr>

<tr>
    <td>Land</td>
<td><input type="text" size="12" maxlength="50" name="land"></td>
</tr>

<tr>
    <td width="25">Telefon</td>
<td><input type="text" size="12" maxlength="" name="tlf"></td>
</tr>

<tr>
    <td>Fax</td>
<td><input type="text" size="12" maxlength="50" name="fax"></td>
</tr>
</table>



</td>
    <td>
<table align="center">
<tr>
    <td>Ejer fornavn</td>
<td><input type="text" size="12" maxlength="50" name="e_fornavn"></td>
</tr>

<tr>
    <td>Ejer efternavn</td>
<td><input type="text" size="12" maxlength="50" name="e_efternavn"></td>
</tr>

<tr>
    <td>Ejer mobil</td>
<td><input type="text" size="12" maxlength="50"" name="e_mobil"></td>
</tr>

<tr>
    <td>Ejer mail</td>
<td><input type="text" size="12" maxlength="50" name="e_mail"></td>
</tr>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>


</td>
    <td>
<table align="center">
<tr>
    <td>Kontakt fornavn</td>
<td><input type="text" size="12" maxlength="50" name="k_fornavn"></td>
</tr>

<tr>
    <td>Kontakt efternavn</td>
<td><input type="text" size="12" maxlength="50" name="k_efternavn"></td>
</tr><tr>
    <td>Kontakt mobil</td>
<td><input type="text" size="12" maxlength="50" name="k_mobil"></td>
</tr>

<tr>
    <td>Kontakt mail</td>
<td><input type="text" size="12" maxlength="50" name="k_mail"></td>
</tr>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>


<tr>
    <td></td>
<td></td>
</tr>
</table>

</td>
</tr>
</table>


</td>
</tr>
</table>
<input type="submit" value="Søg" name="send">
<input type="reset" value="Nulstil" name="reset">

</form>
Avatar billede Slettet bruger
21. november 2008 - 13:20 #13
Jeg er ikke selv helt så PHP-kyndig endnu, så dertil har vi brug for nogle PHP-eksperter, hvis det er dér fejlen ligger.
Men i selve SQL'en synes jeg ikke, at jeg kan se nogle problemer.


Men lige et par spørgsmål til denne kodebid...

$soeg    = mysql_query("SELECT * FROM `kunder` WHERE firmanavn = '".$firma."' OR adr = '" .$adr."' OR postnr = '" .$postnr."' OR bynavn = '" .$bynavn."' OR land = '" .$land."' OR tlf = '" .$tlf."' OR fax = '" .$fax."' OR -e_fornavn = '" .$e_fornavn."' OR e_efternavn = '" .$e_efternavn."' OR e_mobil = '" .$e_mobil."' OR e_mail = '" .$e_mail."' OR k_fornavn = '" .$k_fornavn."' OR k_efternavn = '" .$k_efternavn."' OR k_mobil = '" .$k_mobil."' OR k_mail = '" .$k_mail."'" )or die (mysql_error());

- Hvorfor sætter du apostroffer (eller er det accent-tegn) omkring tabelnavnet "kunder"?
- Du har sat en bindestreg foran ordet "e_fornavn". Det er vist en fejl.
- Og så lige et PHP-spørgsmål: Er der ikke problemer i at lave mellemrum hist og pist men ikke alle steder? Fx sætter du tit mellemrum før punktummet, når du skal skrive en variabel, som her:
  ...  k_efternavn = '" .$k_efternavn."  ...
Men ikke altid og kun i den ene side - Men det er måske ligemeget...


  // Steeven
Avatar billede mibu Nybegynder
21. november 2008 - 13:28 #14
Jeg er selv en håbløs amatør, så jeg tjekker lige
Avatar billede mibu Nybegynder
21. november 2008 - 13:35 #15
Jeg har rettet mellemrun, apostroffer og bindesteger, forskellen er ens :-(
men det var da flot set :-)
Avatar billede Slettet bruger
21. november 2008 - 13:43 #16
Men har du stadig apostroffer omkring tabelnavnet "kunder"? Fjern dem, de skal ikke være der.

Ellers kan jeg ikke lige se problemet. Lad os håbe der kommer en barmhjertig PHP-ekspert forbi ;) Jeg programmerer selv i ASP og er kun lige gået i gang med at studere PHP-området...

  // Steeven
Avatar billede mibu Nybegynder
21. november 2008 - 13:57 #17
Jeg har fjernet dem, det gav ingen forskel.

Du får dine point, og tak for hjælpen.
Avatar billede Slettet bruger
21. november 2008 - 15:04 #18
Okay, mange tak for det.

Læg eventuelt et spørgsmål i PHP-kategorien


  // Steeven
Avatar billede arne_v Ekspert
21. november 2008 - 15:12 #19
Apostrofferne er ikke en fejl som saadan. De haelder nemlig fremad.

I MySQL kan man saette `` omkring navne. Det giver muligheder forat bruge nogle navne
som ellers ikke ville kunne bruges.

Det svarer til [] omkring navne i SQLServer og Access.

Jeg kunne dog aldrig finde paa at bruge hverken det ene eller det andet.
Avatar billede sw_red_6 Nybegynder
21. november 2008 - 15:14 #20
Det kunne være fordi der kun bliver tjekket på $firma og derfor kan resten af variablerne være tomme og det betyder at den skal finde alle række med $firma i et felt eller hvis ethvert andet felt er tomt..
Avatar billede arne_v Ekspert
21. november 2008 - 15:15 #21
Jeg tvivler paa at problemet er PHP relateret.

Mit gaet er at alle records har et felt som er '' og at medmindre du udfylder alle
soegefelter, saa vil der altid vaere et match.

Mit forslags vil vaere dynamisk at konstruere SQL, saa den kun indeholder test
paa vaerdie forskellig fra ''.
Avatar billede mibu Nybegynder
21. november 2008 - 21:59 #22
arne v:
kan du skære det ud i pap for mig? please!
Avatar billede mibu Nybegynder
22. november 2008 - 21:12 #23
Jeg fandt selv løsningen, skrev scriptet helt om, jeg kan stadig ikke forstå hvorfor det andet ikke virkede, men mit nye ser sådan her ud.

<?
//Henter forespørgelse
$whereArr = array();
if (isset($_POST['firmanavn']) && trim($_POST['firmanavn']) != "")
{
    $firmanavn = mysql_real_escape_string($_POST['firmanavn']);   
    $whereArr[] = "firmanavn LIKE '%" . $firmanavn . "%' ";
}

if (isset($_POST['adr']) && trim($_POST['adr']) != "")
{
    $adr = mysql_real_escape_string($_POST['adr']);   
    $whereArr[] = "adr LIKE '%" . $adr . "%' ";
}

if (isset($_POST['tlf']) && trim($_POST['tlf']) != "")
{
    $tlf = mysql_real_escape_string($_POST['tlf']);   
    $whereArr[] = "tlf LIKE '%" . $tlf . "%' ";
}

$where = "";
if (count($whereArr)>0)
{
    $where .= "WHERE " . implode(" or ", $whereArr);  // alternativt " and ".

}

$sql = "SELECT * FROM kunder $where";
//echo "DEBUG: " . $sql . "<br>";
$query = mysql_query($sql) or die(mysql_error());


$query = mysql_query("SELECT * FROM kunder $where");
if (mysql_num_rows($query) > 0)
{
    while ($row = mysql_fetch_assoc($query))
    {
         
//Viser forespørgelse
    echo "bla........
Avatar billede arne_v Ekspert
22. november 2008 - 23:58 #24
Du bygger netop SQL'en op dynamisk her.
Avatar billede mibu Nybegynder
23. november 2008 - 14:16 #25
Okay! Så behøver du ikke skære det det i pap alligevel, viste bare ikke det hed sådan.

Takker!
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
Computerworld tilbyder specialiserede kurser i database-management

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