Wie kann ich flexible $_GETs abfragen?

Liebe/-r Experte/-in,
ich hänge.
Und zwar habe ich eine flexible Anzahl von $_GETs, die ich via checkboxen angeben kann. Wie frage ich die ab.
Es geht um die Anzahl der zurückreichenden Jahre.
Bsp:
Ich habe 5 Jahre eingestellt. Also sollen die Werte der letzen 5 Jahre angezeigt werden. (2011,2010,2009,2008,2007). Es können aber auch 6 oder 3 Jahre eingestellt werden.
Via Schleife werden dann 5 (oder 6 oder 3) checkboxen erstellt. Die haben den Namen jahr5,jahr4, jahr3,jahr2,jahr1 und als value jeweils 1.

Nun übergebe ich die Werte. Die Variable $jahrezurueck gibt vor, wie weit zurückgegangen werden soll.

$aktuellesjahr=date(‚Y‘);

for($p=0;$p

Hallo Oliver,

Du kannst alle übergebenen Variablen mit einer Schleife über den Array $_REQUEST dynamisch auslesen.

Zum Testen empfehle ich dir print_r($_REQUEST);

Gruß
Till

$aktuellesjahr=date(‚Y‘);
$p=0;
foreach($_GET AS $key => $value)
{
if(substr($key,4)==„jahr“) //nur Jahrescheckboxen auslesen
{
$jahreanzahl_array[$p]=$value;
$p++;
}
}

if ($jahreanzahl_array[$p]==1) echo " checked ";

$jahrezurueck kannst du dir sparen, falls du die Anzahl brauchst, die wäre dann in $p.

Sollte so funktionieren.

Viele Grüße

Hallo Oliver,

an sich erkenne ich jetzt keinen Fehler in dem Code (ich nehme an es geht um php?).

Mir ist allerdings auch noch nicht genau klar was du eigentlich erreichen möchtest.
So wie ich das verstanden habe hast du ein Formular mit einer unterschiedlichen Zahl an Checkboxen, die du dann der Reihe nach überprüfen möchtest.
Wenn du die Daten per Formular absendest (Durchführung eines Submits), würde ich diese per POST übergeben. Du lädst sie also dann mit $_POST[‚checkboxname‘] (ist sicherer).

Könnte dann wie folgt aussehen:
Festlegung der angezeigten Jahre

<?php $jahrezurueck = 5;<br />?\>

Submit-Form

<?php for($p=0;$p<$jahrezurueck;$p++) {
echo ' '.$p; } ?\> Auswertung for($p=0;$p Ich hoffe ich hab nicht irgendwo nen kleinen Fehler reingebaut. Beste Grüße Jens

Hallo Oliver.

Ich bin mir noch nicht ganz sicher, ob ich das Problem richtig verstanden habe…

Überprüfe doch mal mittels print_r oder var_dump, was nach ausführung deines Scripts tatsächlich in deinem $jahreanzahl_array drin steht.

Eine ausgewählte Checkbox gibt nicht 1 zurück, sondern etwas wie „true“ oder „checked“.
Ist zwar schon ne Weile her, aber mit Rückgabewerten von Checkboxen hatte ich auch mal so meine sorgen.

Etwas sichere Hilfestellung kann ich geben, wenn du etwas mehr Quellcode, vor allem auch von der Formulargenerierung postest.

Mit bestem Gruß

Kai.

Hi,

zunächst mal die Frage: Warum das Formular per GET und nicht über POST übertragen?

Zur Logik der Checkboxen:
Das, was du erreichen möchtest, geht relativ einfach mit Boardmitteln, indem du den Boxen einen identischen Namen gibst mit einem leeren Array-Index hinten dran. Also so in der Art

2010
2009

Dann hast du in deiner entsprechenden $_GET[‚jahre‘] Variable ein Array stehen mit den ausgewählten Values. Du solltest das Array auch noch mit isset() und count() überprüfen, falls gar keine Checkbox ausgewählt wurde.

Gruß,
OD

Warum so kompliziert?
Wenn die Info per $_GET kommt würde ich hier schon als Array übergeben…
Woher kommen die daten? HTML Formular? Datenbank? Kristallkugel???

Wenn man die checkboxen als Array benennt kann man auch auf die Daten als Array zugreifen:

usw…

Das war superschnell! Danke!
Ich habs nun glaube ich halbwegs gelöst:
$aktuellesjahr=date(‚Y‘);

for($p=0;$p";
if ($x!=$jahrezurueck)
echo " - ";

}

Das war superschnell! Danke!
Ich habs nun glaube ich halbwegs gelöst:

$aktuellesjahr=date(‚Y‘);

for($p=0;$p";
if ($x!=$jahrezurueck)
echo " - ";

}

$jahrezurueck ar die flexbible (!) Anzahl von Jahre, die zurückgezählt werden können soll. 5 Jahre-> Ab 2007 und nächstes Jahr ab 2008…

Das war superschnell! Danke!
Ich habs nun glaube ich halbwegs gelöst:
$aktuellesjahr=date(‚Y‘);

for($p=0;$p";
if ($x!=$jahrezurueck)
echo " - ";

}.

Das war superschnell! Danke!
Ich habs nun glaube ich halbwegs gelöst:
$aktuellesjahr=date(‚Y‘);

for($p=0;$p";
if ($x!=$jahrezurueck)
echo " - ";

}…

Das war superschnell! Danke!
Ich habs nun glaube ich halbwegs gelöst:
$aktuellesjahr=date(‚Y‘);

for($p=0;$p";
if ($x!=$jahrezurueck)
echo " - ";

}

Prob ist, dass es nicht immer 2008 ,2009, 2010 und2011 ist. In 260 Tagen ist es 2012,2011,2010 und 2009,…

OK Post muss noch rein und Alle lehr habe ich abgefangen:

if(!in_array(„1“,$jahreanzahl_array))
$jahreanzahl_array[0]=1;
[0] ist immer das aktuelle jahr

Wenn es soweit funktioniert. :smile:
Ich kann das grad leider nicht überprüfen.

Ich würde folgendes machen:

for($p = 0; $p 

und dann in deiner Ausgabe:



    
    for($i = 0; $i ';
    }



(Code nicht überprüft, sollte aber so die Richtung sein.)

Hallo Oliver,

wie wär’s, wenn Du im value statt einer 1 das jeweilige Jahr übergibst? Dann könntest Du mit einer Schleife von 1 bis zur maximalen Anzahl der Checkboxen alle Jahre abfragen (dann ist es egal, ob die Checkbox nicht angehakt oder gar nicht vorhanden war). Der kleinste Wert (außer 0) abgezogen vom aktuellen Jahr ergibt dann die Anzahl der Jahre.

Hilft das weiter?

Freundliche Grüße
Olaf Hansen

Hi Olaf, danke für Deine Antwort.

gelöst habe ich es nun. Zumindest php

$aktuellesjahr=date(‚Y‘);

for($p=0;$p";
if ($x!=$jahrezurueck)
echo " - ";

}
Nun das große Aber. Die sql-Abfrage …
select… where and
(if(%s=999,0,Date_Format(quittungen.datum,’%%Y’) = %s)or
if(%s=999,0,Date_Format(quittungen.datum,’%%Y’) = %s)or
if(%s=999,0,Date_Format(quittungen.datum,’%%Y’) = %s)or
if(%s=999,0,Date_Format(quittungen.datum,’%%Y’) = %s))
order by quittungen.datum,quittungen.name asc",

Diese Zeilen sind flexibel…
Eine Überlegung ist die Query wirklich als string zu behandeln und via for-Schleife auf zu bauen. Aber ob das mit dem sprintf klappt…

Hallo,

die Namen jahr1, jahr2, usw solltest du in jahr[1], jahr[2] etc. ändern damit du es später als richtiges Array von GET zurückbekommst.

Notfalls könntest du auch mit foreach die Array-Elemente von GET prüfen, ob diese mit „jahr“ beginnen, wäre aber keine saubere Lösung.

mfg

Hi,
danke für Deine Mühe. Ich habs nun erstmal fix gemacht.
Muss ich nich mal ran.

Aber nun habe ich eine weitere Frage zum Thema:
Kann ich strings mit concat und group by zusammenfügen?

Und zwar habe ich eine Monatsübersicht mit group by group by date_format(einsaetze.datum,’%%M’)
Rauskomemn tut eine Liste:
Januar Mäntel
Februar Strümpfe,
März Hosen
Das Problem hierbei ist, dass er nur den letzten Wert nimmt. In Januar gibts zB noch Pullover und Mützen
Ohne Group by passt es auch. Nur habe ich dann statt 3 Zeilen 23.

Hi,
danke für Deine Mühe. Ich habs nun erstmal fix gemacht.
Muss ich nich mal ran.

Aber nun habe ich eine weitere Frage zum Thema:
Kann ich strings mit concat und group by zusammenfügen?

Und zwar habe ich eine Monatsübersicht mit group by group by date_format(einsaetze.datum,’%%M’)
Rauskomemn tut eine Liste:
Januar Mäntel
Februar Strümpfe,
März Hosen
Das Problem hierbei ist, dass er nur den letzten Wert nimmt. In Januar gibts zB noch Pullover und Mützen
Ohne Group by passt es auch. Nur habe ich dann statt 3 Zeilen 23.

Hi,
danke für Deine Mühe. Ich habs nun erstmal fix gemacht.
Muss ich nich mal ran.

Aber nun habe ich eine weitere Frage zum Thema:
Kann ich strings mit concat und group by zusammenfügen?

Und zwar habe ich eine Monatsübersicht mit group by group by date_format(einsaetze.datum,’%%M’)
Rauskomemn tut eine Liste:
Januar Mäntel
Februar Strümpfe,
März Hosen
Das Problem hierbei ist, dass er nur den letzten Wert nimmt. In Januar gibts zB noch Pullover und Mützen
Ohne Group by passt es auch. Nur habe ich dann statt 3 Zeilen 23…

Hi,
danke für Deine Mühe. Ich habs nun erstmal fix gemacht.
Muss ich nich mal ran.

Aber nun habe ich eine weitere Frage zum Thema:
Kann ich strings mit concat und group by zusammenfügen?

Und zwar habe ich eine Monatsübersicht mit group by group by date_format(einsaetze.datum,’%%M’)
Rauskomemn tut eine Liste:
Januar Mäntel
Februar Strümpfe,
März Hosen
Das Problem hierbei ist, dass er nur den letzten Wert nimmt. In Januar gibts zB noch Pullover und Mützen
Ohne Group by passt es auch. Nur habe ich dann statt 3 Zeilen 23.