PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Merhmals $PHP_SELF auf einer Seite


Dennis G.
18.01.2004, 19:09:52
Hallo,

ich versuche gerade für eine Netzwerkparty ein kleines Teilnehmersystem zu basteln.
Ich habe nun eine Liste aller Teilnehmer welche aus der Datenbank ausgelesen wird. Bei jedem Teilnehmer gibt es ein Feld "Login" nach dessen klick die Eingabe von der e-Mail Adresse und einem Passwort verlangt wird. Das klappt soweit schonmal und diese beiden Eingaben werden mittels einem Formular und $PHP_SELF auf ihre Richtigkeit geprueft.
Danach öffnet sich ein weiteres Formular mit den bisherigen Daten des Teilnehmers damit er sie ändern kann. Das klappt auch noch super...
Wenn man die Daten jedoch geändert hat und auf Abschicken beim Formular klickt, wird nicht der zugehörige PHP Code ausgeführt, sondern man landet wieder bei der Loginprüfung... Kann es sein das man nur einmal $PHP_SELF mit nur einem Formular auf einer Seite verwenden kann? Habt ihr eine Idee wie ich dieses Login anders gestalten könnte?

Grüße,
Dennis G.

meikel (†)
18.01.2004, 19:22:07
Original geschrieben von Dennis G.
Danach öffnet sich ein weiteres Formular mit den bisherigen Daten des Teilnehmers damit er sie ändern kann. Das klappt auch noch super...
Wenn man die Daten jedoch geändert hat und auf Abschicken beim Formular klickt, wird nicht der zugehörige PHP Code ausgeführt, sondern man landet wieder bei der Loginprüfung...
Ohne das mir unbekannte Script zu kennen:
11.20. Warum funktionieren meine Formulare nicht?
http://www.dclp-faq.de/q/q-formular-register-globals.html

Kann es sein das man nur einmal $PHP_SELF Könnte es möglich sein, daß Du $_SERVER['PHP_SELF'] meinst?

chris17
18.01.2004, 19:49:58
Ich geb auch ein Tipp ab.
Gib mal in Dein Script folgende Zeile ein.

#echo $PHP_SELF; # Ist ganz arg pfui :-)
echo $_SERVER['PHP_SELF'];

Es dürfte Dir dann klar werden was schiefläuft. -> action="dortwodievariablenhinsollen.php"
Fehler ausgebügelt -> action="...", und nicht method="..."

René_M
18.01.2004, 20:28:30
Hi Chris,

Original geschrieben von chris17
Es dürfte Dir dann klar werden was schiefläuft. -> method="..."
meinst du wirklich method und nicht action

Dennis G.
18.01.2004, 21:48:43
Okay, hier der Code (fragmente):

if ($edit) {

$db = mysql_connect("localhost","root");
mysql_select_db("teamif",$db);
$sql = "SELECT * FROM inflame_07 WHERE id=$edit";
$result = mysql_query($sql,$db);
$data = mysql_fetch_array($result);

if ($login) {
if($email2 == $data["email"]) {
if($passwort2 == $data["passwort"]) {

if ($update) {
$db = mysql_connect("localhost","root");
mysql_select_db("teamif",$db);
$sql2 = "UPDATE inflame_07 SET nickname='$nickname', clanname='$clanname', homepage='$homepage', email='$email', alt='$alt', icq='$icq', passwort='$passwort' WHERE id=$edit";
$result = mysql_query($sql2,$db);
echo "<b>Daten f&uuml;r die ID ".$edit." wurden ge&auml;ndert</b><br><br>";
}
else { ?>
<form method="post" action="<? echo $PHP_SELF ?>">
<input type=hidden name="edit" value="<? echo $data["id"] ?>">
<table border="0" align="center">
<tr><td>Nickname</td><td>
<input type="text" name="nickname" value="<? echo $data["nickname"] ?>" size="50"></td>
</tr><tr><td>Clan</td><td>
<input type="text" name="clanname" value="<? echo $data["clanname"] ?>" size="50">
</td></tr><tr><td>Homepage</td><td>
<input type="text" name="homepage" value="<? echo $data["homepage"] ?>" size="50">
</td></tr><tr><td>e-Mail</td><td>
<input type="text" name="email" value="<? echo $data["email"] ?>" size="50">
</td></tr><tr><td>Alter</td><td>
<input type="text" name="alt" value="<? echo $data["alt"] ?>" size="50">
</td></tr><tr><td>ICQ</td><td>
<input type="text" name="icq" value="<? echo $data["icq"] ?>" size="50">
</td></tr><tr><td>Passwort</td><td>
<input type="text" name="passwort" value="<? echo $data["passwort"] ?>" size="50"></td></tr>
<tr>
<td><input type="submit" name="update" value="update"></td>
</tr>
</table></form><? exit;
}
}
else { ?> Falsche Logindaten <? exit; }
}
else { ?> Falsche Logindaten <? exit; }
}
else { ?>
<form method="post" action="<? echo $PHP_SELF ?>">
<input type=hidden name="edit" value="<? echo $data["id"] ?>">
<table border="0" align="center">
<tr><td>e-Mail</td><td>
<input type="text" name="email2" value="<? echo "$email2" ?>" size="50"></td>
</tr><tr><td>Passwort</td><td>
<input type="text" name="passwort2" value="<? echo "$passwort2" ?>" size="50"></td>
</tr>
<tr>
<td><input type="submit" name="login" value="Login"></td>
</tr>
</table></form><?
}


Mein Problem:
Nach dem Login kommt man in das Formular zum verändern der Daten, aber nach einem Klick auf Update landet man wieder beim Login und es ist nichts geschehen...

Gruß,
Dennis G.

meikel (†)
18.01.2004, 22:18:06
Original geschrieben von Dennis G.
[B]Okay, hier der Code (fragmente):

if ($edit) {

Etwas mehr "Fragment"! Wo wird $edit mit welchem Wert gefüttert?

Falls Formular, dann lies Dir endlich das durch:
11.20. Warum funktionieren meine Formulare nicht?
http://www.dclp-faq.de/q/q-formular-register-globals.html

<form method="post" action="<? echo $PHP_SELF ?>">

Noch mal: wenn Deine PHP Version nicht 3.0.18 oder älter als 4.0.6 ist, solltest Du lernen, daß $PHP_SELF falsch und $_SERVER['PHP_SELF'] richtig ist.

Ich selber verwende PHP 4.3.3 und bei mir ist die Variable $PHP_SELF l wie leer und g wie ganz leer!
http://test.new-bbs.info/6696/

Dennis G.
18.01.2004, 22:23:07
Die Übergabe erfolgt über folgenden Link etwas weiter unten in der selben Datei:


<a href="<? echo ''.$PHP_SELF.'?edit='.$daten[id].'' ?>">Login</a>


Ich werde die $PHP_SELF wie empfohlen ersetzen.

Gruß,
Dennis G.

meikel (†)
18.01.2004, 22:32:21
Original geschrieben von Dennis G.
Die Übergabe erfolgt über folgenden Link etwas weiter unten in der selben Datei:


<a href="<? echo ''.$PHP_SELF.'?edit='.$daten[id].'' ?>">Login</a>

Wenn Du dem FAQ Text gefolgt wärst und immer mal im aktuellen PHP Manual nachschlagen würdest, wüßtest Du, daß GET Parameter in $_GET['variablenname'], POST Parameter in $_POST['variablenname'] und netterweise auch, egal welche Methode, in $_REQUEST['variablenname'] stehen.

Dennis G.
18.01.2004, 22:43:05
Irgendwie schreibst Du nicht besonders nett, wirklich schade denn Deine Beiträge sind soweit sehr hilfreich.
Der Link funktioniert bei mir wunderbar und ich wollte ihn auch nicht ändern. Dr Fehler liegt irgendwo in dem längeren Codeteil den ich schickte. Da schreibt er die geänderten Daten nicht in die Datenbank und ich weiß nicht wieso...

Gruß,
Dennis

meikel (†)
18.01.2004, 22:58:49
Original geschrieben von Dennis G.
[B]Irgendwie schreibst Du nicht besonders nett, wirklich schade denn Deine Beiträge sind soweit sehr hilfreich.
Das liegt daran, weil ich heute schon mindestens 12 PHP Legasthenikern das Handbuch vorlesen mußte. Da verliert man irgend wann mal die Lust, anderen Mus ums Maul zu schmieren.
Der Link funktioniert bei mir wunderbar und ich wollte ihn auch nicht ändern.
Mein lieber Dennis, der Link funktioniert sicher. Was sollte an einem Link auch nicht funktionieren. Nur landen die GET Parameter (das ist das Zeuch, was nach dem ? steht) bei den modernen PHP Versionen nicht mehr im globalen Namensraum sondern bei GET im Array $_GET['name'] und bei POST (zB. Formulare) im Array $_POST['name'].
Dr Fehler liegt irgendwo in dem längeren Codeteil den ich schickte. Da schreibt er die geänderten Daten nicht in die Datenbank und ich weiß nicht wieso...
Weil auch die anderen Formularvariablen leer sind, wenn Du sie im globalen Namensraum suchst.

Schreibe einfach mal ganz oben in das Script
error_reporting(15);
rein. Du wirst Dich wundern, mit welchen Schwierigkeiten PHP bei dem Script zu kämpfen hat.

chris17
19.01.2004, 10:34:36
Original geschrieben von René_M
Hi Chris,


meinst du wirklich method und nicht action
Uiuiuiuiui, natürlich meinte ich "action"... :-|

René_M
19.01.2004, 12:51:25
@meikel,

int error_reporting ([int level])
(PHP 3, PHP 4 >= 4.0b1)
Es wird angezeigt, wie PHP-Fehlermeldungen ausgegeben werden

int level --> wo kann man nachsehen was welche Zahl bewirkt?

chris17
19.01.2004, 13:08:59
int level --> wo kann man nachsehen was welche Zahl bewirkt?
http://de3.php.net/manual/de/function.error-reporting.php

Wie dann error_reporting(15); zustande kommt ist klar, oder?

René_M
19.01.2004, 16:55:06
Hi Chris,

Original geschrieben von chris17
Wie dann error_reporting(15); zustande kommt ist klar, oder?
danke für den Link. Ein bisschen rechnen und man kommt auf 15 ;-)

meikel (†)
19.01.2004, 17:57:22
Original geschrieben von René_M
Ein bisschen rechnen und man kommt auf 15 ;-)
Man kann auch schreiben:
error_reporting(E_ALL) => 15
oder
error_reporting(E_ALL & !E_NOTICE) => 7
aber ich bin bekanntlich schreibfaul.

René_M
19.01.2004, 20:16:03
@meikel,

ich bin auch recht geitzig im Code. Keine Kommentare in den Scripten Variablennamen wo nachher keiner weiß was sie bedeuten oder wo zu sie gehören.

meikel (†)
19.01.2004, 21:17:27
Original geschrieben von René_M
ich bin auch recht geizig im Code. Keine Kommentare in den Scripten Variablennamen wo nachher keiner weiß was sie bedeuten oder wo zu sie gehören.
Kommentare schreibe ich auch nicht rein.

Allerdings kapsle ich meinen Kram. Ich programmiere den Kram von vornherein so, daß er mehrfach verwendbar ist, und teste das Zeuch mehr als ausgiebig. Besonders pinglig bin ich, wenn ich Uservariable verwende. Man weiß ja nie, was die Brüder so alles schicken...

Ist die Testphase abgeschlossen, dann verwende ich die Funktionen, Klassen u/o Methoden wie eine Blackbox.

Jut, ich könnte für die Nachwelt noch ein paar Kommentare reinschreiben, aber dazu bin ich eben zu faul...