If - else funktioniert nicht

Alles, was PHP betrifft, kann hier besprochen werden.

If - else funktioniert nicht

Postby Earlybird » 25. February 2010 01:23

Hallo Freude von PHP,
ich bin absolut beginner, was Ihr wahrscheinlich aus der Problemschilderung ersehen werdet. Aber ich glaube auch Ihr habt einmal klein angefangen. Nun zu meinem Problem, vor dem ich jetzt, incl. Besuch aller Foren, seit einer Woche sitze. Ich habe eine völlig normale if - else - Abfrage, die nicht funktioniert.
XAMPP1.7.3, Apache 2.2.14, MySQL 5.1.41 und php 5.3.1 ist installiert, fuktioniert alles.... bis auf besagte Abfrage. Zum PHP-Test habe ich eine einfache Passwortabfrage geschrieben. Lade ich sie in den Server meines Profiders, funktioniert alles perfekt.
Sollte das Problem so einfach sein, wie ich vermute, bitte nicht auf mich schießen.

Hier der stinknormale Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><body>
<?php

$benutzer==$HTTP_POST_VARS['benutzer'];
$pass==$HTTP_POST_VARS['pass'];
print_r($_POST);
if($benutzer=="user") {
if($pass=="ich") {
print ("<b> Login korrekt.</b>");
print ("<p> hier Klick zum Zugang:</p>");
print ("<a href='http://www.lanzarote-team.de'></a>");
}
else {
print ("Passwort nicht korrekt!<br><br>");
print ("<a href='passwort.html'> Noch ein Versuch...</a>");
}
}
else {
print ("---Benutzername NICHT korrekt!---<br>");
print ("<a href='passwort.html'>Noch ein Versuch...</a>");
}
?>
</body>
</html>

Mit print_r($_POST) kann ich ersehen, dass die Variable übernommen werden. Trotzdem gibt es keine Auswertung der Abfrage, so dass immer die letzte else-Bedingung zum Tragen kommt. Ich hoffe, es ist jemand im Forum, der sich meines Problems annimmt. Vielen Dank im Voraus.

Earlybird
User avatar
Earlybird
 
Posts: 14
Joined: 25. February 2010 00:43
Location: Hamburg
Operating System: Windows 8.1 x64

Re: If - else funktioniert nicht

Postby Wiedmann » 25. February 2010 03:04

Mit print_r($_POST) kann ich ersehen, dass die Variable übernommen werden.

Und warum benutzt du dann "$HTTP_POST_VARS" in deinem Code, anstatt "$_POST"?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: If - else funktioniert nicht

Postby Altrea » 25. February 2010 06:13

Earlybird wrote:Hier der stinknormale Code:

stinknormal ist aber eine sehr freie Definition ^^

Earlybird wrote:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><body>


Lobenswert, dass du einen DOCTYPE setzt. Besser wäre es noch, wenn du die dtd Quelle mitangibst (vorallem der IE hat die Eigenart bei unvollständigen DOCTYPES doch wieder in den Quirks Modus zu verfallen.
Mehr zu DOCTYPES

Das einzige HTML-Tag das wirklich zwingend notwendig ist für ein gültiges HTML-Dokument fehlt hier allerdings, denn das ist das <title> Tag.

Hat beides nicht mit deinem Problem zu tun. Aber wie du schon sagtest, jeder hat mal klein angefangen und ist da sicher für jeden Tipp froh :)

Code: Select all
<?php
$benutzer==$HTTP_POST_VARS['benutzer'];
$pass==$HTTP_POST_VARS['pass'];

Wie WIedmann schon anmerkte ist $HTTP_POST_VARS[] veraltet und durch die Verwendung von $_POST[] abgelöst.

Bei den Gleichheitszeichen musst du aufpassen:
- 1 Gleichheitszeichen benutzt man bei Zuweisungen
- 2 oder 3 Gleichheitszeichen bei Vergleichen

Du möchtest hier Werte zuweisen! Hier dürfte auch schon dein Fehler liegen

Code: Select all
print_r($_POST);

kleiner Tipp von mir, falls du es mal brauchen solltest: Wenn du viele Werte zur Kontrolle über print_r() ausgeben möchtest, ist es übersichtlicher, alles mit <pre> Tags zu umschließen. Also etwa so:

Code: Select all
echo '<pre>';
print_r($_POST);
echo '</pre>';


Code: Select all
if($benutzer=="user")  {
   if($pass=="ich")  {

Bei Vergleichen von Variablen mit Werten ist es "best practice" den Wert als linken Parameter des Vergleichs zu schreiben und die Variable rechts. Der Zweck davon ist der: Falls du in der Eile mal ein Gleichheitszeichen vergessen solltest (also aus Versehen eine Zuweisung statt einem Vergleich machst) wird die Fehlersuche um einiges leichter, weil der PHP-Interpreter dann direkt eine Fehlermeldung raushaut.

Es bietet sich hier auch an, direkt beide Variablen in nur einer if-Abfrage zu prüfen, statt mehrere zu verschachteln. So in etwa:

Code: Select all
if ('user' == $benutzer && 'ich' == $pass)  {
    // ...
}


Zum Abschluß möchte ich dir noch raten, deine veralteten Lernmaterialien (egal obs nun ein altes Buch über HTML4 und PHP4 oder online-Tutorials sind, die dir anraten $HTTP_POST_VARS zu verwenden) zu vergessen. Als Anfänger hat man noch die Chance mit kleinen Mühen sich einen einigermaßen aktuellen und übersichtlichen Programmierstil anzueignen.

Such lieber nach XHTML 1.0 als Sprachstandard für dein HTML, und PHP5.

PHP-Tutorials die ich dir empfehlen kann sind:
Schattenbaum
Quakenet
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: If - else funktioniert nicht

Postby Earlybird » 26. February 2010 14:07

Ich habe Eure Anregungen in verschiedenen Konfigurationen eingebracht und alles wieder auf meinen Xampp-Server getestet. Es ist immer wieder das gleiche Ergebnis: Es läuft nur auf dem Server meines Providers. Wäre es möglich, dass mein PHP nicht richtig installiert oder konfiguriert ist? Dagegen spricht eigentlich die Tatsache, dass die Variablen übernommen werden. Ich habe dann einmal in die httpd.config von Apache hinein gesehen und fest gestellt, dass 90% des Inhaltes für mich böhmische Dörfer sind.

Earlybird
User avatar
Earlybird
 
Posts: 14
Joined: 25. February 2010 00:43
Location: Hamburg
Operating System: Windows 8.1 x64

Re: If - else funktioniert nicht

Postby Altrea » 26. February 2010 14:15

Wenn Variablen übernommen werden aber das Script dennoch nicht läuft, ist die Wahrscheinlichkeit relativ hoch, dass der Quelltext noch fehlerhaft ist.

Poste uns doch nochmal den aktuellen Stand des Quellcodes, dann schaun wir nochmal drüber.
Oftmals hilft es auch, sich alle Fehlermeldungen auszugeben ( Stichwort error_reporting(E_ALL) ), und die Variablen per echo auszugeben bis man die Stelle findet, an der es hakt.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: If - else funktioniert nicht

Postby Earlybird » 27. February 2010 20:29

Hallo Altrea,
vielen Dank, dass Du Dich meines Problemes noch einmal annimmst. Der Variableninhalt von $bentzer und $pass werden mit $_POST_VARS[] angezeigt. Als Ergebnis, trotz richtigem Variableninhalt, erhalte ich aber wieder den String "---Eingaben unkorrekt!---" und kann wieder das html-Formular aufrufen. :|
Es gibt keine Fehlermeldung. Das heißt, dass das Programm abgearbeitet wird ohne den IF - ELSE - Vergleich zu registrieren. Wenn es ein Codefehler meinerseits wäre, müßte eigentlich auch bei meinem Provider der Vergleich übergangen werden und das gleiche Ergebnis bringen. Es ist aber nicht so. Hier im Anhang der nach Eueren Vorschlägen geänderte Code und danach die Ergebnissanzeige.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<title>Login-Prozetur</title>
<body>

<?php

$benutzer==$_POST_VARS['benutzer'];
$pass==$_POST_VARS['pass'];

print_r($_POST); //Anzeige Variableninhalt

if('user'==$benutzer && 'ich'==$pass) {
print ("<b> Login korrekt.</b>");
print ("<p> Klicken Sie hier zum Zugang:</p>");
print ("<a href='http://www.lanzarote-team.de'></a>");
}

else {
print ("---Eingaben unkorrekt!---<br>");
print ("<a href='passwort.html'>Noch ein Versuch...</a>");
}
?>
</body>
</html>

Ergebnis:

Array ( [benutzer] => user [pass] => ich )
---Eingaben unkorrekt!---
Noch ein Versuch... :mrgreen:
User avatar
Earlybird
 
Posts: 14
Joined: 25. February 2010 00:43
Location: Hamburg
Operating System: Windows 8.1 x64

Re: If - else funktioniert nicht

Postby Earlybird » 27. February 2010 20:38

entschuldige bitte! Das war der alte Code.
Hier der korrigierte:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<title>Login-Prozetur</title>
<body>

<?php

$benutzer==$_POST_VARS['benutzer'];
$pass==$_POST_VARS['pass'];

print_r($_POST); //Variablenwerte

if('user'==$benutzer && 'ich'==$pass) {
print ("<b> Login korrekt.</b>");
print ("<p> Klicken Sie hier zum Zugang:</p>");
print ("<a href='http://www.lanzarote-team.de'></a>");
}

else {
print ("---Eingaben unkorrekt!---<br>");
print ("<a href='passwort.html'>Noch ein Versuch...</a>");
}
?>
</body>
</html>

Ergebnis:

Array ( [benutzer] => user [pass] => ich )
---Eingaben unkorrekt!---
Noch ein Versuch...
User avatar
Earlybird
 
Posts: 14
Joined: 25. February 2010 00:43
Location: Hamburg
Operating System: Windows 8.1 x64

Re: If - else funktioniert nicht

Postby Altrea » 27. February 2010 21:00

Earlybird wrote:Der Variableninhalt von $bentzer und $pass werden mit $_POST_VARS[] angezeigt.

Wo hast du denn diese $_POST_VARS[] Syntax her? Das kann so nicht funktionieren.

Nehmen wir an, du hast ein Formular mit den beiden Eingabefeldern:
Code: Select all
<input name="benutzer" type="text" />
<input name="pass" type="password" />


Wenn du dies abschickst, erhälst du 2 Array-Key-Value Paare, nämlich
$_POST['benutzer'] und $_POST['pass']

Deshalb gibt dir dein print_r auch diese beiden Werte aus.

Earlybird wrote:Als Ergebnis, trotz richtigem Variableninhalt, erhalte ich aber wieder den String "---Eingaben unkorrekt!---"

Weil das Ergebnis inkorrekt ist. Darauf komme ich später zurück

Earlybird wrote:Wenn es ein Codefehler meinerseits wäre, müßte eigentlich auch bei meinem Provider der Vergleich übergangen werden und das gleiche Ergebnis bringen. Es ist aber nicht so.

Da irrst du. Der einzige Grund warum dein Code bei deinem provider funktioniert ist purer Zufall gepaart mit einer sehr freien php Konfiguration deines Providers. Er hat nämlich sehr sehr wahrscheinlich die php-funktion register_globals aktiviert um inkompatibilitäten mit anderen Scripts (die allesamt sehr schlecht programmiert sind) zu vermeiden.

register_globals sorgt dafür, dass globale Variablen/Arrays (wie $_POST) automatisch zu lokalen Variablen konvertiert werden. Wenn du also $_POST['benutzername'] übergibst, wird automatisch eine Variable $benutzername registriert.
Nun aber zurück zu deinem Script und was du ändern musst, damit es funktioniert:

Earlybird wrote:$benutzer==$_POST_VARS['benutzer'];
$pass==$_POST_VARS['pass'];


Hättest du meinen ersten Verbesserungsversuch dazu schon gelesen, müsste ich mich jetzt nicht wiederholen.
2 Gleichheitszeichen heißt, du vergleichst etwas. Das ist hier aber FALSCH! Resultat von deinem Code ist, dass weder die Variable $benutzer noch die Variable $pass registriert wird, und deswegen deine Abfrage weiter unten fehlschlägt.


Was du eigentlich hier tun möchtest statt des Vergleichs, ist eine ZUWEISUNG!
Für eine Zuweisung benötigst du genau EIN Gleichheitszeichen, nicht mehr und auchnicht weniger.

Noch dazu ist das Zeug mit $_POST_VARS kompletter unsinn.

Richtig wäre also:
$benutzer = $_POST['benutzer'];
$pass = $_POST['pass'];
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: If - else funktioniert nicht

Postby Earlybird » 28. February 2010 13:09

Hallo Altrea,
vielen Dank für Deinen Beitrag. die Variablen $HTTP_POST_VARS[] waren die Übeltäter. Nach dem ich Deinen Rat befolgt hatte und die Übergabe-Variable auf $_POST['...'] reduziert hatte, war alles in Ordnung. Ich werde mich jetzt erst einmal um top aktuelles Lehrmaterial bemühen. Das von mir erstellte Programm beruhte auf einem Lehrbuch von Michael Seeboerger-Weichselbaum "Webseiten dynamisch programmieren" (PHP4+5) und datiert aus dem Jahr 2005. wenn Du empfehlenswerte Literatur weißt, möglichst in deutsch, wäre ich Dir für eine Mitteilung dankbar.
Earlybird
User avatar
Earlybird
 
Posts: 14
Joined: 25. February 2010 00:43
Location: Hamburg
Operating System: Windows 8.1 x64

Re: If - else funktioniert nicht

Postby Altrea » 28. February 2010 13:47

Earlybird wrote:die Variablen $HTTP_POST_VARS[] waren die Übeltäter. Nach dem ich Deinen Rat befolgt hatte und die Übergabe-Variable auf $_POST['...'] reduziert hatte, war alles in Ordnung.

Das alleine hat das Problem ganz sicher nicht gelöst, sofern du deine Vergleiche nicht auch in Zuweisungen geändert hast.

Earlybird wrote:Ich werde mich jetzt erst einmal um top aktuelles Lehrmaterial bemühen.

Das fände ich auch sehr empfehlenswert ^^

Earlybird wrote:wenn Du empfehlenswerte Literatur weißt, möglichst in deutsch, wäre ich Dir für eine Mitteilung dankbar.
Earlybird

Ich kann dir da die "von Kopf bis Fuss" Reihe aus dem Hause O'Reilly wärmstens ans Herz legen. Sie sind sehr anschaulich und praxisorientiert geschrieben, bombardieren einen nicht mit Fachausdrücken und sind für Einsteiger ideal, da sie einen Schritt für Schritt führen, statt nur ein Nachschlagewerk für Funktionen zu sein. Ich setze sie selbst regelmäßig bei Schulungen ein.

Folgende zwei Bände kommen für dich in Frage

HTML mit CSS und XHTML von Kopf bis Fuß
Die Auflage ist zwar von 2006, doch immernoch sehr aktuell. In dem Buch wird dir zuerst gültiges HTML4 beigebracht um dann direkt die Vorteile und Unterschiede zu XHTML1 zu veranschaulichen. Die Feinheiten von HTML kommen im Zusammenhang mit PHP schnell zum Tragen (Beispiel Zeichenkodierung im Zusammenhang mit Umlauteproblematik). Deshalb würde ich dir zu diesem Buch raten, auch wenn du vielleicht im Moment noch glaubst, dass dieses Buch für dich nicht so notwendig ist.

PHP & MySQL von Kopf bis Fuß
Die Auflage ist von 2009. Sie behandelt alles Grundlegende zu PHP5 und MySQL und sogar einige Exkurse in Themen, die man in einem Anfängerbuch so vielleicht nicht erwartet. Das einzige was mir bei dem Buch fehlt ist das Thema Objektorientierte Programmierung, also der Umgang mit Klassen und Objekten. Würde ich jetzt aber nicht direkt als Nachteil sehen, da das Anfänger in der Regel Anfangs eher überfordert als fördert.

Die Bücher kosten nicht wenig, das ist klar. Muss man sich überlegen, ob einem das ein gutes Lehrbuch wert ist
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: If - else funktioniert nicht

Postby Earlybird » 28. February 2010 20:18

Danke für die Buchtips. Die Frage der Anschaffung dieser Bücher erledigt sich für mich ganz von selbst. Ich finde es auf die Zeit gesehen langweilig und unbefriedigend immer nur vom Wissen anderer zu provitieren, womit ich aber nicht sagen möchte, dass ich euch nicht doch von Zeit zu Zeit mit Fragen nerven werde. Denn bis ich hier anderen Hilfestellung geben kann, wird es wohl noch etwas dauern.
M.f.G.
Earlybird
User avatar
Earlybird
 
Posts: 14
Joined: 25. February 2010 00:43
Location: Hamburg
Operating System: Windows 8.1 x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 14 guests