datumsabfrage einschränken
junior
- php
Hallo zusammen,
ich brauch eine Abfrage, in der ich meine Datumsabfrage einschränken kann, d.h. im Augenblick hab ich ein MIN und ein MAX definiert.
Dieses MAX geht bis 2222 und ist für die jetzige Abfrage eigentlich nicht relevant.
Deshalb bräuchte ich eine Einschränkung. Das Datum in der Auswahlbox soll 5 Jahre zurück und 5 Jahre in die Zukunft zur Auswahl stehen.
In diesem Fall würde das etwa so aussehen:
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
Da wir ja 2009 haben sollen die letzen fünf Jahre und die zukünftigen fünf Jahre mit zur Auswahl stehen.
Mein augenblicklicher Code sieht so aus:
while ($row = pg_fetch_assoc($result)) {
$min = $row['projyearmin'];
$max = $row['projyearmax'];
}
for ($i = $min; $i <= $max; $i++) {
if (isset($_POST['year']) and $_POST['year'] == $i) {
echo "<option selected>$i</option>\n";
} else {
echo "<option>$i</option>\n";
}
}
echo " </select></td>
<td valign=\"middle\" align=\"center\"><div id=\"bottom\"><input type=\"submit\" name=\"Suchen\" value=\"Suchen\" /></td>
</tr>
</table>
</form>
";
if(isset($_POST['Suchen']) and $_POST['Suchen'] == 'Suchen') {
$filteryear = $_POST['year'];
if ($filteryear != '*') {
$datefilter = "AND kstbegin <= '$filteryear-12-31' AND kstende >= '$filteryear-01-01'";
} else {
$datefilter = "";
}
wo muss ich jetzt die +/- 5 Jahre unterbringen? Und wie sag ich dem, das er immer das aktuelle Jahr als Grundlage für das +/- 5 heranziehen soll?
Könnt ihr mir da weiterhelfen?
Viele Dank
Hi junior!
wo muss ich jetzt die +/- 5 Jahre unterbringen?
Setze $min
und $max
entsprechend.
Und wie sag ich dem, das er immer das aktuelle Jahr als Grundlage für das +/- 5 heranziehen soll?
[link:http://php.net/date@title=date]('Y')
gibt dir das aktuelle Jahr als vierstellige Zahl zurück.
MfG H☼psel
Hi junior!
»» wo muss ich jetzt die +/- 5 Jahre unterbringen?
Setze$min
und$max
entsprechend.»» Und wie sag ich dem, das er immer das aktuelle Jahr als Grundlage für das +/- 5 heranziehen soll?
[link:http://php.net/date@title=date]('Y')
gibt dir das aktuelle Jahr als vierstellige Zahl zurück.MfG H☼psel
Ehrlich gesagt weiß ich nicht, wo du meinst? Ich hab eine for-Schleife aufgebaut, in der er vom Min also z.B. 2000 bis zum Max 2222 hochzählt.
Wo soll ich denn das $min
oder $max
verändern, damit das funktioniert? Und wo soll ich das ('Y') setzen?
Du müsstest mir da schon etwas weiterhelfen :-)
Hi junior!
Ehrlich gesagt weiß ich nicht, wo du meinst? Ich hab eine for-Schleife aufgebaut, in der er vom Min also z.B. 2000 bis zum Max 2222 hochzählt.
Und diese Min- und Max-Werte setzt du doch auch. Wieso solltest du sie also nicht ändern können?
Wo soll ich denn das
$min
oder$max
verändern, damit das funktioniert? Und wo soll ich das ('Y') setzen?
Ich verstehe dein Problem nicht:
// aktuelles Jahr
$currentYear = int(date('Y');
// For-Schleife von $currentYear-5 bis $currentYear+5
for ($i = $currentYear-5 ; $i <= $currentYear+5; $i++) {
// ...
Das ist es doch, was du suchst, oder?
MfG H☼psel
Hi junior!
»» Ehrlich gesagt weiß ich nicht, wo du meinst? Ich hab eine for-Schleife aufgebaut, in der er vom Min also z.B. 2000 bis zum Max 2222 hochzählt.
Und diese Min- und Max-Werte setzt du doch auch. Wieso solltest du sie also nicht ändern können?»» Wo soll ich denn das
$min
oder$max
verändern, damit das funktioniert? Und wo soll ich das ('Y') setzen?
Ich verstehe dein Problem nicht:
// aktuelles Jahr
$currentYear = int(date('Y');
// For-Schleife von $currentYear-5 bis $currentYear+5
for ($i = $currentYear-5 ; $i <= $currentYear+5; $i++) {
// ...
>
> Das ist es doch, was du suchst, oder?
>
> MfG H☼psel
Danke,
habs jetzt gefunden. Der sucht mir ja erst das MIN und MAX aus meiner Datenbank, damit ich überhaupt feststellen kann, was in dem Berich zwischen MIN und MAX liegt.
Mein CurrentYear hab ich oben in meinem PHP schon gesetzt, auf ("Y"),
jetzt hab ich einfach mein `$min+4`{:.language-php}und mein "MAX"`$min+14`{:.language-php}gesetzt, dann zeigt er mir die Daten (MIN ist 2000) von 2004 bis 2014 an.
~~~php
for ($i = $min+4; $i <= $min+14; $i++)
Hi junior!
»» Ehrlich gesagt weiß ich nicht, wo du meinst? Ich hab eine for-Schleife aufgebaut, in der er vom Min also z.B. 2000 bis zum Max 2222 hochzählt.
Und diese Min- und Max-Werte setzt du doch auch. Wieso solltest du sie also nicht ändern können?»» Wo soll ich denn das
$min
oder$max
verändern, damit das funktioniert? Und wo soll ich das ('Y') setzen?
Ich verstehe dein Problem nicht:
// aktuelles Jahr
$currentYear = int(date('Y');
// For-Schleife von $currentYear-5 bis $currentYear+5
for ($i = $currentYear-5 ; $i <= $currentYear+5; $i++) {
// ...
>
> Das ist es doch, was du suchst, oder?
>
> MfG H☼psel
Hallo,
hab es jetzt nochmal überprüft, das mit dem min+4 und min+14 macht nicht gerade viel Sinn, weil wenn sich das min ändern, hat das nicht unbedingt was mit dem aktuellen Datum zu tun.
Jetzt hab ich das mal so abgeändert wir Hopsel mir vorgeschlagen hat und jetzt kommt beim ersten mal auswählen schon das richtige Datum, bei erneutem Auswählen, erscheint dann von -5 bis +5 nur die einzelnen Zahlen, wieso?
Weiß jemand von euch, wo mein Fehler liegt? hab jetzt
~~~php
$filteryear = date("Y");
$_POST['year'] = $filteryear;
....
for ($i = $filteryear-5; $i <= $filteryear+5; $i++) {
if (isset($_POST['year']) and $_POST['year'] == $i) {
echo "<option selected>$i</option>\n";
} else {
echo "<option>$i</option>\n";
}
}
Wo ist das Problem? Wäre um jede kleine Hilfe sehr, sehr dankbar
Hi junior!
Weiß jemand von euch, wo mein Fehler liegt? hab jetzt
$filteryear = date("Y");
$_POST['year'] = $filteryear;
....
for ($i = $filteryear-5; $i <= $filteryear+5; $i++) {
if (isset($_POST['year']) and $_POST['year'] == $i) {
echo "<option selected>$i</option>\n";
} else {
echo "<option>$i</option>\n";
}
}
Wieso speicherst du in das superglobale Array $\_POST das aktuelle Jahr. Du hast dieses Jahr doch schon in `$filteryear`{:.language-php} stehen.
> Wo ist das Problem? Wäre um jede kleine Hilfe sehr, sehr dankbar
Das Problem tritt vor allem mit vorliegendem Code nicht auf.
Was meinst du mit "erneutem Auswählen"?
MfG H☼psel
--
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
[Selfcode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
Hi junior!
»» Weiß jemand von euch, wo mein Fehler liegt? hab jetzt
»» ~~~php
»» $filteryear = date("Y");
»» $_POST['year'] = $filteryear;
»» ....
»» for ($i = $filteryear-5; $i <= $filteryear+5; $i++) {
»» if (isset($_POST['year']) and $_POST['year'] == $i) {
»» echo "<option selected>$i</option>\n";
»» } else {
»» echo "<option>$i</option>\n";
»» }
»» }
»»
> Wieso speicherst du in das superglobale Array $\_POST das aktuelle Jahr. Du hast dieses Jahr doch schon in `$filteryear`{:.language-php} stehen.
>
> »» Wo ist das Problem? Wäre um jede kleine Hilfe sehr, sehr dankbar
> Das Problem tritt vor allem mit vorliegendem Code nicht auf.
>
> Was meinst du mit "erneutem Auswählen"?
>
> MfG H☼psel
Hi,
mit erneutem Auswählen mein ich, wenn ich die Seite zum ersten mal aufrufe, steht das richtige Datum drin (2009) auch die Auswahlbox zeigt alle Daten von 2004-2014 an. Wähle ich aber jetzt z.B das Jahr 2004 aus, wird mir in der Auswahlbox nach dem drücken von "Suchen" die Zahlen von -5 bis 5 angezeigt und kein richtiges Datum mehr.
Wie sollte ich den den Aufruf mmit $\_POST denn sonst machen?
Viele Grüße
junior
Hi junior!
Wähle ich aber jetzt z.B das Jahr 2004 aus, wird mir in der Auswahlbox nach dem drücken von "Suchen" die Zahlen von -5 bis 5 angezeigt und kein richtiges Datum mehr.
Ohne Code kann ich dir aber nicht helfen, das Problem zu lösen.
Wie sollte ich den den Aufruf mmit $_POST denn sonst machen?
Was meinst du nun schon wieder mit "Aufruf mit $_POST"?
$filteryear = date("Y");
$_POST['year'] = $filteryear;
....
for ($i = $filteryear-5; $i <= $filteryear+5; $i++) {
if (isset($_POST['year']) and $_POST['year'] == $i) {
echo "<option selected>$i</option>\n";
} else {
echo "<option>$i</option>\n";
}
}
Die Umkopiererei is vollkommen unnötig.
Besser wäre:
$filteryear = date("Y");
....
// Ausgabe der Auswahlbox der Jahreszahlen
// aktuelles Jahr wird vorselektiert
for ($i = $filteryear-5; $i <= $filteryear+5; $i++)
echo '<option'.(($filteryear==$i)?' selected':'').'>'.$i.'</option>'."\n";
Aber auch das ist kann falsch sein, weil ich den gesamten Quellcode nicht kenne.
MfG H☼psel
Hi junior!
»» Wähle ich aber jetzt z.B das Jahr 2004 aus, wird mir in der Auswahlbox nach dem drücken von "Suchen" die Zahlen von -5 bis 5 angezeigt und kein richtiges Datum mehr.
Ohne Code kann ich dir aber nicht helfen, das Problem zu lösen.»» Wie sollte ich den den Aufruf mmit $_POST denn sonst machen?
Was meinst du nun schon wieder mit "Aufruf mit $_POST"?
$filteryear = date("Y");
$_POST['year'] = $filteryear;
....
for ($i = $filteryear-5; $i <= $filteryear+5; $i++) {
if (isset($_POST['year']) and $_POST['year'] == $i) {
echo "<option selected>$i</option>\n";
} else {
echo "<option>$i</option>\n";
}
}
>
> Die Umkopiererei is vollkommen unnötig.
>
> Besser wäre:
>
> ~~~php
$filteryear = date("Y");
> ....
> // Ausgabe der Auswahlbox der Jahreszahlen
> // aktuelles Jahr wird vorselektiert
> for ($i = $filteryear-5; $i <= $filteryear+5; $i++)
> echo '<option'.(($filteryear==$i)?' selected':'').'>'.$i.'</option>'."\n";
Aber auch das ist kann falsch sein, weil ich den gesamten Quellcode nicht kenne.
MfG H☼psel
Hi Hopsel,
mein aktueller Code sieht so aus:
<?php
$counter = 0;
$datefilter = "";
if (empty($_POST['Suchen'])) {
$filteryear = date("Y");
$_POST['Suchen'] = 'Suchen';
$_POST['year'] = $filteryear;
}
$dbconn = pg_connect("host=s001 dbname=lars user=usr_intranet")
or die('Verbindungsaufbau fehlgeschlagen: ' . pg_last_error());
$query = " SELECT MIN(date_part('year', aktivvon)) AS projyearmin,
MAX(date_part('year', aktivbis)) AS projyearmax
FROM aktivmitposkst
";
$result = pg_query($dbconn, $query) or die('Abfrage fehlgeschlagen: ' . pg_last_error());
echo " <html>\n<head>\n
<title>kostenstelleliste</title>\n
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>\n
<link rel='stylesheet' type='text/css' href='lars.css' />
<script language='JavaScript' src='lars.js'></script>
<body>
<form action=\"
";
echo $_SERVER['PHP_SELF'];
echo " \" method=\"post\">
<table>
\t<colgroup><col width=780> <col width=120> <col width=100></colgroup>
<tr class=\"filter\">
<td> Filter</td>
<td valign=\"middle\" align=\"center\">Jahr <select align=\"right\" size=\"1\" name=\"year\" class=\"year\">
<option value=\"*\">*</option>
";
while ($row = pg_fetch_assoc($result)) {
$min = $row['projyearmin'];
$max = $row['projyearmax'];
}
for ($i = $min; $i <= $max; $i++) {
if (isset($_POST['year']) and $_POST['year'] == $i) {
echo "<option selected>$i</option>\n";
} else {
echo "<option>$i</option>\n";
}
}
echo " </select></td>
<td valign=\"middle\" align=\"center\"><div id=\"bottom\"><input type=\"submit\" name=\"Suchen\" value=\"Suchen\" /></td>
</tr>
</table>
</form>
";
if(isset($_POST['Suchen']) and $_POST['Suchen'] == 'Suchen') {
$filteryear = $_POST['year'];
if ($filteryear != '*') {
$datefilter = "AND kstbegin <= '$filteryear-12-31' AND kstende >= '$filteryear-01-01'";
} else {
$datefilter = "";
}
}
Ich bräuchte also in der for-Schleife diese if (isset($_POST['year']) and $_POST['year'] == $i)
überhaupt nicht?
Darf ich dich noch was fragen, wie lernt man am Besten PHP? Hab zwar im Internet schon einige Tutorials gesucht, aber ehrlich gesagt haut mich da nichts um. Hast du einen Tip für mich?
Hi junior!
Ich bräuchte also in der for-Schleife diese
if (isset($_POST['year']) and $_POST['year'] == $i)
überhaupt nicht?
Doch. =)
Jetzt sieht man ja das Gesamtbild. Ich würde es folgendermaßen machen:
// Welches Jahr soll vorselektiert werden?
if (!empty($_POST['year']))
$selectedYear = $_POST['year'];
else
$selectedYear = date('Y');
for ($i = $min; $i <= $max; $i++) {
if (selectedYear == $i)
{
// ausgewählten Eintrag oder Standardeintrag vorselektieren
echo "<option selected>$i</option>\n";
}
else
{
echo "<option>$i</option>\n";
}
}
Die Werte $min
und $max
kannst du ggf. noch vom aktuellen Jahr (date('Y')
) abhängig machen.
Darf ich dich noch was fragen, wie lernt man am Besten PHP?
Nach und nach. =)
Hab zwar im Internet schon einige Tutorials gesucht, aber ehrlich gesagt haut mich da nichts um. Hast du einen Tip für mich?
Ein guter Programmierer wirst du nur durch Übung. Es ist wichtig, dass du deinen eigenen Stil findest.
Allgemeine PHP-Tutorials habe ich nie durchgearbeitet. Die Erfahrung, die man duch seine Projekte sammelt, ist einfach das Wichtigste.
MfG H☼psel
Hi junior!
»» Ich bräuchte also in der for-Schleife diese
if (isset($_POST['year']) and $_POST['year'] == $i)
überhaupt nicht?
Doch. =)
Jetzt sieht man ja das Gesamtbild. Ich würde es folgendermaßen machen:
// Welches Jahr soll vorselektiert werden?
if (!empty($_POST['year']))
$selectedYear = $_POST['year'];
else
$selectedYear = date('Y');for ($i = $min; $i <= $max; $i++) {
if (selectedYear == $i)
{
// ausgewählten Eintrag oder Standardeintrag vorselektieren
echo "<option selected>$i</option>\n";
}
else
{
echo "<option>$i</option>\n";
}
}
>
> Die Werte `$min`{:.language-php} und `$max`{:.language-php} kannst du ggf. noch vom aktuellen Jahr (`date('Y')`{:.language-php}) abhängig machen.
>
> »» Darf ich dich noch was fragen, wie lernt man am Besten PHP?
> Nach und nach. =)
>
> »» Hab zwar im Internet schon einige Tutorials gesucht, aber ehrlich gesagt haut mich da nichts um. Hast du einen Tip für mich?
> Ein guter Programmierer wirst du nur durch Übung. Es ist wichtig, dass du deinen eigenen Stil findest.
>
> Allgemeine PHP-Tutorials habe ich nie durchgearbeitet. Die Erfahrung, die man duch seine Projekte sammelt, ist einfach das Wichtigste.
>
> MfG H☼psel
Jetzt soll ich zusätzlich zu dem "Jahresfilter" auch noch einen Filter einbauen, mit den man die Kunden auswählen kann. Wie mach ich das am Besten? Ich hab es zwar geschafft, das in der Auswahlbox die Kunden angezeigt werden, aber wie sag ich ihm, wenn ich z.B Kunde "Maier" auswähle, das er mir nur die Daten von Kunde "Maier" anzeigt?
~~~php
<?php
$counter = 0;
$customerfilter = "";
if (empty($_POST['Suchen'])) {
$_POST['Suchen'] = 'Suchen';
}
$dbconn = pg_connect("host=s001 dbname=lars user=usr_intranet")
or die('Verbindungsaufbau fehlgeschlagen: ' . pg_last_error());
$query= " SELECT DISTINCT(name), kunde_id from kunde WHERE kunde_id is not null order by kunde_id ASC
";
$result = pg_query($dbconn, $query) or die('Abfrage fehlgeschlagen: ' . pg_last_error());
echo " <html>\n<head>\n
<title>kostenstellenliste</title>\n
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>\n
<link rel='stylesheet' type='text/css' href='lars.css' />
<script language='JavaScript' src='lars.js'></script>
<body>
<form action=\"
";
echo $_SERVER['PHP_SELF'];
echo " \" method=\"post\">
<table>
\t<colgroup><col width=780> <col width=120> <col width=100></colgroup>
<tr class=\"filter\">
<td> Filter - Kunde</td>
<td valign=\"middle\" align=\"center\">Kunde <select align=\"right\" size=\"1\" name=\"name\" class=\"name\">
<option value=\"*\">*</option>
";
while ($res = pg_fetch_assoc($result)){
$a = $res['name'];
if(isset($_POST['name']) and $_POST['name'] == $a ) {
echo "<option selected>$a</option>\n";
}
else
{
echo "<option>$a</option>\n";
}
}
echo "</select></td>
<td valign=\"middle\" align=\"center\"><div id=\"bottom\"><input type=\"submit\" name=\"Suchen\" value=\"Suchen\" /></td>
</tr>
</table>
</form>
";
if(isset($_POST['Suchen']) and $_POST['Suchen'] == 'Suchen') {
if ($name != '*') {
// $customerfilter = " AND ";
} else {
$customerfilter ="";
}
}
$query =
"
SELECT kostenstelle_id, b.name, bezeichnung, kstbegin, kstende, projektleiter,
ret_mit_names(kostenstelle_id,curDate()) as mitarbeiter
FROM (SELECT kostenstelle_id, fs_kunde, bezeichnung, kstbegin, kstende, projektleiter
FROM kostenstelle
WHERE fs_firma=1
$customerfilter
AND kostenstelle_id > 199999
AND ((kstende is null) OR (kstende >= curDate()))) k
LEFT OUTER JOIN kunde b
ON b.kunde_id=k.fs_kunde
LEFT OUTER JOIN (SELECT a.fs_kostenstelle, COUNT(distinct fs_mitarbeiter) as mitsIntern
FROM (SELECT mitarbeiter_id FROM mitarbeiter
WHERE fs_firma=1
AND eintritt<=current_date
AND ((austrITT Is null) OR (austritt > curDate()))
AND fs_mitarbeiterstatus = 1) im
INNER JOIN (SELECT fs_kostenstelle, fs_mitarbeiter
FROM aktivmitposkst
WHERE fs_firma=1
AND ((aktivbis is null) OR (aktivbis >= curDate()))) a
ON im.mitarbeiter_id=a.fs_mitarbeiter
GROUP BY a.fs_kostenstelle) i
ON k.kostenstelle_id=i.fs_kostenstelle
ORDER BY kostenstelle_id;
irgendwie oder wo muss ich ihm doch sagen, das er nur die Auswahl anzeigen soll, oder?
Ich hab es in eine "neue" Seite gemacht, damit ich nicht mit der Datumsabfrage keine Probleme bekomme, wie würde ich das dann zusammenfügen?
Also, das ich sowohl das Jahr, auch als den Kunden auswähle?
Hi,
Jetzt soll ich zusätzlich zu dem "Jahresfilter" auch noch einen Filter einbauen, mit den man die Kunden auswählen kann. Wie mach ich das am Besten? Ich hab es zwar geschafft, das in der Auswahlbox die Kunden angezeigt werden, aber wie sag ich ihm, wenn ich z.B Kunde "Maier" auswähle, das er mir nur die Daten von Kunde "Maier" anzeigt?
Die Datensätze werden sicherlich eine ID haben, also verwendest du diese als value der Select-Optionen.
Und wenn dann ein solcher ID-Wert übergeben wurde, dann selektierst du mit diesem den passenden Datensatz aus der Datenbank-Tabelle, mittels einer entsprechend generierten WHERE-Klausel.
Und informiere dich auch über das Stichwort SQL Injection und was man dagegen unternimmt.
MfG ChrisB