neueste Xampp Version

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

neueste Xampp Version

Postby ingfra » 14. December 2011 13:23

Seitdem ich den neuen Apache installiert habe, geht gar nichts mehr.
PhP wird nicht verarbeitet.
Kann mir jemand sagen woran das liegen kann.
Ist evtl meine php-Programmierung überholt?
Beispielschnipsel:

<?php
session_start();

if ($_SESSION['login']) {

include 'head.php';
include 'body.php';
include 'navi.php';
switch ( $_GET['mein_inhalt'] ) {

case home:
include 'home.php';
break;
case eingeloggt:
include 'eingeloggt.php';
break; ..................

Er meckert schon an Zeile 4 rum, nämlich:

Notice: Undefined index: login in C:\xampp\htdocs\meineDomain.de......


Hilfe!

Was mache ich falsch!
Bzw wo bekomme ich wieder meine alte Version des Apaches zurück?

PS.: im Internet also auf dem server läuft die Seite astrein!
ingfra
 
Posts: 4
Joined: 14. December 2011 12:54
Operating System: windows xp

Re: neueste Xampp Version

Postby Altrea » 14. December 2011 14:40

Hallo ingfra,

ingfra wrote:PhP wird nicht verarbeitet.

Wäre das der Fall, würdest du keine Notice bekommen. PHP wird also verarbeitet.


ingfra wrote:Kann mir jemand sagen woran das liegen kann.
Ist evtl meine php-Programmierung überholt?

überholt würde ich nicht sagen, eher schlampig.
Dein Problem: Du verwendest Werte, die du vorher nicht überprüft hast.

ingfra wrote:if ($_SESSION['login']) {

Der wert login existiert zu diesem Zeitpunkt nochnicht in der Session.
Vielleicht wird er erst unter bestimmten Bedingungen gesetzt, das kann ich nicht sagen, es ist schließlich dein Quelltext.

Um das Problem zu lösen, lege ich dir zwei PHP-Funktionen ans Herz: isset() und empty()


mit freundlichen Grüßen,
Altrea
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: 8299
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 10 Pro x64

Re: neueste Xampp Version

Postby ingfra » 14. December 2011 17:11

<?php
session_start();

if (isset($_SESSION['login'])) {

include 'head.php';
include 'body.php';
include 'navi.php';
switch ($_GET['mein_inhalt']) {

case home:
include 'home.php';
break;
case eingeloggt:
include 'eingeloggt.php';
break;
case lebenslauf_1:
include 'lebenslauf_1.php';
break;
case kontakt:
include 'kontakt.php';
break;
;
case referenzen:
include 'referenzen.php';
break;
case zeugnisse:
include 'zeugnisse.php';
break;
case login:
include 'login.php';
break;
case fehler:
include 'fehler.php';
break;
case eingabe:
include 'eingabe.php';
break;
default:
include 'home.php';
}
include 'fuss.php';
} else {

include 'head.php';
include 'body.php';
include 'navi.php';
switch ( $_GET['mein_inhalt'] ) {

case home:
include 'home.php';
break;
case eingeloggt:
include 'eingeloggt.php';
break;
case lebenslauf_1:
include 'login.php';
break;
case kontakt:
include 'kontakt.php';
break;

case referenzen:
include 'referenzen.php';
break;
case zeugnisse:
include 'login.php';
break;
case login:
include 'login.php';
break;
case fehler:
include 'fehler.php';
break;
case eingabe:
include 'eingabe.php';
break;
default:
include 'home.php';
}
include 'fuss.php';

}
?>
.....Danke schonmal!
Notice: Undefined index:.......ist beseitigt
Nun meckert er nur noch darüber:

case eingeloggt:
include 'eingeloggt.php';
break
und
ab Zeile 48
Use of undefined constant home - assumed 'home' in C:\xampp\htdocs\meinedomain.de\index.php on line 50

Irgendwie krieg ich das nicht hin mit isset und empty, die Programmierung ist schon etwas älter, (2007), damals wurde uns das so gelehrt.
hab leider im Internet noch keinen passenden CodeSchnipsel gefunden.
ingfra
 
Posts: 4
Joined: 14. December 2011 12:54
Operating System: windows xp

Re: neueste Xampp Version

Postby Altrea » 14. December 2011 18:23

Bitte setze deine Quelltexte in die dafür vorgesehende code-BB-Codes (code-Button über dem Texteingabefeld hier im Forum). Das macht es für uns viel übersichtlicher.
ingfra wrote:Nun meckert er nur noch darüber:

case eingeloggt:
include 'eingeloggt.php';
break

Und was soll ich dazu sagen, ohne die zugehörige Fehlermeldung?
Das einzige, was mir hier auffällt ist das Fehlende ; am Ende der break Zeile und das der case einen nicht möglichen Datentyp hat (man kann keine Konstanten-Bezeichner in Variablen packen, nur dessen Werte).

ingfra wrote:und
ab Zeile 48
Use of undefined constant home - assumed 'home' in C:\xampp\htdocs\meinedomain.de\index.php on line 50

Ich sehe keine Zeilennummern hier im Forum. Bitte die jeweiligen Zeilen mitzitieren. Du erwartest hier Hilfe also solltest du es uns so einfach wie möglich machen, dir zu helfen. Ich fang hier nicht an groß Zeilen durchzuzählen.

Die Fehlermeldung deutet aber darauf hin, dass du irgendwo eine Konstante statt eines Strings verwendest. Strings setzt man in einfache (') oder doppelte (") Anführungsstriche.
Vermutlich ist das die Stelle deines switch Blockes. cases sollten immer dem Datentyp entsprechen, als dem sie auch erwartet werden. In deinem Fall vermutlich alles Strings, könnten aber auch integers, boolean-Werte, etc sein.

Also wäre jeweils folgendes richtig:
Code: Select all
...
case 'home':
...



ingfra wrote:die Programmierung ist schon etwas älter, (2007), damals wurde uns das so gelehrt.

Das ist schade, denn auch schon damals wären euch solche Meldungen präsentiert worden.
"Leider" kann man definieren welche PHP-Meldungen einem angezeigt werden sollen und welche nicht. Dadurch fallen viele Schlampigkeiten einfach unter dem Tisch.
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: 8299
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 10 Pro x64

Re: neueste Xampp Version

Postby ingfra » 14. December 2011 19:49

Code: Select all





<?php
session_start();

if (isset($_SESSION['login'])) {

      include 'head.php';
      include 'body.php';
      include 'navi.php';

      switch ( $_GET['mein_inhalt'] ) {

      case 'home':
         include 'home.php';
         break;
      case 'eingeloggt':
         include 'eingeloggt.php';
         break;   
      case 'lebenslauf_1':
         include 'lebenslauf_1.php';
         break;   
      case 'kontakt':
         include 'kontakt.php';
         break;   
;
      case 'referenzen':
         include 'referenzen.php';
         break;
      case 'zeugnisse':
         include 'zeugnisse.php';
         break;
      case login:
         include 'login.php';
         break;
      case 'fehler':
         include 'fehler.php';
         break;
      case 'eingabe':
         include 'eingabe.php';
         break;
      default:
         include 'home.php';
      }
      include 'fuss.php';
} else {

      include 'head.php';
      include 'body.php';
      include 'navi.php';
      switch  ($_GET['mein_inhalt'] ) {

      case 'home':
         include 'home.php';
         break;
      case 'eingeloggt':
         include 'eingeloggt.php';
         break;   
      case 'lebenslauf_1':
         include 'login.php';
         break;   
      case 'kontakt':
         include 'kontakt.php';
         break;
   
      case 'referenzen':
         include 'referenzen.php';
         break;
      case 'zeugnisse':
         include 'login.php';
         break;
      case 'login':
         include 'login.php';
         break;
      case 'fehler':
         include 'fehler.php';
         break;
      case 'eingabe':
         include 'eingabe.php';
         break;         
      default:
         include 'home.php';
      }
      include 'fuss.php';

   }   
?>      
   
      
   


Sorry, das habe ich nicht gesehen mit dem code,

Jetzt meckert er nur noch die zeile 49 an
und zwar wenn ich auch logout klicke und er zurück auf die index soll.

Notice: Undefined index: mein_inhalt in C:\xampp\htdocs\meinedomain.de\index.php on line 49
Zeile 49: switch ($_GET['mein_inhalt'] ) {


Alles andere läuft einwandfrei.

Hier nochmal die logout-datei:
<?
session_start();
session_unset();
session_destroy();
header("Location:index.php");
?>
ingfra
 
Posts: 4
Joined: 14. December 2011 12:54
Operating System: windows xp

Re: neueste Xampp Version

Postby WilliL » 14. December 2011 20:55

ingfra wrote:Notice: Undefined index: mein_inhalt in C:\xampp\htdocs\meinedomain.de\index.php on line 49
Zeile 49: switch ($_GET['mein_inhalt'] ) {

zu 99,9% die Antwort, die oben schon einmal gegeben wurde.
nicht definiert heißt nicht definiert, trifft hier vermutlich immer nur beim 1. Aufruf zu.
Abhilfe: testen ob $_GET['mein_inhalt'] definiert ist - wenn nicht einen Initialwert (Startwert) zuweisen

ich würde beim logout script "<?php" statt "<?" nutzen
Willi
WilliL
 
Posts: 661
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: neueste Xampp Version

Postby ingfra » 17. December 2011 17:45

<?php
session_start();

if (isset($_SESSION['login'])) {

include 'head.php';
include 'body.php';
include 'navi.php';

switch ( $_GET['mein_inhalt'] ) {

case 'home':
include 'home.php';
break;
case 'eingeloggt':
include 'eingeloggt.php';
break;
case 'lebenslauf_1':
include 'lebenslauf_1.php';
break;
case 'kontakt':
include 'kontakt.php';
break;
;
case 'referenzen':
include 'referenzen.php';
break;
case 'zeugnisse':
include 'zeugnisse.php';
break;
case login:
include 'login.php';
break;
case 'fehler':
include 'fehler.php';
break;
case 'eingabe':
include 'eingabe.php';
break;
default:
include 'home.php';
}
include 'fuss.php';
} else {

include 'head.php';
include 'body.php';
include 'navi.php';


if(isset($_GET['mein_inhalt'])){
switch ($_GET['mein_inhalt'] ) {

case 'home':
include 'home.php';
break;
case 'eingeloggt':
include 'eingeloggt.php';
break;
case 'lebenslauf_1':
include 'login.php';
break;
case 'kontakt':
include 'kontakt.php';
break;

case 'referenzen':
include 'referenzen.php';
break;
case 'zeugnisse':
include 'login.php';
break;
case 'login':
include 'login.php';
break;
case 'fehler':
include 'fehler.php';
break;
case 'eingabe':
include 'eingabe.php';
break;
default:
include 'home.php';
}
include 'fuss.php';

}
}
?>





So jetzt klappt was alles, nur kriege ich es nicht hindes 'mein_inhalt' zu benennen.
Dieser Inhalt soll bei Aufruf der index.php mit 'home' gefüllt sein und dann jeweils
mit den angeklicken Inhalten wie referenzen etc.
Wenn ich jetzt die index-seite aufrufe erscheint eine seite mit Navigation und sonst nichts.
Klicke ich auf die Navipunkte, wechseln die include-Dateien wie gewollt.
Auf Home geklickt erscheint die Home, die ich natürlich als index-seite brauche.
Fehlermeldungen keine mehr, aber 1. seite ohne inhalt.
Ich bin mit meinem Latein am Ende.
Wäre über ein php- Beispiel wie ich 'mein_inhalt' definieren kann serh sehr dankbar.

LG :shock:
ingfra
 
Posts: 4
Joined: 14. December 2011 12:54
Operating System: windows xp

Re: neueste Xampp Version

Postby WilliL » 17. December 2011 18:18

Code: Select all
// vor switch dafür sorgen, dass die Entscheidungsvariable definiert ist
if (!isset($_GET['mein_inhalt']))
   $_GET['mein_inhalt'] = 'home'; // wenn nicht definiert home nehmen

ps: ist nicht getestet
wenn $_GET['mein_inhalt'] nicht existiert, kann deine switch nicht greifen, also auch nicht der default-Wert.
Da ein "else" bei dir nicht definiert ist ($_GET['mein_inhalt'] existiert ja nicht beim 1. Aufruf) wird wie programmiert nichts ausgegeben.

siehe altrea's Hinweis
Um das Problem zu lösen, lege ich dir zwei PHP-Funktionen ans Herz: isset() und empty()
Willi
WilliL
 
Posts: 661
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: neueste Xampp Version

Postby Altrea » 18. December 2011 04:03

WilliL wrote:
Code: Select all
// vor switch dafür sorgen, dass die Entscheidungsvariable definiert ist
if (!isset($_GET['mein_inhalt']))
   $_GET['mein_inhalt'] = 'home'; // wenn nicht definiert home nehmen

Es ist best practice die Superglobalen Variablen $_GET, $_POST und $_COOKIE nach der Übergabe nicht direkt zu manipulieren und diese Superglobalen Variablen nie direkt in Bedingungen zu verwenden (aus Sicherheitsgründen). Daher würde ich, statt den Wert $_GET['mein_inhalt'] von Hand zu setzen, eine neue Variable $mein_inhalt definieren und bei dieser dann entweder den $_GET Wert zu übertragen, wenn dieser gesetzt ist, oder einen Standardwert 'home' definieren. Selbstverständlich muss dein Switch-Case Gebilde dann ebenfalls auf die neue Variable ansprechen.

Eine mögliche Lösung wäre dann folgende:
Code: Select all
<?php
session_start();

if (isset($_SESSION['login'])) {

    include 'head.php';
    include 'body.php';
    include 'navi.php';

    $mein_inhalt = 'home';
    if( !empty( $_GET['mein_inhalt'] ) ) {
        $mein_inhalt = $_GET['mein_inhalt'];
    }

    switch ( $mein_inhalt ) {
[... etc ...]


Auch dieser Ansatz ist noch Verbesserungswürdig, aber das würde den Rahmen dieses Forums hier sprengen.
Schau dir doch einfach mal das PHP Tutorial von Quakenet an. Dort wird auch eine Art Templatesystem gebaut. Das geht in die Richtung. Generell ist das ganze Tutorial empfehlenswert, da es dein Wissen praxisnah und Baustein für Baustein aufbauen kann.
Oder nimm dir gleich ein MVC-Framework wie Codeigniter Und bau dein Projekt auf sowas auf. MVC ist der erste Weg PHP-Code sauber in deren Aufgaben zu trennen. Codeigniter ist besonders für Anfänger geeignet und hat eine sehr gute Dokumentation.

mit freundlichen Grüßen,
Altrea
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: 8299
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 10 Pro x64


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 7 guests