Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Formulardaten
Ich habe eine Reihe von Checkboxen, die in einem Formular zusammengefasst an die nächste Seite übermittelt werden.
Dort würde ich gerne überprüfen, welche davon markiert waren.
Mittels 'isset' ist das ja möglich, da nicht markierte ja nicht übermittelt werden.
Die Namen der Checkboxen lauten $Nummer1, $Nummer2, ...
Auf der nächsten Seite möchte ich diese in einer Schleife abfragen und den value in ein Array speichern.
for($i=1;$i<20;$i++)
{
if(isset("$Nummer".$i))
{
array[$i]="$Nummer".$i;
}
}
Wenn ich wüsste, wieviele Checkboxen es sind könnte ich Sie einzeln direkt mit Namen abfragen. Da es aber immer unterschiedlich viele sind geht das nicht. Wenn ich den Variablennamen erst in einen String abspeicher und dann isset($string) mach kommt ja immer true, weil es dann die Variable String auf vorhandensein kontrolliert, und nicht deren Inhalt '$NummerX'.
Weiss jemand, wie ich durchnummerierte Checkboxen in einer Schleife abfragen kann?
P.S.: Das mit dem Value zuweisen ist nicht dringend. Hab einen anderen Weg gefunden, das zuzuweisen.
$checkboxname="meinebox";
$i=1;
$temp=$checkboxname.$i;
while(isset($$temp))
{
echo "checkbox $i ist angeklickt";
$i++;
$temp=$checkboxname.$i;
}
geht die Checkboxen "meinebox1" "meineboxunendlich" durch
solltest aber besser mit $_POST arbeiten
prüfe dort auf
isset($_POST[$checkboxname.$i])
Es funktioniert jetzt einwandfrei.
Kannst du mir nur kurz erklären, warum ich '$_POST[$bla]' verwenden soll, wenn es nur mit '$bla' auch funktioniert?
MoRtAlAn 21-10-2002, 12:47 weil Register_Globals seit PHP4.1 ? standartmäßig deaktiviert ist (mit der Version bin ich mir nicht 100% sicher).
Das ganze wurde auf Grund von Sicherheitsaspekten so entschieden. Die meißten Webhoster und User haben es zwar wieder aktiviert, ist aber eben nicht mehr standart.
Ist es deaktiviert, kannst du eben nicht mehr einfach mit $var auf die Übergebenen Variablen zugreifen.
schau mal hier (im Teil Umgebungsvariablen):
http://www.php.net/manual/de/language.variables.predefined.php
gruss
Reicht es dann, die Variable einmal mit $_POST[$bla] anzusprechen (danach wieder nur über '$bla')?
Oder muss ich das jedesmal, wenn die Variable benutzt wird mit $_POST[$bla] machen?
kapitaeniglo 21-10-2002, 13:18 immer $_POST['bla"] stimmt, aber einfacher ist es, worauf du auch sicherlich ohne mienen hinweis gekommen waerst am anfang deines skriptes, einfafch alle variablen die entweder per get oder post uebergeben werden, wie folgt wieder einfacher verfuegbar zu machen *hmmm irgendnen wort fiel mir nicht ein, deswegen der komische satz*
bei variablen die ueber ein formular uebergeben werden :
$bla = $_POST['bla'];
bei variablen die ueber die url uebergeben werden
$bla = $_GET['bla'];
Es ist zwar nicht pflicht die variablen so aufzurufen es ist aber zukunftssicher. momentan ist mir kein provider bekannt, bei dem man register globals auf off hat. aber es wird wohl nur eine frage der zeit sein, bis dies bei den ersten so ist und spaetestens wenn du fuer firmen programmierst musst du es so machen, denn es ist einfach sauberer.
Kann es sein, dass $_POST und $_GET erst ab Version 4.x möglich ist?
Bei mir macht er das nicht, hab nämlich immer noch Version 3.irgendwas.
MoRtAlAn 21-10-2002, 15:16 3 ??:rolleyes:
da gabs sowas noch nicht :D
gruss
Bei PHP 3 stehen die ini aber mit sicherheit auf on (eigentlich klar, sonst würds dein script nut tun :D)
Weiß jetzt net genau. Aber könnte Sein, dass $HTTP_GET_VARS[] bzw $HTTP_POST_VARS[] bei dir klappt.
BlobBanana 21-10-2002, 16:32 Ganz genau gibt es die Superglobals seit PHP Version 4.1.0 ;)
http://www.php.net/manual/de/language.variables.predefined.php
Danke für die Hilfe und Auskunft!
Noch eine kurze Frage, die wohl eher in den Bereich Javascript oder HTML fällt.
Wie kann ich erreichen, dass ich die gleichen Formulardaten an zwei verschiedene Felder verschicken kann?
Beispiel:
Im form-tag kann ich ja nur eine Seite als Action angeben.
Wenn ich nun aber auf meiner Seite zwei Buttons hab, über die ich zu verschiedenen Seiten komme, beide Seiten aber die Formulardaten erhalten sollen. Wie kann ich das machen?
Muss ich dann das selbe Formular nochmals integrieren nur mit einer anderen Seite bei action=\"Seite.php\" ?
Ich hoffe das war einigermaßen verständlcih
Da hatte ich letztens auch Probleme mit.
Du willst also 1 Formular haben, aber zwei Submits. einer der die daten an seite1.php sendet, und der andere sendet an seite2.php
Mein Lösungsansatz war folgender:
Die Formularseite:
action=index.php
Button 1: name = aktion1
Button 2: name = aktion2
in der index.php:
if isset($aktion1) { include seite1.php }
elseif isset($aktion2) {include seite2.php }
@Tobiaz: Hab das jetzt so gemacht, wie du es vorgeschlagen hast und es funktioniert. Vielen Dank für die Hilfe.
Auf so simple aber geschickte Lösungen komme ich nur selten selbst. Ich glaube ich denke immer zu kompliziert.
Ich habe jetzt das meiste mit Formulardaten übermittelt, dadurch ist die URL nicht mehr so lang.
Vorher hatte ich alle Informationen als String angehängt und das konnte ganz schön lang werden.
Jetzt habe ich aber ein neues 'Problem'. Bei jedem Seitenaufruf, bei dem Formulardaten übergeben werden, fragt der Browser ob die Daten unverschlüsselt über das Netz gesendet werden sollen. Ist nicht brutal tragisch, aber auf Dauer nervt das irgendwie schon.
Kann man da was dagegen machen?
Gibt's da keine "Nicht mehr fragen" option in dem Fensterchen??
Bei Post-Operationen fragt Netscape anfänglich immer danach ... bei IE ist mir's nicht bekannt.
Aber mit HTTPS hat das nichts zu tun, oder?
Bez. des Problems mit den zwei verschiedenen Urls, hab ich gestern hier im Forum (entweder Gesuche oder Snippets) was gefunden. Konnte den Link aber nicht hier Posten, weil ich nicht mehr wusste, wo das gebraucht wurde. Kannst ja nochmal da nachsehen. Denke das waren die Snippets in denen das stand. Ich such auch noch mal.
@TobiaZ: Hab es jetzt doch anders gelöst:
<form name=beispiel action='Seite1.html' method=POST>
.
.
.
</form>
<input type=button name=B1 ... onClick=\"document.beispiel.submit();\">
<input type=button name=B2 ... onClick=\"document.beispiel.action='Seite2.html';document.beispiel.submit();\">
So geht es auch, zumindest bei mir.
sieht vielversprechend aus. werds, wenn ichs noch brauche wohl auch in dieser richtung probieren.
|
|