php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit Formulardaten


 
LazyLow
21-10-2002, 11:55 
 
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.

 
TBT
21-10-2002, 12:11 
 
$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])

 
LazyLow
21-10-2002, 12:40 
 
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

 
LazyLow
21-10-2002, 12:51 
 
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?

 
TBT
21-10-2002, 12:53 
 
immer $_POST[$bla]

 
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.

 
LazyLow
21-10-2002, 15:14 
 
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

 
TobiaZ
21-10-2002, 16:25 
 
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

 
LazyLow
21-10-2002, 16:38 
 
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

 
TobiaZ
21-10-2002, 16:53 
 
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 }

 
LazyLow
22-10-2002, 10:48 
 
@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.

 
LazyLow
22-10-2002, 12:54 
 
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?

 
goth
22-10-2002, 13:00 
 
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.

 
TobiaZ
22-10-2002, 13:52 
 
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.

 
LazyLow
22-10-2002, 16:03 
 
@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.

 
TobiaZ
22-10-2002, 16:14 
 
sieht vielversprechend aus. werds, wenn ichs noch brauche wohl auch in dieser richtung probieren.


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:51 Uhr.