Case Sensitive Filter

Hallo zusammen,
ich hoffe das mir hier jemand helfen kann.
Ich verwende ein filter was case sensitive ist.
Nun soll es aber egal sein, ob das Wort aus Groß- oder Kleinbuchstaben oder einem Mix aus diesen besteht.

Wie kann man die funktionen modifizieren?

Danke im Voraus!

function sql_select()
{
  global $conn;
  global $order;
  global $ordtype;
  global $filter;
  global $filterfield;
  global $wholeonly;

  $filterstr = sqlstr($filter);
  if (!$wholeonly && isset($wholeonly) && $filterstr!='') $filterstr = "%" .$filterstr ."%";
  $sql = "SELECT name, vorname, uid FROM public.phone5";
  if (isset($filterstr) && $filterstr!='' && isset($filterfield) && $filterfield!='') {
    $sql .= " where " .sqlstr($filterfield) ." like '" .$filterstr ."'";
  } elseif (isset($filterstr) && $filterstr!='') {
    $sql .= " where (name like '" .$filterstr ."') or (vorname like '" .$filterstr ."') or (uid like '" .$filterstr ."')";
  }
  if (isset($order) && $order!='') $sql .= " order by \"" .sqlstr($order) ."\"";
  if (isset($ordtype) && $ordtype!='') $sql .= " " .sqlstr($ordtype);
  $res = pg_query($conn, $sql) or die(pg_last_error());
  return $res;
}

function sql_getrecordcount()
{
  global $conn;
  global $order;
  global $ordtype;
  global $filter;
  global $filterfield;
  global $wholeonly;

  $filterstr = sqlstr($filter);
  if (!$wholeonly && isset($wholeonly) && $filterstr!='') $filterstr = "%" .$filterstr ."%";
  $sql = "SELECT COUNT(*) FROM public.phone5";
  if (isset($filterstr) && $filterstr!='' && isset($filterfield) && $filterfield!='') {
    $sql .= " where " .sqlstr($filterfield) ." like '" .$filterstr ."'";
  } elseif (isset($filterstr) && $filterstr!='') {
    $sql .= " where (name like '" .$filterstr ."') or (vorname like '" .$filterstr ."') or (uid like '" .$filterstr ."')";
  }
  $res = pg_query($conn, $sql) or die(pg_last_error());
  $row = pg_fetch_assoc($res);
  reset($row);
  return current($row);
}

 

was spricht gegen lower(name) like lower(’%suchtwort%)?
Oder du nimmst ~*, wie in der Doku bei Pattern Matching beschrieben.

select lower(...)



select upper(...)

Alternativ auch PHP strtolower() oder strtoupper();

Ich habe mit strtolower() versucht, mit sql query funktioniert nicht

  $filterstr = strtolower(sqlstr($filter));
  $xvorname =strtolower(vorname);
  $xname =strtolower(name);
  
  if (!$wholeonly && isset($wholeonly) && $filterstr!='') $filterstr = "%" .$filterstr ."%";
  $sql = "SELECT COUNT(*) FROM (SELECT \"name\", vorname FROM phone5) subq";
  if (isset($filterstr) && $filterstr!='' && isset($filterfield) && $filterfield!='') 
  {
    $sql .= " where " .strtolower(sqlstr($filterfield)) ." like '" .strtolower($filterstr)."'";
  } elseif (isset($filterstr) && $filterstr!='') 
  { 
  $sql .= " where ('" .$xname."' like '" .$filterstr ."') or ('".$xvorname."' like '" .$filterstr ."')....
  }

wenn in der DB natürlich auch alles unterschiedlich geschrieben ist, also Mix aus groß/klein, dann geht es mit strtolower() allein auf PHP-Seite natürlich nicht. Weil dann vergleicht er ja z. b. ein strtolower() php mit großbuchstaben, etc. Ansonsten einfach mal den SQL-Query per echo ausgeben und schauen ob irgendwo etwas noch nicht passt.

$sql .= " where " .strtolower(sqlstr($filterfield)) ." like '" .strtolower($filterstr)."'";

Das ist doch unsinn, was du da machst. Du schreibst erst den Spaltennamen klein und vergleichst den Inhalt der Spalte dann mit der Kleinschreibweise von deinem Suchstring. Ist ja klar, dass das nicht bringt.
Was du willst ist

"where lower(spalte) like ".strtolower('suchstring')

[/color]

Hallo Gibheer,

Ich bin weder Programmierer noch vertraut mit den Datenbanken und versucht eine existierende Datei zu modifizieren.Jetzt wissen wir woher dieser “Unsinn” kommt :slight_smile:

Wichtig ist das du mir geholfen hast! Abfrage funktioniert wie erwünscht!

Vielen Dank!