Avatar billede optur Novice
26. april 2011 - 12:49 Der er 8 kommentarer og
1 løsning

søge funktion

jeg sidder og roder med en søge funktion, men kan ikke få den til at virke.

Under min select har jeg skrevet alle de feltnavne som skal søges på, men jeg kan ikke få noget udtræk.

Jeg har kontrolleret at min $select får en værdi, og jeg har også prøvet at udskrive min $sql som også får de værdier den skal, men den vil ikke hente data'en

Nogen der har nogle forslag til hvad jeg gør forkert og hvad jeg eventuelt kan gøre bedre


  <body>
    <h3>Search  Contacts Details</h3>
    <p>You  may search either by first or last name</p>
    <form  method="post" action="search.php?go"  id="searchform">
      <select name="select">
          <option value="kundenavn">kundenavn</option>
        <option value="telefonnummer">telefonnummer</option>
        <option value="emailadresse">emailadresse</option>
        <option value="ordrenummer">ordrenummer</option>
        <option value="fragtkvit">fragtkvit</option>
        <option value="omfang">omfang</option>
        <option value="emballage">emballage</option>
        <option value="foreslag">foreslag</option>
        <option value="supplier">supplier</option>
        <option value="distributor">distributor</option>
        <option value="ansvarlig">ansvarlig</option>
        <option value="status">status</option>
      </select>
      <input  type="text" name="name">
      <input  type="submit" name="submit" value="Search">
    </form>
  </body>
</html>

<?php
  if(isset($_POST['submit'])){
  if(isset($_GET['go'])){
  if(preg_match("/^[  a-zA-Z]+/", $_POST['name'])){
  $name=$_POST['name'];
  $select=$_POST['select'];
 
    include('db_con.php');
  //-query  the database table
  $sql="SELECT * FROM tsf_info WHERE " . $select . " LIKE " . $name .  "";
  echo $sql;
  //-run  the query against the mysql query function
  $result=mysql_query($sql);
  //echo $select;
  //-create  while loop and loop through result set
  while($row=mysql_fetch_array($result)){
      $id = $row['id'];

  //-display the result of the array
  echo "<ul>\n";
  echo "<li>" . $id ."</li>\n";
  echo "</ul>";
  }
  }
  else{
  echo  "<p>Please enter a search query</p>";
  }
  }
  }
 
?>
Avatar billede jakobdo Ekspert
26. april 2011 - 13:02 #1
Prøv at start med at smid en:
$result=mysql_query($sql) or die(mysql_error());
Avatar billede jakobdo Ekspert
26. april 2011 - 13:05 #2
Og er der en årsag til du har denne:

if(isset($_POST['submit'])){
  if(isset($_GET['go'])){
  if(preg_match("/^[  a-zA-Z]+/", $_POST['name'])){

Kunne du ikke nøjes med:

if(isset($_POST['submit']) && preg_match("/^[  a-zA-Z]+/", $_POST['name'])){

Din $_GET['go'] er vel overflødig?
Avatar billede optur Novice
26. april 2011 - 13:25 #3
det er en toturial jeg har fundet på nettet jeg har ændret i =)

men mange tak for forslaget, jeg prøver det lige.
Avatar billede optur Novice
26. april 2011 - 13:28 #4
Jeg får stadig intet ud, og jeg har kontrolleret at jeg søger på noget som står i databasen.

ud fra min echo $sql; får jeg

SELECT * FROM tsf_info WHERE '%kundenavn%' LIKE '%test%'
Avatar billede optur Novice
26. april 2011 - 13:42 #5
mit problem ligger i at hente data'en ud fra min søgning.
Avatar billede optur Novice
26. april 2011 - 13:45 #6
når jeg laver en echo på min $result får jeg følgende

Resource id #4

lige meget hvad jeg skriver ind.
Avatar billede danco Nybegynder
26. april 2011 - 14:03 #7
Hvis du nu viste os med hvilken kode du får det resultat ud ?

Har du prøvet at echo din SQL streng og kontrolleret at den er opbygget som du vil have den ?
Avatar billede optur Novice
26. april 2011 - 14:29 #8
Jeg har selv fundet en løsning.

jeg har brugt følgende formular:

<form action="search.php" method="post">
<select id="select_bar" name="select">
  <option value="kundenavn">kundenavn</option>
  <option value="telefonnummer">telefonnummer</option>
  <option value="emailadresse">emailadresse</option>
  <option value="ordrenummer">ordrenummer</option>
  <option value="fragtkvit">fragtkvit</option>
  <option value="omfang">omfang</option>
  <option value="emballage">emballage</option>
  <option value="foreslag">foreslag</option>
  <option value="supplier">supplier</option>
  <option value="distributor">distributor</option>
  <option value="ansvarlig">ansvarlig</option>
  <option value="status">status</option>
</select>
<input type="text" name="item" id="search_bar" />
<input type="submit" value="" id="img_search" />
</form>


og min søge funktion skal der kun laves noget styling på men den grundlæggende kode ser sådan her ud:


$item=$_POST['item'];
$select=$_POST['select'];

include('db_con.php');
//-query  the database table

$sql='SELECT * FROM tsf_info WHERE ' . $select . ' = \''.$item.'\'';

//-run  the query against the mysql query function
$result=mysql_query($sql) or die(mysql_error());

//-create  while loop and loop through result set
while($row=mysql_fetch_array($result)){       
//-display the result of the array
echo "<ul>\n";
echo "<li>" . $item ."</li>\n";
echo "</ul>";
}


problemet lå i min sql select, da det var varchar felter som den søgte på gav det problemer fordi jeg ikke havde '' med =)
Avatar billede wanze Nybegynder
26. april 2011 - 17:08 #9
I det du laver her er der jo ikke wildcards.

Noget helt andet er, at du slet ikke validerer dit input. En ondsindet person kunne med én søgning tømme hele din database. Som minimum skal du omkrænse de variabler du bruger i din søgning med mysql_real_escape_string().
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