"We are back" « oc.at

PHP problem (php_self?)

fatmike182 10.11.2006 - 00:27 3578 16 Thread rating
Posts

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
eÖÖ

weil ich in weiterer Folge einen umfangreicheren Onlinefragebogen machen will, hab ich mich wieder in PHP eingelesen... lang ists her.

Das war nur der 1. Konzept-test, der aber nicht funktioniert. Wenn ich auf den Submit-button klicke, tut sich nix - nur die alte Seite wird neu geladen. (also steht "noch nix" überm <hr>;)
... es sollte beim submitten wegen name="send" die php-variable $send entstehen & dann die if-anweisung true machen, oder?

Code: PHP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
	<title>test2</title>
<?php
	if ($send) {
	echo "<p>Ergebnis:<br>";
	echo "$txt1 $txt2 $txt3<br>";
	echo "$rad<br>";
	echo "$ch1 $ch2 $ch3<br>";
	echo "</p><hr>";
	}
	else {
	echo "<p>noch nix<br><hr></p>";
	}
?>
</head>
<body>
<form action="<?php $PHP_SELF ?>" method="post">
<p>
	<input type="Radio" name="rad" value="a"> a<br>
	<input type="Radio" name="rad" value="b"> b<br>
	<input type="Radio" name="rad" value="c"> c<br>
</p><p>
	<input type="Checkbox" name="ch1" value="ch eins"> ch1<br>
	<input type="Checkbox" name="ch2" value="ch zwei"> ch2<br>
	<input type="Checkbox" name="ch3" value="ch drei"> ch3<br>
</p><p>
	<input type="Text" name="txt1"> txt1<br>
	<input type="Text" name="txt2"> txt2<br>
	<input type="Text" name="txt3"> txt3<br>
</p>
	<input type="Submit" name="send">
	<input type="Reset" name="reset" value="abbrechen">
</form>
</body>
</html> 

Nachdem das Formular im Endeffekt viele Checkboxen haben wird, aber es eigentlich notwendig ist jeden Frage zu beantworten: gibts noch irgendeine andere Möglichkeit bei 1 Frage mit ~10 Checkboxen auszuwerten, ob die Frage beantwortet (min 1 Box angeklickt) wurde als
- wirklich jede überprüfen (also if mit vielen ||)
- evtl mit einer Schleife (muss nicht sein)
- nach dem Eintragen in die Datenbank überprüfen, ob was eingetragen wurde (Anm: alle values der Checkboxen einer Frage werden über Stringverknüpfung in 1 Datenbank-feld eingetragen, also nicht 1 Checkbox=1 DB-Feld)

die 3. Möglichkeit ist zwar am bequemsten, aber sicher die schlechteste... oder?

Tia,
Michi

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4934
Ich vermute mal, dass register_globals Off ist (was auch gut ist).

in dem Fall verwende anstatt $PHP_SELF -> $_SERVER['PHP_SELF'] und anstatt plain $send -> $_POST['send'].

edit: um die Richtigkeit der Eingaben zu prüfen kannst du dir ja bequem eine Funktion schreiben ;). Spart ne Menge Schreibarbeit.
Bearbeitet von dio am 10.11.2006, 00:33

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
thx .. dann muss ich aber trotzdem noch globals einschalten, oder?

Im Prinzip ist das analog zu einem Galileo-computing - Beispiel (allerdings php 4, liegts daran?) gemacht worden.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25504
<input type="checkbox" name="bQuestion1[]" />

dann bekommst du in php ein array und kannst per foreach() prüfen. nur kleiner tipp, bei unangehakten checkboxen bekommst du keine requestvariablen, du musst daher den entsprechenden arraykey auf !isset() prüfen.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25504
Zitat von fatmike182
thx .. dann muss ich aber trotzdem noch globals einschalten, oder?

Im Prinzip ist das analog zu einem Galileo-computing - Beispiel (allerdings php 4, liegts daran?) gemacht worden.
nein.. benutze die SUPERGLOBAL arrays. alles weitere steht auf de2.php.net :)

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
guat .. jez geh ich aber mal schlafen - dann les ich mir das nochmal durch (sry, hab das mit superglobel arrays nicht ganz verstanden jetzt - war das auf das script bezogen?)

thx nochmal!
schlafts gut & träumts süß...

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25504
Zitat
thx nochmal!
schlafts gut & träumts süß...
dein selbstvertrauen möcht ich haben ;)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
<input type="Submit" name="send">
da hat send keinen value, daher vermute ich, daß es in php auch leer ist und damit würde if false ergeben. da müßtest du eher isset() nehmen und noch besser nen value vergeben.

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
wegen isset & value:
nope, am value kanns imho nicht liegen, weils ja ein formular ist & der Value von einem Submitbutton nur für den Text am Button gilt. Mit isset hab ichs auch versucht - leider unerfolgreich!

Aja: register globals ist auf Off; werde das auch beibehalten - hab zwar in dem Fall nur 1 Datei (also eh übersichtlich, falls das der Kritikpunkt ist), aber ich nehm an, bei meinem Webspace wirds auch off sein (ich texte grad beim Xampp).

@ mat: na das bissal Höflichkeit...


EDIT:
Es funktioniert!
Hab im Großen & Ganzen eigentlich nur das $_POST & das $_Server azugeschrieben (wird der Browser gestern irgendwie aus dem Cache galden haben, weils nicht gefunzt hat)
Zwar übergibt er jetzt das Send, die anderen Variablen nicht. Ich nehme an, das lässt sich auch mit $_POST lösen (da Formular ja über post gesendet)

TIA!
Bearbeitet von fatmike182 am 10.11.2006, 08:51

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
der value eines submitbuttons wird mit übergeben, wenn man auf den button klickt. klickt man nicht, sondern schickt das formular ab, indem man z.b. in einem imput-feld ist und enter drückt, wird der value nicht mit übergeben.

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
eÖÖ!

ohne mir jetzt über den eigentlichen Sinn der Funktion Gedanken zu machen verteufel ich PHP5 jetzt mal! Ahhhh... bei php4 hat man gepostete Namen von zB Checkboxen/Radios/... einfach als $namen übernhemen können. Ich hab das jetzt mit $namen = $_POST['namen'] machen müssen.

Ergebnis:
Code: PHP
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
</head>
<body>
<?php
$gesendet = $_POST['gesendet'];
if ($gesendet) {
	$rad = $_POST['rad'];
	$txt1 = $_POST['txt1'];
	$txt2 = $_POST['txt2'];
	$txt3 = $_POST['txt3'];
	$ch1 = $_POST['ch1'];
	$ch2 = $_POST['ch2'];
	$ch3 = $_POST['ch3'];
	$n1 = $ch1;
	$n1 .= $ch2;
	$n1 .= $ch3;
	
	
	echo "<p>Ergebnis:<br>";
	echo "TXT: $txt1 $txt2 $txt3<br>";
	echo "RAD: $rad<br>";
	echo "CHK: $ch1 | $ch2 | $ch3<br>";
	echo "</p><hr>";
	echo "<p>n1 = $n1 | ch1: $ch1 | ch2: $ch2 | ch3: $ch3</p><hr>";
	
}
else {
	echo "<b>nix</b><hr>";
?>

<form action="<?php $PHP_SELF ?>" method="post">
<p>
	<input type="Radio" name="rad" value="a"> a<br>
	<input type="Radio" name="rad" value="b"> b<br>
	<input type="Radio" name="rad" value="c"> c<br>
</p><p>
	<input type="Checkbox" name="ch1" value="Wort1 "> ch1<br>
	<input type="Checkbox" name="ch2" value="Wort2 "> ch2<br>
	<input type="Checkbox" name="ch3" value="Wort3"> ch3<br>
</p><p>
	<input type="Text" name="txt1"> txt1<br>
	<input type="Text" name="txt2"> txt2<br>
	<input type="Text" name="txt3"> txt3<br>
</p>
	<input type="Submit" name="gesendet" value="absenden">
	<input type="Reset" name="reset" value="abbrechen">
</form>
<?php 
}
?>
</body>
</html>

# auswerten:
Ob alle Fragen beantwortet wurden werde ich dann mit Schleifen versuchen zu lösen, oder?

tia!
Michi

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4934
liest du dir eigentlich auch nur ansatzweise durch, was wir geschrieben haben?

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
sry dio ... hab das ausschließlich auf den Submit-button bezogen. aber hab dann eh überrissen, wie du das gemeint hast (wie xagt, hab das früher immer anders gemacht & dann eingebildet, dass das noch immer so sein muss)

& wegen checkbox: ow, yeppa: array... muss ich mich dann erst einlesen.

Danke nochmal für die Hilfe - wär wohl lang nicht draufgekommen, wo der Bug ist!

murcielago

Dr. Doom
Avatar
Registered: Oct 2002
Location: *
Posts: 2692
& kannst bitte aufhören, dass du alles so komisch schreibst? das hat dir doch eh in einem anderen thread scho jemand xagt oder nicht? ow ey, jö, eöö ^^^!
Bearbeitet von murcielago am 11.11.2006, 13:57

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
komisch schreiben? hm?
"scho", "xagt", "dass"... ich bemüh mich ja eh.
btw. "vorerst solved"
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz