Hallo,
Die SQL-Abfrage klingt super, funktioniert auch, denke ich, aber kannst du die folgende Zeile vielleicht nochmal für mich kommentieren? Irgendwie ist mir das zu hoch ;-)
$wherestring .= (($wherestring eq '')?' WHERE ':' AND ')." COMPUTERNUMBER = $nummer ";
Pass auf, es ist jetzt bidde folgendes:
Ein Select-Statement mit einem Suchkriterium sieht ja so aus
SELECT blablabla FROM table
WHERE feld1 = 123
Willst Du zwei oder mehr Kriterien berücksichtigen, sieht das dann so aus:
SELECT blablabla FROM table
WHERE feld1 = 123
AND feld2 = 'wasauchimmer'
AND feld3 = 'nochwas'
(wobei ich jetzt davon ausgehe, daß alle Kriterien erfüllt sien müssen, was durch die AND's ausgedrückt ist)
Lassen wir jetzt einmal die erste Zeile weg, ist
WHERE feld1 = 123
AND feld2 = 'wasauchimmer'
AND feld3 = 'nochwas'
ja das fertige Suchkriterium über drei Felder.
Eigentlich haben all diese Zeilen ( == Einzelkriterium) das gleiche Muster:
Die erste Zeile beginnt mit WHERE, alle anderen mit AND, und dann kommt der Vergleich 'FELDNAME = WERT'. In meinem Code hänge ich, falls ein Kriterium vom Benutzer angegeben wurde, dieses einfach an die Variable $wherestring nach dem genannten Schema an ($wherestring .=) (beachte den Punkt vor dem Gleichheitszeichen). Jetzt muß ich bei jedem Einzelkriterium nur erkennen, ob es das erste ist, oder nicht. Das kann ich feststellen, indem ich überprüfe ob schon was in der Variable steht ($wherestring eq ''). Wenn ja, dann nehme ich WHERE, sonst AND. Das mach das Konstrukt (($wherestring eq '')?' WHERE ':' AND '), der Rest (." COMPUTERNUMBER = $nummer ") hängt noch den eigentlcihen Feld-Vergleich an.
Das ist einfacher zu programmieren, als zu erklären:-(
... dass ich $row[0] usw. schreiben muss verstehe ich.
gut;-)
Aber ist diese while-Schleife jetzt erforderlich??...
Tja...
Es gibt auf jeden Fall mehrere Datensätze, die den Suchkriterien entsprechen.
... aha *g* ...
Wie kann ich so etwas berücksichtigen??
Indem Du beispielsweise die Daten in einer while()-Schleife anrufst;-)
Dein Problem ist ja immer noch, daß DU nicht weißt, wie Du die Daten ausgeben willst.
Dazu solltest Du vielleicht einmal eine Statische HTML-Seite machen, die Dir als Vorlage für die Ausgabe dienen kann. Dann mußt Du noch entscheiden, ob Deine Suchfunktion direkt etwas ausgeben soll oder nicht. Beide Varianten haben ihre Vor- und Nachteile. Wenn sie direkt etwas ausgibt, dann kann sie wahrscheinlich sinnvollerweise nur zu einem bestimmten Zeitpunkt aufgerufen werden.
das könnte dann vielleicht (ganz grob) so aussehen:
print '<table>';
while (@row = $sth->fetchrow_array) {
print '<tr><td>';
print join('</td><td>',@row);
print '</td></tr>';
}
print '</table>';
Wenn Du die Daten aber erst im aufrufenden Programm ausgeben willst, mußt Du sie zwangsläufig zwischenspeichern, was den u.a. Nachteil hat, daß es eventuell sehr viel Speicher benötigt, wenn viele Daten gefunden werden.
Das könnte dann so aussehen
my @result = ();
while (@row = $sth->fetchrow_array) {
push @result, [@row]
}
$sth->finish;
$dbh->disconnect;
return @result;
Wie du mit solchen Datenstrukturen weiter vorgehen kannst, kannst Du nachlesen, und zwar bei
perldoc perllol
und
perldoc perldsc
return @row = ($nummer, $tsskennung, $eMail);
die Zuweisung auf @row ist hier unnötig.also reicht hier return @row aus??
Ich dachte eher an
return ($nummer, $tsskennung, $eMail);
$dbh->disconnect();
Wieso wird diese Anweisung nicht ausgeführt?
Weil Du vorher schon mit
return;
aus der Funktion in das aufrufende Programm zurückkehrst.
Soll ich evtl. mal das vollständige Skript posten?
Nein, lieber nicht, wenn dann stelle sie irgendwo als Text online, und poste hier nur den Link.
Grüße
Klaus