Avatar billede denniswiencken Nybegynder
04. april 2010 - 20:37 Der er 30 kommentarer og
3 løsninger

Søge funktion med flere felter

Okay er ret sikker på der er spurgt om det før men har ledt siden i eftermiddags og synes ikke jeg har kunnet finde et tilfredsstillende svar så here goes:

Jeg skal lave en søge funktion har brugeren skal indtaste 2 ting

Lokalenr:
Uge:

Hvor efter den skal søge i min tabel "Lektioner" og finde de lektioner hvor Lokalenr (LokaleID) og Uge stemmer over ens med søge kriterierne,

Altså søger du på Lokale 51 og Uge 14 skal den komme frem med det data hvor feltet LokaleID er lig med 51 og feltet Uge er lig med 14,

Håber i vil hjælpe :)
Avatar billede The_Buzz Novice
04. april 2010 - 21:00 #1
select * from lektioner where LokaleID is like %%searchfield%% or Uge is like %%searchfield2%%
Avatar billede The_Buzz Novice
04. april 2010 - 21:01 #2
Ovenstående er wildcard søgninger...
Avatar billede The_Buzz Novice
04. april 2010 - 21:03 #3
Ellers er det :
select * from lektioner where LokaleID = $searchfield and Uge = $searchfield2

Hvis du skal have total match mellem felterne

Og
$searchfield = $_POST['lokalenr'];
$searchfield2 = $_POST['uge'];
04. april 2010 - 21:04 #4
Hvordan ved du hvilket lokalenr og ugenummer brugeren har valgt?  Har du en php side hvor du for eksempel gemmer brugerens valg i variabler saasom $lokalenr og $ugenr?  Og soeger du php kode der kan udtraekke oplysningerne?  Hvis din tabel Lektioner svarer til forslaget i http://www.eksperten.dk/spm/906121 saa vil jeg foreslaa noget i den henretning:

$result = mysql_query("SELECT * FROM Lokaler WHERE LokaleID = " . $lokalenr . "AND Uge = " . $ugenr );
while($row = mysql_fetch_array($result))
  echo "LokaleID: " . $row['LokaleID'] . " - Nr: " .$row['Nr'] . " - Dag: " . $row['Dag'] . " - Uge: " . $row['Uge'] . " - Elever: " . $row['Elever'] ."<br/>";
04. april 2010 - 21:06 #5
Hovsa, jeg ser nu at mens jeg var igang med at skrive svaret har TheBuzz skudt tre indlaeg af.
Avatar billede denniswiencken Nybegynder
04. april 2010 - 21:06 #6
Bruger en form på en side som smider det videre
Avatar billede denniswiencken Nybegynder
04. april 2010 - 21:07 #7
og forresten, tabellen er magen til det forslag da det er mit spørgsmål :)
04. april 2010 - 21:14 #8
denniswiencken, jeg gaar ud fra at indlaeg #6 og 7 var reaktioner paa mit indlaeg.  Men var mit indlaeg et brugbart svar paa dit spoergsmaal eller har jeg misforstaaet problemet?  Det er saadan en reaktion der er nyttig nu.
Avatar billede denniswiencken Nybegynder
04. april 2010 - 21:25 #9
Det så ikke ud til at virke, er ikke så pro men her er mine filer:

sog_skema.php:

<?php
include("menu.php");
?>
<html>
<head>
<title> Søg Skema</title>
</head>
<body>
<form action="search.php" method="post">
Lokale: <input type="text" name="lokalenr">
Uge: <input type="text" name="ugenr">
<br /><br />
<input type="submit" value="SØG" name="submit">
</form>
</body>
</html>


search.php:
<?php
include("menu.php");
mysql_connect ("localhost", "root", "") or die ('Error: ' . mysql_error());
mysql_select_db ("HTX");

$result = mysql_query("SELECT * FROM Lokaler WHERE LokaleID = " . $lokalenr . "AND Uge = " . $ugenr );
while($row = mysql_fetch_array($result))
  echo "LokaleID: " . $row['LokaleID'] . " - Nr: " .$row['Nr'] . " - Dag: " . $row['Dag'] . " - Uge: " . $row['Uge'] . " - Elever: " . $row['Elever'] ."<br/>";


?>

fejlkode:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\search.php on line 7
04. april 2010 - 21:42 #10
Saa den gode nyhed er at jeg stort set gaettede rigtigt, du faar de to soegekriteria i php variable fra en html form. 

Den daarlige nyhed er saa at du faar fejlmelding.  Jeg vil gaette paa at du ikke faar noget output fra din query, muligvis fordi der er en mismatch med tabellen.  Proev med "or die(mysql_error()" og se om det giver en fejlmelding, altsaa:

$result = mysql_query("SELECT * FROM Lokaler WHERE LokaleID = " . $lokalenr . "AND Uge = " . $ugenr ) or die(mysql_error());
Avatar billede denniswiencken Nybegynder
04. april 2010 - 21:54 #11
<?php
include("menu.php");
mysql_connect ("localhost", "root", "") or die ('Error: ' . mysql_error());
mysql_select_db ("HTX");

$result = mysql_query("SELECT * FROM Lokaler WHERE LokaleID = " . $lokalenr . "AND Uge = " . $ugenr ) or die(mysql_error());
  echo "LokaleID: " . $row['LokaleID'] . " - Nr: " .$row['Nr'] . " - Dag: " . $row['Dag'] . " - Uge: " . $row['Uge'] . " - Elever: " . $row['Elever'] ."<br/>";


?>



You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND Uge =' at line 1
04. april 2010 - 21:58 #12
Jeg taenkte nok at der var et problem med tabellen.  Kan du give CREATE TABLE scriptet eller specificere precist hvilke kolonner der er med navne og datatyper?
Avatar billede denniswiencken Nybegynder
04. april 2010 - 22:00 #13
min setup.php

<?php

mysql_connect("localhost", "root", "") or die(mysql_error());



$result = mysql_query($query);

mysql_select_db('htx') or die('Cannot select database');

$query1 = 'CREATE TABLE lokaler( '.
        'id INT NOT NULL AUTO_INCREMENT, '.
        'placering VARCHAR(20) NOT NULL, '.
        'PRIMARY KEY(id))';

$query2 = 'CREATE TABLE elever( '.
        'id INT NOT NULL AUTO_INCREMENT, '.
        'Fornavn VARCHAR(20) NOT NULL, '.
        'Efternavn VARCHAR(20) NOT NULL, '.
        'Stregkode VARCHAR(20) NOT NULL, '.
        'Klasse VARCHAR(20) NOT NULL, '.
        'Billede VARCHAR(20) NOT NULL, '.
        'Email VARCHAR(20) NOT NULL, '.
        'Telefonnr VARCHAR(20) NOT NULL, '.
        'PRIMARY KEY(id))';

$query3 = 'CREATE TABLE lektion( '.
        'id INT NOT NULL AUTO_INCREMENT, '.
        'LokaleID VARCHAR(20) NOT NULL, '.
        'Nr VARCHAR(20) NOT NULL, '.
        'Dag VARCHAR(20) NOT NULL, '.
        'Uge VARCHAR(20) NOT NULL, '.
        'Elever VARCHAR(20) NOT NULL, '.
        'PRIMARY KEY(id))';

$result = mysql_query($query1);
$result = mysql_query($query2);
$result = mysql_query($query3);
?>
Avatar billede zynzz Praktikant
04. april 2010 - 22:26 #14
Prøv at ændre datatypen til INT... da det jo sikkert er et tal og ikke en streng...
Avatar billede zynzz Praktikant
04. april 2010 - 22:30 #15
Husk også på at du sikkert ikke har sat serveren til GLOBAL variabler... Derfor brug: $_POST['lokalenr'] istedet for: $lokalenr
04. april 2010 - 22:43 #16
Der har vi problemet:  I din tabel lektion er baade LokaleID og Uge defineret som en tekst (VARCHAR) og ikke som et nummer.  Har du allerede en masse vaerdier i tabellen lektion?  I saa fald maa du have, for eksempel, Uge = "12", altsaa en tekst, i stedet for Uge = 12, altsaa et tal.  Men det er tude tosset.  Jeg vil foreslaa at du dropper tabellen ("DROP TABLE lektion") og opretter en ny hvor du laver LokaleID og Uge til INT.  Nu vi er i gang, hvad bruger du feltet Nr til?  Jeg vil gaette paa at det ogsaa burde vaere INT.  Og Dag?  Hvad har du staaende i Elever?  Det burde vaere en reference, en "fremmednoegle", til tabellen elever og derfor ogsaa INT.  Det bliver saaledes til dette:

$query3 = 'CREATE TABLE lektion( '.
        'id INT NOT NULL AUTO_INCREMENT, '.
        'LokaleID INT NOT NULL, '.
        'Nr INT NOT NULL, '.
        'Dag INT NOT NULL, '.
        'Uge INT NOT NULL, '.
        'Elever INT NOT NULL, '.
        'PRIMARY KEY(id))';

Efter denne rettelse burde queryen i #1 virke.

Proev det af og fortael mig hvordan det gaar.  Jeg naar nok ikke mere i aften, men jeg er med igen i morgen tidlig.
04. april 2010 - 22:45 #17
Igen, jeg saa ikke zunzz's indlaeg foer jeg sendte mit #16.  Vi synes stort set at vaere enige.
Avatar billede denniswiencken Nybegynder
04. april 2010 - 23:54 #18
Databasen er nu rettet efter:

$query3 = 'CREATE TABLE lektion( '.
        'id INT NOT NULL AUTO_INCREMENT, '.
        'LokaleID INT NOT NULL, '.
        'Nr INT NOT NULL, '.
        'Dag INT NOT NULL, '.
        'Uge INT NOT NULL, '.
        'Elever INT NOT NULL, '.
        'PRIMARY KEY(id))';

sog_skema.php:
<?php
include("menu.php");
?>
<html>
<head>
<title> Søg Skema</title>
</head>
<body>
<form action="search.php" method="post">
Lokale: <input type="text" name="lokalenr">
Uge: <input type="text" name="ugenr">
<br /><br />
<input type="submit" value="SØG" name="submit">
</form>
</body>
</html>

search.php:
<?php
include("menu.php");
mysql_connect ("localhost", "root", "") or die ('Error: ' . mysql_error());
mysql_select_db ("HTX");

$result = mysql_query("SELECT * FROM Lokaler WHERE LokaleID = " . $_post['lokalenr'] . "AND Uge = " . $_post['ugenr'] ) or die(mysql_error());
  echo "LokaleID: " . $row['LokaleID'] . " - Nr: " .$row['Nr'] . " - Dag: " . $row['Dag'] . " - Uge: " . $row['Uge'] . " - Elever: " . $row['Elever'] ."<br/>";


?>

fejl:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND Uge =' at line 1
Avatar billede denniswiencken Nybegynder
05. april 2010 - 00:08 #19
Hovsa, så lige jeg havde skrevet FROM Lokaler, har nu rettet det til lektion som det skal være, fejlen er dog stadig den samme
Avatar billede showsource Seniormester
05. april 2010 - 04:25 #20
Du skal ha' mellemrum før AND
Og det er $_POST og IKKE $_post

$sql = "SELECT * FROM Lokaler WHERE LokaleID = ".(int)$_POST["lokalenr"]." AND Uge = ".(int)$_POST["ugenr"];

$result = mysql_query($sql) or die(mysql_error());

Og brug altid gerne enten " eller ' til php vars.
Så er du sikker på ikke at blive "forvirret"

I $sql er POST sat til at være et tal (int)
05. april 2010 - 06:11 #21
God morgen igen.  Jeg er enig med showsource.  Ved faelles hjaelp skulle vi saa gerne have naermet os resultatet.
Avatar billede denniswiencken Nybegynder
05. april 2010 - 10:37 #22
Nå, vi nærmer os, så har jeg ændret det og der kommer ingen fejl, tilgengæld heller ikke noget output
05. april 2010 - 10:58 #23
Det er haardnaekket.  Jeg gaar ud fra at du heller ikke faar nogen fejlmelding fra "..or die(mysql_error()).

Det var maaske et forsoeg vaerd at se hvad der staar i de to variable.  Proev at echo dem som vist nedenfor og se hvad der staar og se efter at du har disse vaerdier i din tabel.

search.php:
<?php
include("menu.php");
echo $_POST['lokalenr'] . " - " .$_POST['ugenr'] . "<br/>";
mysql_connect .......o.s.v.
Avatar billede denniswiencken Nybegynder
05. april 2010 - 11:00 #24
51 - 14

De to tal er rigtige
Avatar billede showsource Seniormester
05. april 2010 - 11:27 #25
Du kan tjekke antal rows som blev fundet med mysql_num_rows($result)
05. april 2010 - 11:28 #26
Hov - jeg ser at i den kode du viser i #18 mangler denne saetning:

"while($row = mysql_fetch_array($result))"

Hvis du ikke har denne saetning med faar du ikke nogen $row['noget som helst'] at echoe.

Proev at gaa tilbage til #9, ret fejlene som i efterfoelgende indlaeg, men behold while($row = mysql_fetch_array($result))
og proev saa igen.

Jeg staar og skal afsted, er tilbage omkring klokken 1400 og er spaendt paa din tilbagemelding.
Avatar billede denniswiencken Nybegynder
05. april 2010 - 11:37 #27
woop woop det virker :D, post svar
05. april 2010 - 11:45 #28
Det var super. (Jeg naaede ikke at smutte, det goer jeg nu.)  Her er et svar fra mig.  (Der var to andre medlemmer der efter min mening leverede afgoerenden indlaeg, en der rettede min fejl hvor der ingen mellemrum var foer AND og en der kikkede paa $_POST[''] som jeg ikke havde taenkt paa da jeg koncentrerede mig om selve sql saetningen.)
Avatar billede denniswiencken Nybegynder
05. april 2010 - 11:56 #29
så deler vi den i 3, i andre post :)
Avatar billede zynzz Praktikant
05. april 2010 - 12:09 #30
Her er et svar så...
Avatar billede denniswiencken Nybegynder
05. april 2010 - 14:13 #31
så mangler vi sidste mand :)
Avatar billede The_Buzz Novice
05. april 2010 - 15:15 #32
Er jeg sidste mand?
Avatar billede showsource Seniormester
06. april 2010 - 07:27 #33
The_Buzz -> Har du prøvet at køre denne:
select * from lektioner where LokaleID is like %%searchfield%% or Uge is like %%searchfield2%%

Mangler du ikke nogle bogstaver i linket under dit brugernavn ?
www.lottostatistik.dk :O)
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