Avatar billede mibu Nybegynder
12. september 2007 - 14:43 Der er 26 kommentarer og
1 løsning

søgeresultat minus 1. id

Hvordan får jeg lavet denne her, så 1. id ikke kan søges/findes?

KODE:
        <?
//db_access
include("_include/database.php");
   

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

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


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

}

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


$query = mysql_query("SELECT * FROM medlem $where");
if (mysql_num_rows($query) > 0)
{
    while ($row = mysql_fetch_assoc($query))
    {
        echo "<center><table border=0 width=300>
        <tr><td>".$row["fornavn"]."&nbsp;".$row["efternavn"]."</td></tr>
        <tr><td>".$row["efternavn"]."</td></tr>
        <tr><td>".$row["adr"]."</td></tr>
        <tr><td>".$row["post"]."&nbsp&nbsp".$row["town"]."</td></tr>
        <tr><td>Telefon&nbsp;".$row["tlf"]."</td>&nbsp:<td>Mobil&nbsp;".$row["mtlf"]."</td></tr>
        <tr><td>Mail&nbsp&nbsp;".$row["mail"]."</td><hr></tr></center>";
    }
}
else
{
    // Udtræk default-resultat:
    $sql = "SELECT * FROM medlem WHERE id=1";
 
    $query = mysql_query("SELECT * FROM medlem $where");

    // Og så koden for at vise oplysningerne her...
    echo "<table border=0 width=300>
        <tr><br><br><td>Der er ingen medlemmer der matcher din søgening.</td></tr></table>";
}

?>

<table bgcolor="#000000" width="700" border="0" align="center">
   
<tr>
    <td>
    <?
Avatar billede nielle Nybegynder
12. september 2007 - 15:10 #1
Sådan?

Prøv at ændre:

$where .= "WHERE " . implode(" or ", $whereArr);  // alternativt " and ".

- til:

$where .= "WHERE id<>1 AND (" . implode(" or ", $whereArr) . ")";  // alternativt " and ".
Avatar billede mibu Nybegynder
12. september 2007 - 16:05 #2
Ok! Det virker ved søgning! Men hvis man søger men blanke felter kommer den alligevel. (hele listen)
Altså efter sidste må "else" skal der også skulle ændres noget (har prøvet)
Enten skal der ikke vise noget vis der ikke indtastes eller også skal id 1 også væk her.
Kan du også løse den?
Avatar billede mibu Nybegynder
12. september 2007 - 16:05 #3
Læs:
Altså efter sidste må "else" der.......

:-)
Avatar billede mibu Nybegynder
12. september 2007 - 16:06 #4
DET EN OMMER!

Altså efter sidste  "else" må der......
Avatar billede michael_stim Ekspert
12. september 2007 - 16:15 #5
Altså, den må aldrig vise post med id = 1?

  $sql = "SELECT * FROM medlem WHERE id<>1";
 
    $query = mysql_query($sql) or die(mysql_error());
Avatar billede mibu Nybegynder
12. september 2007 - 16:35 #6
Tja! det virker ikke.

Min sidste del ser nu sådan hr ud:

{

$where .= "WHERE id<>1 AND (" . implode(" or ", $whereArr) . ")";  // alternativt " and ".
}

    $sql = "SELECT * FROM medlem WHERE id<>1";
 
    $query = mysql_query($sql) or die(mysql_error());


$query = mysql_query("SELECT * FROM medlem $where");
if (mysql_num_rows($query) > 0)
{
    while ($row = mysql_fetch_assoc($query))
    {
        echo "<center><table border=0 width=300>
        <tr><td>".$row["fornavn"]."&nbsp;".$row["efternavn"]."</td></tr>
        <tr><td>".$row["efternavn"]."</td></tr>
        <tr><td>".$row["adr"]."&nbsp;".$row["nr"]."</td></tr>
        <tr><td>".$row["post"]."&nbsp;".$row["town"]."</td></tr>
        <tr><td>Telefon&nbsp;".$row["tlf"]."</td>&nbsp;<td>Mobil&nbsp;".$row["mtlf"]."</td></tr>
        <tr><td>Mail&nbsp&nbsp;".$row["mail"]."</td><hr></tr></center>";
    }
}
else
{
    // Udtræk default-resultat:
    $sql = "SELECT * FROM medlem WHERE id<>1";
 
    $query = mysql_query($sql) or die(mysql_error());
 
    // Og så koden for at vise oplysningerne her...
    echo "<table border=0 width=700 height='100%'>
        <tr><td>Der er ingen medlemmer der matcher din søgening.</td></tr></table>";
}
Avatar billede nielle Nybegynder
12. september 2007 - 17:40 #7
Start din basios SQL sætning på denne måde:

$sql = "SELECT * FROM medlem WHERE id<>1";

Denne bruges ved alle søgninger. Hvis der er nogle ekstra kriterier skal de AND'es i enden af denne efter opskrigten:

$sql = $sql . " AND (" . $ekstraKriterie . ")";

Eller på en lidt mere kompakt form:

$sql .= " AND ($ekstraKriterie)";
Avatar billede mibu Nybegynder
12. september 2007 - 22:42 #8
Den kan jeg ikke greje! Det virker fint hvis man søger på ord indeholdt i id 1, så kommer der ingenting! Med hvis jeg søger blank! så kommer hele listen og her er id 1 med på.
jeg har prøvet at putte - id<>1 - ind flere steder, f.eks.:
$sql = "SELECT * FROM medlem WHERE id<>1 AND (" . $ekstraKriterie . ")";
fejl! fejl! fejl!fejl! fejl! fejl!fejl! fejl! fejl!

Alternativt ville det være ligeså fint, hvis der bare returnerer "Du mangler at skrive søgeord" når man søger med alle tre felter blanke. Men det er nok lidt mere omstændigt, når man samtidig skal kunne søge med bare et felt.

Nuværende kode:

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

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

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

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

$query = mysql_query ("SELECT * FROM medlem $where");
if (mysql_num_rows($query) > 0)
{
    while ($row = mysql_fetch_assoc($query))
    {
      echo "<center><table>
        <tr><td><hr>".$row["fornavn"]."&nbsp;".$row["efternavn"]."</td></tr>
        <tr><td>".$row["adr"]."&nbsp;".$row["nr"]." </td></tr>
        <tr><td>".$row["post"]."&nbsp;".$row["town"]."</td></tr>
        <tr><td>Telefon&nbsp;".$row["tlf"]."&nbsp;&nbsp;&nbsp;Mobil&nbsp;".$row["mtlf"]."</td></tr>
        <tr><td>Mail&nbsp&nbsp;".$row["mail"]."<hr></td></tr></table></center>";
    }
}
else
{
    // Og så koden for at vise oplysningerne her...
    echo "
        Der er ingen medlemm der matcher din søgning.";
}

?>
Avatar billede nielle Nybegynder
13. september 2007 - 06:52 #9
Du har ikke fulgt opskriften jeg gav i 12/09-2007 17:40:42 ?
Avatar billede mibu Nybegynder
13. september 2007 - 15:08 #10
Næ! åbenbart ikke! Men jeg har da prøvet :-)
Mit sidste forsøg, som heller ikke virker, se sådan her ud.

$sql = "SELECT * FROM medlem where id<>1";
$sql = $sql . " AND (" . $where . ")";
$query = mysql_query($sql) or die(mysql_error());

Og giver dette svar:

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 ')' at line 1

Jeg fatter ikke en papskid! :-) Manualen gav intet! Så måske skal jeg bare leve med det som det er!
Avatar billede michael_stim Ekspert
13. september 2007 - 15:12 #11
Man kan ikke leve med noget der ikke fungerer ;o)
Er der ALTID en WHERE klausul?
$sql .= " AND " . $where . "";
Avatar billede mibu Nybegynder
13. september 2007 - 15:20 #12
Ja som du kan se i 12/09-2007 22:42:07 er det $where der henter det der skal søges på, og søger man blanke felter, hentes alt. Jeg ville jo svært gerne have at id 1 altid udelades, som det korrekt gør ved konkret søgning :-)
Avatar billede michael_stim Ekspert
13. september 2007 - 15:26 #13
Tænkte nu mere på denne:
$sql .= " AND " . $where . "";

For hvis der ikke er noget i den, vil den jo fejle.
Avatar billede mibu Nybegynder
13. september 2007 - 15:51 #14
Et eller andet sted har du fat i noget!
Det virker jo når jeg gør sådan:

sql = "SELECT * FROM medlem $where";
//$sql = $sql . " AND (" . $where . ")";
$query = mysql_query($sql) or die(mysql_error());
Avatar billede mibu Nybegynder
13. september 2007 - 15:53 #15
men så tager den bare id 1 med (Det er det jeg måske må leve med :-)
Avatar billede nielle Nybegynder
13. september 2007 - 15:56 #16
Der skal jo altid være en WHERE id<>1 med - denne del skal du derfor ikke putte ind i din $where-variabel; den skal derimod allerede være med i den helt basale SQL som du bygger vidre på.
Avatar billede mibu Nybegynder
13. september 2007 - 16:05 #17
Er det da ikke det jeg gør her ?

$sql = "SELECT * FROM medlem where id<>1";
$sql = $sql . " AND (" . $where . ")";
$query = mysql_query($sql) or die(mysql_error());
Avatar billede michael_stim Ekspert
13. september 2007 - 16:09 #18
I stedet for at eksekvere din forspörgsel kan du udskrive den og se hvad den siger:

$sql = "SELECT * FROM medlem where id<>1";
$sql = $sql . " AND (" . $where . ")";

echo $sql;
//$query = mysql_query($sql) or die(mysql_error());
Avatar billede michael_stim Ekspert
13. september 2007 - 16:10 #19
Jeg vil gätte på at der er 2 WHERE.
Avatar billede mibu Nybegynder
13. september 2007 - 16:13 #20
Den skrev:

SELECT * FROM medlem where id<>1 AND ()
Avatar billede michael_stim Ekspert
13. september 2007 - 16:17 #21
Så er det jo fordi den er tom.
Må ärligt indrömme at jeg ikke ved hvor du vil hen :(

$sql = "SELECT * FROM medlem where id<>1";
//$sql = $sql . " AND (" . $where . ")";

//echo $sql;
$query = mysql_query($sql) or die(mysql_error());

Her tager den alle poster der ikke har en id der er 1.
Avatar billede mibu Nybegynder
13. september 2007 - 16:27 #22
Ved konkret søgnig må den ikke vise id 1 (det virker med - sql = "SELECT * FROM medlem $where";
Ved søgnig uden indtastning = alle tre felter blanke, hentes alle poster incl. id 1
(det er den jeg gerne vil have væk)
Avatar billede nielle Nybegynder
13. september 2007 - 17:21 #23
Som jeg skrev i 12/09-2007 17:40:42 var det kun hvsi der var ekstra kriterier at de skulle AND'es på.

En alternativ løsning kunne dog være at sørge for at $where aldrig var tom. F.eks. kunne du sætte $where til "1 = 1" eller noget i den stil. Så bliver SQL'en nemlig til:

SELECT * FROM medlem where id<>1 AND (1 = 1)

og den vil databasen gerne være med på.
Avatar billede mibu Nybegynder
13. september 2007 - 17:32 #24
Ok Den prøver jeg :-)

Men jeg syntes du skal lægge et svar, Jeg har jo trods alt allerede fået løst noget af problemmet, og da jeg er både stædige og dum! så bliver jeg nok ved til det lykkedes.
Avatar billede nielle Nybegynder
13. september 2007 - 18:56 #25
Jeg har ikke noget imod at vi bliver ved her indtil at du har fået løst det helt.

... men du får da lige et svar :^)
Avatar billede mibu Nybegynder
13. september 2007 - 19:01 #26
Jeg har lige prøvet med dit forslag 1=1 så komme id 1 ganske rigtigt ikke med på listen, men man kan ikke søge på konkret mere - kun blank :-(
Avatar billede mibu Nybegynder
13. september 2007 - 21:00 #27
Okay jeg har fået klaret det på anden måde. Og det næsten bedre for mig.

jeg satte LIMIT 0, 1 "; bag på, det medfører at man ikke kan søge blank, dvs. når man gør det så kommer KUN id 1 (det er admin) det benytter jeg så til at fortælle at man skal indtaste et søgeord, jeg bruger stadig id<>1 så der kan ikke søges på det.
Det løste så et mit andet problem, nemlig at jeg var lidt ked af at man fik en liste så lang som en arm, ved blank søgning.

Takker for hjælpen.
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