Seite 1 von 1

Suchfunktion in Coldfusion

Verfasst: 01.06.2004, 17:58
von alesis
Hallo zusammen, ich bin gerade dabei an einer Übung, ich habe ein Formular in das ich Personalien von Kunden in eine Datenbank speichere.

So dass ich mit einer Suchfunktion (LIKE) nach Kriterien suchen kann.
Aber irgend wie bringe ich es nicht fertig, kann mir irgend jemand dabei helfen?

Vieln Dank für eure Hilfe.

Gruss Alesis

<cfset CurrentPage=GetFileFromPath(GetTemplatePath())>
<cfif IsDefined("FORM.MM_InsertRecord") AND FORM.MM_InsertRecord EQ "form">
<cfquery datasource="kundendata" username="root" password="root">
INSERT INTO kunden (firma, name, vorname, adresse, email, tel, faxnr, ort, plz) VALUES
(
<cfif IsDefined("FORM.firma") AND #FORM.firma# NEQ "">
'#FORM.firma#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.name") AND #FORM.name# NEQ "">
'#FORM.name#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.vorname") AND #FORM.vorname# NEQ "">
'#FORM.vorname#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.adresse") AND #FORM.adresse# NEQ "">
'#FORM.adresse#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.email") AND #FORM.email# NEQ "">
'#FORM.email#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.tel") AND #FORM.tel# NEQ "">
'#FORM.tel#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.faxnr") AND #FORM.faxnr# NEQ "">
'#FORM.faxnr#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.ort") AND #FORM.ort# NEQ "">
'#FORM.ort#'
<cfelse>
NULL
</cfif>
,
<cfif IsDefined("FORM.plz") AND #FORM.plz# NEQ "">
#FORM.plz#
<cfelse>
NULL
</cfif>
)
</cfquery>
<cflocation url="index.cfm">
</cfif>

<cfquery name="abfrage" datasource="kundendata" password="root" username="root">
select *
from kunden
where 0=0
<cfif #name# is NOT "">
AND name LIKE '%#name#%'
</cfif>
<cfif #vorname# is NOT "">
AND vorname LIKE '%#vorname#%'
</cfif>
<cfif #adresse# is NOT "">
AND adresse LIKE '%#adresse#%'
</cfif>
<cfif #email# is NOT "">
AND email LIKE '%#email#%'
</cfif>
<cfif #tel# is NOT "">
AND tel LIKE '%#tel#%'
</cfif>
<cfif #faxnr# is NOT "">
AND faxnr LIKE '%#faxnr#%'
</cfif>
<cfif #datum# is NOT "">
AND datum LIKE '%#datum#%'
</cfif>
<cfif #ort# is NOT "">
AND ort LIKE '%#ort#%'
</cfif>
<cfif #plz# is NOT "">
AND plz LIKE '%#plz#%'
</cfif>
<cfif #firma# is NOT "">
AND firma LIKE '%#firma#%'
</cfif>
<cfif #kunde_id# is NOT "">
AND kunde_id LIKE '%#kunde_id#%'
</cfif>
</cfquery>

<cfif ABFRAGE.RECORDCOUNT IS 0>
Es wurden keine passenden Datensätze gefunden<br>
<cfelse>
<cfoutput>#abfrage.RecordCount#</cfoutput>Datensätze gefunden:<br>
<cftable query="abfrage" HTMLTABLE>
<cfcol header="vorname" text="<i>#vorname#</i>">
<cfcol header="name" text="<i>#name#</i>">
<cfcol header="adresse" text="#adresse#">
<cfcol header="email" text="#email#">
<cfcol header="tel" text="#tel#">
<cfcol header="datum" text="#datum#">
<cfcol header="ort" text="#ort#">
<cfcol header="plz" text="#plz#">
<cfcol header="firma" text="#firma#">
<cfcol header="kunde_id" text="#kunde_id#">
</cftable>
</cfif>

<html>
<head>
<title>publit_offerte</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="css.css" rel="stylesheet" type="text/css">
<link href="css_formular.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#E0E0E0" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="145" colspan="2" bgcolor="#999999"> <div align="center">
<form name="form" method="POST" action="<cfoutput>#CurrentPage#</cfoutput>">
<table width="1000" cellpadding="1" cellspacing="1" bordercolor="#666699">
<tr>
<td width="120" height="26" bgcolor="#CCCCCC" class="inhalt"> <div align="right">Firma:</div></td>
<td colspan="5" bgcolor="#5EBBCC"> <input type="text" name="firma" size="28">
<span class="titelbar">&deg;</span></td>
</tr>
<tr>
<td width="120" bgcolor="#CCCCCC" class="inhalt"> <div align="right">Name:
</div></td>
<td width="219" bgcolor="#99CCCC"> <input type="text" name="name" size="28">
<span class="titelbar">&deg;</span></td>
<td width="120" bgcolor="#CCCCCC" class="inhalt"> <div align="right">Adresse:</div></td>
<td width="290" bgcolor="#99CCCC"> <input type="text" name="adresse" size="28">
<span class="titelbar">&deg;</span></td>
<td width="120" bgcolor="#CCCCCC" class="inhalt"> <div align="right">Natel
oder Fixnr.</div></td>
<td width="145" bgcolor="#99CCCC"> <input type="text" name="tel" size="14">
<span class="titelbar">&deg;</span></td>
</tr>
<tr>
<td width="120" height="24" bgcolor="#CCCCCC" class="inhalt"> <div align="right">Vorname:</div></td>
<td bgcolor="#99CCCC"><input type="text" name="vorname" size="28">
<span class="titelbar">&deg;</span></td>
<td width="120" bgcolor="#CCCCCC" class="inhalt"> <div align="right">PLZ
/ Ort:</div></td>
<td bgcolor="#99CCCC"> <input type="text" name="plz" size="5"> <input type="text" name="ort" size="22">

<span class="titelbar">&deg;</span></td>
<td width="120" bgcolor="#CCCCCC" class="inhalt"> <div align="right">Faxnr.</div></td>
<td bgcolor="#99CCCC"><input type="text" name="faxnr" size="14"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td colspan="3">&nbsp; </td>
<td bgcolor="#CCCCCC">&nbsp; </td>
<td width="120" bgcolor="#CCCCCC" class="inhalt"> <div align="right">E-Mail:</div></td>
<td bgcolor="#99CCCC"><input type="text" name="email" size="20"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td colspan="3"><div align="right"></div>
<div align="left" class="inhalt">Die Markierten Felder (<span class="titelbar">&deg;</span>)
sind muss Felder!</div></td>
<td colspan="3" bgcolor="#999999"> <input type="submit" name="Submit1" value="save">
<input type="reset" name="Submit2" value="clear"></td>
</tr>
</table>
<input type="hidden" name="MM_InsertRecord" value="form">
</form>
</div></td>
</tr>
<tr>
<td height="19" colspan="2" bgcolor="#CCCCCC"><hr color="#666666" width="100%"></td>
</tr>
<tr>
<td height="76" colspan="2" valign="top" bgcolor="#CCCCCC"><div align="center">
<form name="form1" method="POST" action="index.cfm">
<div align="center">
<table width="1000" border="0" cellpadding="1" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td width="406" bgcolor="#999999" class="inhalt"> <div align="right">Offerte
suchen<span class="titelbar"> [</span>Suchbegriff eingeben<span class="titelbar">]</span></div></td>
<td width="151" bgcolor="#999999"> <div align="center">
<input type="text" name="eingabe" value="<cfoutput>#abfrage#</cfoutput>">
</div></td>
<td width="230" bgcolor="#333333"><span class="titelbar_hell">Suchen
in</span> <select name="">
<option value="kunde_id">Offerte Nr.</option>
<option value="firma">Firma</option>
<option value="name">Name</option>
<option value="vorname">vorname</option>
<option value="plz">PLZ / Ort</option>
<option value="adresse">Adresse</option>
<option value="tel">Telefon Nr.</option>
<option value="faxnr">Fax Nr.</option>
<option value="email">E-Mail</option>
</select> </td>
<td width="12" valign="middle" bgcolor="#999999"> <div align="center">
</div></td>
<td width="185" valign="middle" bgcolor="#999999"> <input type="submit" name="goto" value=">SEARCH">
</td>
</tr>
</table>
</div>
</form>
</div></td>
</tr>
</table>
</body>
</html>

Verfasst:
von

Verfasst: 01.06.2004, 18:57
von sangrio
Sorry für diese nicht-wirklich-helfende Aussage, aber CF suxx - PHP rulez 8)

Verfasst: 02.06.2004, 06:05
von Brahms
<cfif IsDefined("FORM.MM_InsertRecord") AND FORM.MM_InsertRecord EQ "form">
<cfquery name="GibDerAktionEinenNamen" datasource="kundendata" username="root" password="root">
INSERT INTO kunden
(firma, name, vorname, adresse, email, tel, faxnr, ort, plz)
VALUES
('#FORM.firma#', '#FORM.name#', '#FORM.vorname#', '#FORM.email#', '#FORM.tel#', '#FORM.faxnr#', '#FORM.ort#', #FORM.plz#)
</cfquery>
<cflocation url="index.cfm">
</cfif>

Die ganzen Abfragen kannst Du Dir schenken, wenn Du in der Datenbank auch Nullwerte zulässt (z.B. in Access beim entsprechenden Feld "Leere Zeichenfolge" auf JA setzen).

Datasource würde ich in application.cfm "auslagern" (dort die Variable dafür definieren) und fortan über diese Variable referenzieren (z.B. datasource="#DSN#"). Damit brauchst Du bei Änderungen dann nur die Variablendefinition in der application.cfm ändern und nicht in jedem Script alle Bezüge. Für Hilfe zum application-Framework s. CF Manual.

Noch ein Tipp: Wenn Du nicht absolut sicher bist, dass PLZ eine Zahl sein wird (z.B. problematisch bei nicht-dt. PLZ) dann besser als Text behandeln.

Die Abfrage lautet dann z.B.:
<CFQUERY NAME="Search" datasource="#DSN#">
SELECT *
FROM kunden
WHERE firma LIKE '%suchbegriff%'
OR name LIKE '%suchbegriff%'
etc.
etc.
</CFQUERY>

Gruss,
Johannes