bisher funktionierender php-Code bringt nur noch Fehler

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

bisher funktionierender php-Code bringt nur noch Fehler

Postby Carlo_46 » 16. March 2013 19:40

Folgender Code
Code: Select all
   $config[dbhost]       = "localhost";
   $config[dbname]       = "test";
   $config[dbuser]       = "root";
   $config[dbpass]       = "passwort";

funktioniert nicht mehr sondern erzeugt erzeugt jetzt den Fehler:
Notice: Use of undefined constant dbhost - assumed 'dbhost' in C:\xampp\htdocs\myweb\ANWENDUNG\_inc\config.php on line 14
Notice: Use of undefined constant dbname - assumed 'dbname' in C:\xampp\htdocs\myweb\ANWENDUNG\_inc\config.php on line 15
Notice: Use of undefined constant dbuser - assumed 'dbuser' in C:\xampp\htdocs\myweb\ANWENDUNG\_inc\config.php on line 16
Notice: Use of undefined constant dbpass - assumed 'dbpass' in C:\xampp\htdocs\myweb\ANWENDUNG\_inc\config.php on line 17

Woran kann das liegen?

In der vorhergehenden XAMPP-Version unter Windows XP hat das immer so funktioniert. Hat sich da was geändert im PHP oder hat das mit Win7 zu tun?
Der folgende Satz ist richtig.
Der vorherige Satz ist falsch.
User avatar
Carlo_46
 
Posts: 6
Joined: 16. March 2013 19:20
Location: Mühlhausen/Thür.
Operating System: Windows 7 Prof

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Altrea » 16. March 2013 20:11

Der Code funktioniert noch immer, nur gibt der php interpreter je nach Einstellung diese Meldungen zurück, um dich als Programmierer darauf hinzuweisen, das du unsauber programmierst.

Array Schlüssel sollten in einfachen Anführungsstriche gesetzt werden, ansonsten versucht php diese als definierte konstanten zu finden.
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: 11933
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Carlo_46 » 16. March 2013 20:23

Danke für die Antwort, also muss ich
Code: Select all
   $config['dbhost']       = "localhost";

schreiben. Das klappt dann auch.
Das war mir echt neu, dass man das so machen muss, weil es jahrelang ohne ging :)
Der folgende Satz ist richtig.
Der vorherige Satz ist falsch.
User avatar
Carlo_46
 
Posts: 6
Joined: 16. March 2013 19:20
Location: Mühlhausen/Thür.
Operating System: Windows 7 Prof

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Carlo_46 » 16. March 2013 20:43

Nun tut sich gleich das nächste Problem auf :x
Folgender Code in meiner index.php:
Code: Select all
    $page       = $_GET['page'];
    $subpage    = $_GET['subpage'];
   //wenn leer, definiert setzen
    if ($page == "") $page = "home";
    if ($subpage == "") $subpage = "start";

Solange die URL lautet "http://myurl/index.php?page=home&subpage=start" ist alles in Ordnung.
Aber wen man nur die URL "http://myurl/index.php" nutzt, kommen diese Fehler:

Notice: Undefined index: page in C:\xampp\htdocs\myweb\ANWENDUNG\index.php on line 6
Notice: Undefined index: subpage in C:\xampp\htdocs\myweb\ANWENDUNG\index.php on line 7

Wie kann man prüfen, ob die Argumente, die mit $_GET geholt werden, in der Adresszeile vorhanden sind?
In meinen bisherigen Sites waren diese Variablen dann einfach leer. Ist das eventuell nur eine Einstellung im PHP, und wenn ja, weiß jemand, welche?
Der folgende Satz ist richtig.
Der vorherige Satz ist falsch.
User avatar
Carlo_46
 
Posts: 6
Joined: 16. March 2013 19:20
Location: Mühlhausen/Thür.
Operating System: Windows 7 Prof

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Altrea » 16. March 2013 21:18

Carlo_46 wrote:Das war mir echt neu, dass man das so machen muss, weil es jahrelang ohne ging :)

Neu ist das nicht und es geht ja immernoch ohne (dank der großzügigen Fehlerbehandlung vom php interpreter). Du hast bisher wohl nur mit php Installationen gearbeitet, die unkritische Meldungen unterdrücken.

Carlo_46 wrote:Notice: Undefined index: page in C:\xampp\htdocs\myweb\ANWENDUNG\index.php on line 6
Notice: Undefined index: subpage in C:\xampp\htdocs\myweb\ANWENDUNG\index.php on line 7

Wie kann man prüfen, ob die Argumente, die mit $_GET geholt werden, in der Adresszeile vorhanden sind?

isset() und empty() sind die Funktionen der Wahl.

Carlo_46 wrote:In meinen bisherigen Sites waren diese Variablen dann einfach leer. Ist das eventuell nur eine Einstellung im PHP, und wenn ja, weiß jemand, welche?

Du kannst die Meldungen unterdrücken, doch damit belügst du dich nur selbst. Ich würde dir empfehlen dich über die einzelnen Hinweismeldungen zu informieren und darauf zu reagieren. Nur so wirst du besser und programmierst sauberer.
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: 11933
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Carlo_46 » 16. March 2013 21:22

Vielen Dank für Deine prompten Antworten!
Nun werde ich wohl erstmal meine php-Seiten gründlich überarbeiten.
Der folgende Satz ist richtig.
Der vorherige Satz ist falsch.
User avatar
Carlo_46
 
Posts: 6
Joined: 16. March 2013 19:20
Location: Mühlhausen/Thür.
Operating System: Windows 7 Prof

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Carlo_46 » 16. March 2013 21:53

Der Kopf meiner index.php sieht nun so aus:
Code: Select all
   include("_inc/config.php");
   include("_inc/functionen.php");
   include("_inc/bz.php");

   if (isset($_GET['page'])) {
      $page = $_GET['page'];
   }else{
      $page = "";
   }
    if (isset($_GET['subpage'])) {
      $subpage = $_GET['subpage'];
   }else{
      $subpage = "";
   }   
   //wenn leer, definiert setzen
    if ($page == "") $page = "home";
    if ($subpage == "") $subpage = "start";

Und es kommt keine Fehlermeldung mehr! :D
Also nochmals vielen Dank für die prompte Hilfe! 8)
Der folgende Satz ist richtig.
Der vorherige Satz ist falsch.
User avatar
Carlo_46
 
Posts: 6
Joined: 16. March 2013 19:20
Location: Mühlhausen/Thür.
Operating System: Windows 7 Prof

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Altrea » 17. March 2013 04:48

Sieht doch schon ganz gut aus :)

Man kann die isset Prüfung und setzen eines Default-Wertes natürlich noch vereinfachen, indem man den ternären Operator (eine Art Kurzschreibweise für if/else Konstrukte) verwendet. Der geht ungefähr so:
Code: Select all
<?php
$var = isset( $_GET['var'] ) ? $_GET['var'] : 'Standardwert';


Dadurch wird
Code: Select all
if (isset($_GET['page'])) {
      $page = $_GET['page'];
   }else{
      $page = "";
   }
    if (isset($_GET['subpage'])) {
      $subpage = $_GET['subpage'];
   }else{
      $subpage = "";
   }

zu einem handlichen Zweizeiler:
Code: Select all
$page = isset( $_GET['page'] ) ? $_GET['page'] : '';
$subpage = isset( $_GET['subpage'] ) ? $_GET['subpage'] : '';


Weiterhin solltest du Eingaben die vom User manipulierbar sind prüfen, bevor du sie verwendest.
Eine einfache und sichere Möglichkeit wäre zum Beispiel eine Whitelist (die nebenbei deinen Code noch weiter verschlankt):
Code: Select all
include("_inc/config.php");
include("_inc/functionen.php");
include("_inc/bz.php");

$allowed_pages = array( 'default'=>'home', 'page2', 'page3' );
$allowed_subpages = array( 'default'=>'start', 'sub2', 'sub3' );

$page = ( isset( $_GET['page'] ) && in_array( $_GET['page'], $allowed_pages ) )
      ? $_GET['page']
      : $allowed_pages['default'];

$subpage = ( isset( $_GET['subpage'] ) && in_array( $_GET['subpage'], $allowed_subpages ) )
         ? $_GET['subpage']
         : $allowed_subpages['default'];

(auch hier könnte natürlich der ternäre Operator einzeilig geschrieben werden)
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: 11933
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: bisher funktionierender php-Code bringt nur noch Fehler

Postby Carlo_46 » 17. March 2013 16:34

Danke für die Hinweise! Die behalt ich mal im Hinterkopf.
Im Moment ist es so, dass ich in einer case-Anweisung nur auf die vorhandenen pages und subpages prüfe und wenn keine der vorhanden zutrifft (User hat manipuliert), dann eine Standardpage aufgerufen wird.
Die von dir erwähnte Lösung (Vorabprüfung) hat natürlich eine gewisse Eleganz, die ich im Verlauf der Weiterentwicklung nutzen werde :D
Der folgende Satz ist richtig.
Der vorherige Satz ist falsch.
User avatar
Carlo_46
 
Posts: 6
Joined: 16. March 2013 19:20
Location: Mühlhausen/Thür.
Operating System: Windows 7 Prof


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 29 guests