Zum Inhalt springen

Suchergebnis bleibt leer

Erstellt am 6. November 2010 · 5 Antworten · letzte Antwort am 9. November 2010

Tags: PHP, Datenbank, Frage

ViktoriaS ·

Hallo!

Ich schreibe gerade meine erste Extension und möchte nun eine Suchfunktion realisieren.
Vorerst ganz einfach: Suche nach einem Ort im Feld city der Datenbanktabelle.

Nachfolgender Code:

<?php
function KursSearch() {
$marker = array();
  $table = 'tx_vhsverwaltung_kurse';
  $tmpl = $this->cObj->fileResource("fileadmin/VhsVorlage.html");
  $subpart = $this->cObj->getSubpart($tmpl, "###TEMPLATE_SEARCH###");
  $subsub = $this->cObj-> getSubpart($subpart, "###KLISTE###");
  $content=' ' ;

  // Beim Folge-Durchlauf, wenn Submit betätigt wurde 
  if($this->piVars['submit'] ) {
  $content='<b> Es folgt nun die Ausgabe einer Kursliste für den Ort  </b> <br /> ' ;
  $content .= $this->piVars['searchvalue'] ;  
//$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND courscity = 'Hamburg' " );
  $res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND courscity = $this->piVars['searchvalue'] " );
 
  if (mysql_error())  debug(array(mysql_error(), $query));
  while ($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res))
	{ 
	$marker["###KURSNR###"] = "Kurs-Nr: "  . $row[coursnumber] ;
	$marker["###KURSCAT###"] = $row[courscat] ;
	$marker["###KURSTITEL###"] = $row[title] ;
	$marker["###KURSCITY###"] = $row[courscity] ;
	$content .=$this->cObj->substituteMarkerArrayCached($subsub, $marker);
	}
  $content = $this->cObj->substituteSubpart($subpart, "###KLISTE###", $content);
  return $content;
  } 
  // Ansonsten, also beim ersten Durchlauf:
  else {
    $content ='<b> Bitte geben Sie den gewünschten Ort ein!!! </b> <br /> ' ;
    $content = $this->cObj->substituteSubpart($subpart, "###KLISTE###", $content);
    return $content;
 } // Ende IF

} // Ende Funktion Search
?>

Über die Zeile

 $content .= $this->piVars['searchvalue'] ;

kann man sehen, dass der Ort angenommen wurde und die auskommentierte Folgezeile mit der direkten Ortsangabe funktioniert auch. o.Oo.O

Danke vielmals im Voraus.
Viki

P.S. Bitte nachfolgendes ignorieren:
<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />;
Keine Ahnung wo das herkommt

vince ·

$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND courscity = $this->piVars['searchvalue'] " );

Hallo,

das könnte daran liegen, dass in der Query die Anführungszeichen fehlen.
also so:
courscity = '$this->piVars['searchvalue']' .

EDIT: So wird's auch nicht gehen, weil dann das 'searchvalue' stört.
Also nochmal der ganze Aufruf:

$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND courscity = '".$this->piVars['searchvalue']."' );

So müsste es auf jeden Fall gehen...

ViktoriaS ·

Hay Vince!

Danke für Deine Hilfestellung.
Leider klappt es aber weder so wie von Dir angegeben noch mit den am Ende ergänzten Doppel-Anführungsstrichen (" ) (wegen "deleted ... " ) .

Um die Hochkommata-Regelung nicht zu kompliziert werden zu lassen habe ich mal das

// Beim Folge-Durchlauf, wenn Submit betätigt wurde 
if($this->piVars['submit'] ) {
$kursort = $this->piVars['searchvalue'] ;
$content='<b> Es folgt nun die Ausgabe von Kursen für den Ort ' .  $kursort . "</b> <br />" ;  
$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND courscity = $kursort" );

probiert. Ging auch nicht.

Nur nachfolgendes ging:

// Beim Folge-Durchlauf, wenn Submit betätigt wurde 
if($this->piVars['submit'] ) {
$kursid = $this->piVars['searchvalue'] ;
$content='<b> Es folgt nun die Ausgabe des Kurses mit der Nr ' .  $kursort . "</b> <br />" ;  
$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND uid = $kursid" );

Doch wer will schon nur nach Zahlen suchen?
Noch jemand ne Anregung?
Danke vielmals im Voraus.
Viki

-------------------------------------------
P.S.
Ob hier im Forum wohl eine Fehlprogrammierung vorliegt?
Jedes eingegebene Hochkomma Klammerzu führt zu ")

vince ·

Hallo,

in deinem ersten post hast du ja schon gesagt, dass
courscity = 'hamburg' funktionniert.
Die einfachen Anführungszeichen sind wichtig.

courscity= hamburg funktionniert z.B. nicht.

also folgendes müsste gehen:

$kursort= $this->piVars['searchvalue'] ;

und dann in der query:

courscity = '$kursort'

lisardo ·

Hallo viki,

heisst der ort wirklich "hamburg" in exakt dieser Schreibweise, also klein? Du machst eine alphanumerische Suche, die ausschließlich zutrifft, wenn der Suchstring exakt gleich dem inhalt des Feldes ist. So geht das in einer Suche nicht, du musst mit Like suchen.

$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", $table, "deleted = 0 AND hidden = 0 AND courscity LIKE '%".$kursort."%'" );

Die Prozentzeichen sind hier stellvertretend für andere Zeichen vor und nach dem Suchbegriff. Kuckst du z. B. hier:
MySQL-Tutorial
Gruß
Peter, TYPO3 @ lisardo (Augsburg)

ViktoriaS ·

Hay Peter!

Danke für den Beitrag!
Schade, dass ich ihn erst jetzt gelesen habe.
Denn vor wenigen Minuten habe ich die Lösung auch gefunden.

courscity LIKE '%$kursort%'" );

Komisch, ging bei mir auch ohne Punkte. 8-)

Viele Grüße
Viki