| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

20-07-2009, 15:44
|
|
sdvs
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 39
|
|
Variable vergleichen
Hallo an alle
ich habe ein kleines Problem und komme damit nicht weiter!
Folgendes:
ich möchte gerne eine Variable vergleichen und prüfen, ob es auch die richtige ist, wenn nicht, dann soll eine Fehlerseite geladen werden!
Dies ist meine bisherige Überprüfung:
PHP-Code:
if (isset($_GET['Seite']) && is_string($_GET['Seite'])) { $site = $_GET['Seite'];} else { $site = 'Startseite';
Hier ist das Problem, dass erstmal nur überprüft wird, ob die Variable "Seite" da ist, wenn ja welchen Wert hat sie, diesen Wert dann $site zuordnen und demendsprechenden Content laden, ist die Variable Seite nicht angegeben, dann ordne der Variable $site den Wert Startseite zu.
Ist jetzt die Variable falsch, z.B. Seite = Seiteee, dann ornde der Variable $site wieder den Wert "Startseite" zu.. Ist ja so auch richtig (laut Code)..
Aber ich möcht folgende Überprüfung:
wenn Seite != Seite oder Seite nicht vorhanden, dann ordne der Varaiable $site den Wert "pagenorfound" zu
wenn Seite vorhanden, dann ordne den Wert von Seite der Variable $site zu...
Ich hoffe ihr könnt mir helfen!
|

20-07-2009, 16:34
|
|
phpMorpheus2
Registrierter Benutzer
|
|
Registriert seit: Apr 2007
Beiträge: 646
|
|
Ich habe dafür z.B. die Klasse als Beispiel:
PHP-Code:
class view {
public $path = 'templates';
public $template;
public function setTemplate($template) {
$this->template = $template;
}
public function loadTemplate(){
$file = $this->path."\\tmpl.".$this->template.".php";
$exists = file_exists($file);
if ($exists === true){
include($file);
} else {
$this->template = 'tmpl.default';
$file = $this->path."\\".$this->template.".php";
include($file);
}
}
}
|

20-07-2009, 17:18
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von sdvs
Hier ist das Problem, dass erstmal nur überprüft wird, ob die Variable "Seite" da ist, wenn ja welchen Wert hat sie
|
Nein, der Wert wird nicht geprüft, höchstens welchen Typ der Wert hat - und das ist überflüssig, denn GET/POST/COOKIE liefern immer Strings.
Zitat:
Aber ich möcht folgende Überprüfung:
wenn Seite != Seite oder Seite nicht vorhanden, dann ordne der Varaiable $site den Wert "pagenorfound" zu
wenn Seite vorhanden, dann ordne den Wert von Seite der Variable $site zu...
|
Dann müsstest du erst mal definieren, wann ein Wert als "vorhanden" gelten soll.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

20-07-2009, 17:55
|
|
sdvs
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 39
|
|
Zitat:
Zitat von wahsaga
Dann müsstest du erst mal definieren, wann ein Wert als "vorhanden" gelten soll.
|
ein Wert soll als vorhanden gelten, wenn ein String, egal welcher, in der Variable steckt.
Denn steckt keiner drin, dann wird der String "Startseite" zugewiesen!
Ist aber die ganze Variable falsch, dann wird ebenfalls "Startseite" zugewiesen!
Ich habe das absichtlich so geschrieben, dann mann könnte auch im else zweig angeben "pagenotfound" dann würde aber bei dem Aufruf der Seite ohne Variable ebenfalls die Seite pagenotfound aufgerufen werden.
deshalb soll geprüft werden, ob die Seite mit options oder Variablen aufgerufen werden oder ohne...
funktion:
wenn Seite nicht = Seite, dann pagenotfound
sollte aber die Webseite ohne Parameter aufgerufen werden, dann soll der Wert Startseite zugeordnet werden.
Bisher hatte ich immer folgendes:
1. Webseite hatte falsche Variable, dann Startseite (nicht gewünscht)
2. Webseite hatte richtige Variable, nur falschen Wert, dann pagenotfound (klappt schon)
Ich habe den else zweig dann mal umgeschrieben und den Wert "pagenotfound" reingeschrieben, hatte zur Folge, dass bei einem Aufruf der Webseite ohne Parameter die pagenotfound geladen wurde, ist ja auch verständlich!
Ich möchte nun einfach überprüfen, ob die Varaiable wirklich Seite ist oder nicht, wenn sie es nicht ist, dann pagenotfound, egal welcher Wert drin steckt..
Problem ist, dass ich auch nicht einfach eine Abfrage starten kann, ob Seite = Seite ist, denn wird die Seite ohne Parameter aufgerufen, dann würde ja wieder pagenotfound als Wert gelierfert werden...
|

20-07-2009, 18:09
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von sdvs
ein Wert soll als vorhanden gelten, wenn ein String, egal welcher, in der Variable steckt.
|
Dazu reicht eigentlich empty bereits aus.
Zitat:
|
Denn steckt keiner drin, dann wird der String "Startseite" zugewiesen!
|
Noch mal, es gibt an dieser Stelle (wenn) nur Werte vom Typ STRING.
Zitat:
|
Ist aber die ganze Variable falsch, dann wird ebenfalls "Startseite" zugewiesen!
|
Mit "falsch" meinst du also gar nicht gesetzt, undefiniert?
Bitte drücke dich so präzise wie möglich aus, das ist an der Stelle absolut erforderlich.
Zitat:
|
Ich habe das absichtlich so geschrieben, dann mann könnte auch im else zweig angeben "pagenotfound" dann würde aber bei dem Aufruf der Seite ohne Variable ebenfalls die Seite pagenotfound aufgerufen werden.
|
Na dann könnte man auf isset zurückgreifen für die erste Prüfung, ob überhaupt ein Parameter übergeben wurde, und dann empty nachschieben.
Zitat:
funktion:
wenn Seite nicht = Seite, dann pagenotfound
|
Das ist wieder zu unpräzise - was soll "Seite nicht = Seite" ausdrücken?
Zitat:
Bisher hatte ich immer folgendes:
1. Webseite hatte falsche Variable, dann Startseite (nicht gewünscht)
2. Webseite hatte richtige Variable, nur falschen Wert, dann pagenotfound (klappt schon)
|
Was du als "falsche Variable" ansiehst, hast du immer noch nicht klar definiert.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

20-07-2009, 18:12
|
|
sdvs
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 39
|
|
Zitat:
Zitat von wahsaga
Dazu reicht eigentlich empty bereits aus.
Noch mal, es gibt an dieser Stelle (wenn) nur Werte vom Typ STRING.
Mit "falsch" meinst du also gar nicht gesetzt, undefiniert?
Bitte drücke dich so präzise wie möglich aus, das ist an der Stelle absolut erforderlich.
Na dann könnte man auf isset zurückgreifen für die erste Prüfung, ob überhaupt ein Parameter übergeben wurde, und dann empty nachschieben.
Das ist wieder zu unpräzise - was soll "Seite nicht = Seite" ausdrücken?
Was du als "falsche Variable" ansiehst, hast du immer noch nicht klar definiert.
|
richtige Variable = Seite
falsche Variable = Seiteeee
Seite != Seite soll ausdrücken, wenn die variable anstatt Seite Seiteee heißt, dann pagenotfound!
diese Überprüfung brauche ich.. Das der Wert in der Variable Seite ein String ist, habe ich bereits verstanden oder an welcher Stelle habe ich mich dies bezüglich falsch ausgedrückt
Geändert von sdvs (20-07-2009 um 18:18 Uhr)
|

20-07-2009, 19:14
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von sdvs
richtige Variable = Seite
falsche Variable = Seiteeee
Seite != Seite soll ausdrücken, wenn die variable anstatt Seite Seiteee heißt, dann pagenotfound!
|
Wenn du nur auf einen Parameter namens Seite in deinem Script reagieren willst, dann sind Parameter mit irgendwelchen anderen Namen doch sowieso uninteressant.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

20-07-2009, 22:03
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von wahsaga
Dazu reicht eigentlich empty bereits aus.
|
In den allermeisten Fällen. Man nehme aber an, der String '0' könnte einen Wahrheitswert jenseits von FALSE darstellen, dann fällt man mit empty($_GET['examplevalue']) auf die Nase.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

20-07-2009, 22:38
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
In $_GET Values wirst du immer nur Strings finden, ohne Ausnahme.
|

21-07-2009, 11:01
|
|
sdvs
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 39
|
|
Zitat:
Zitat von wahsaga
Wenn du nur auf einen Parameter namens Seite in deinem Script reagieren willst, dann sind Parameter mit irgendwelchen anderen Namen doch sowieso uninteressant.
|
Normalerweise sollte das so sein... Mein Problem ist aber, dass die variable geändert wurde von site auf seite.. Jetzt hat google die alten urls mit site indexiert und verweist mit alten nicht mehr vorhandenen urls mit der variable site immer auf die startseite..
jetzt möcht ich, dass bei einer falschen variable (genau wie bei einem falschen string in der variable) den wert pagenotfound zuordnen, dazu muss ich aber irgendwie vergleichen, ob das die variable ist, die ich haben will oder nicht!
wenn der wert falsch ist, dann wird schon die pagenotfound geladen.. ist aber jedoch die variable falsch, dann wirdt anstatt pagenotfound startseite der wert in der variable..
ist ja auch verständlich mehr macht die funktion ja nicht, sie soll jetzt erweitert werden um die funktion, dass überprüft wird, ob die variable richtig ist..
ob das überhaupt möglich ist weiß ich nicht, deshalb frage ich euch profis ja!
|

21-07-2009, 13:00
|
|
|
PHP-Code:
$site = isset($_GET['Seite']) && !is_numeric($_GET['Seite']) ? $_GET['Seite'] :'Startsite';
|

21-07-2009, 13:10
|
|
|
Wenn du nur sicher sein willst dss Seite nicht leer ist dann lieber das:
PHP-Code:
$site = isset($_GET['Seite']) && $_GET['Seite']<>'' ? $_GET['Seite'] :'Startseite';
|

21-07-2009, 13:36
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von sdvs
Normalerweise sollte das so sein... Mein Problem ist aber, dass die variable geändert wurde von site auf seite.. Jetzt hat google die alten urls mit site indexiert und verweist mit alten nicht mehr vorhandenen urls mit der variable site immer auf die startseite..
jetzt möcht ich, dass bei einer falschen variable (genau wie bei einem falschen string in der variable) den wert pagenotfound zuordnen, dazu muss ich aber irgendwie vergleichen, ob das die variable ist, die ich haben will oder nicht!
wenn der wert falsch ist, dann wird schon die pagenotfound geladen.. ist aber jedoch die variable falsch, dann wirdt anstatt pagenotfound startseite der wert in der variable..
|
PHP-Code:
$allowed_parameters = array (
'site', 'Seite',
);
$page = 'Startseite'; // Default-Wert
foreach ($allowed_parameters as $parameter) {
if (
isset($_GET[$parameter]) && // nur, wenns den Parameter gibt und
isset($_GET[$parameter][0]) // er nicht leer ist
) {
$page = $_GET[$parameter];
break;
}
}
// ab hier hat $page entweder den voreingestellten Wert
// oder den Wert, der per GET übergeben wurde
Entschuldige bitte, dass ich $page statt des von dir benutzten $site verwendet habe, aber dieser Name erschien mir logischer.
Zitat:
Zitat von combie
In $_GET Values wirst du immer nur Strings finden, ohne Ausnahme.
|
Fall sich das auf ...
Zitat:
Zitat von fireweasel
In den allermeisten Fällen. Man nehme aber an, der String '0' könnte einen Wahrheitswert jenseits von FALSE darstellen, dann fällt man mit empty($_GET['examplevalue']) auf die Nase.
|
... bezog:
Eben! Und weil empty() den String '0' als FALSE bewertet[1] (und TRUE zurückgibt), genauso wie bei einem leeren String '' oder gar keinem Wert, vermeide ich es, empty() zur Auswertung von Strings heranzuziehen. Es gibt bessere Alternativen wie
strlen($string), isset($string[0]) usw.
Bei allen anderen Datentypen stellt das kein Problem dar.
--
[1] empty($var) ist das Gleiche wie !((bool) $var) nur ohne Warnung, wenn die Variable nicht existiert.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (21-07-2009 um 13:57 Uhr)
Grund: Ergänzt
|

21-07-2009, 14:11
|
|
sdvs
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 39
|
|
Zitat:
Zitat von fireweasel
PHP-Code:
$allowed_parameters = array ( 'site', 'Seite', ); $page = 'Startseite'; // Default-Wert foreach ($allowed_parameters as $parameter) { if ( isset($_GET[$parameter]) && // nur, wenns den Parameter gibt und isset($_GET[$parameter][0]) // er nicht leer ist ) { $page = $_GET[$parameter]; break; } } // ab hier hat $page entweder den voreingestellten Wert // oder den Wert, der per GET übergeben wurde
Entschuldige bitte, dass ich $page statt des von dir benutzten $site verwendet habe, aber dieser Name erschien mir logischer.
Fall sich das auf ...
... bezog:
Eben! Und weil empty() den String '0' als FALSE bewertet[1] (und TRUE zurückgibt), genauso wie bei einem leeren String '' oder gar keinem Wert, vermeide ich es, empty() zur Auswertung von Strings heranzuziehen. Es gibt bessere Alternativen wie
strlen($string), isset($string[0]) usw.
Bei allen anderen Datentypen stellt das kein Problem dar.
--
[1] empty($var) ist das Gleiche wie !((bool) $var) nur ohne Warnung, wenn die Variable nicht existiert.
|
Danke für den Lösungsansatz.. aber selbst wenn ich site aus den erlaubten parametern rausnehme, dann habe ich nach wie vor das problem, dass auf startseite verwiesen wird, wenn site anstatt seite angegeben wird...
danke aber trotzdem!
|

21-07-2009, 14:24
|
|
sdvs
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 39
|
|
entschuldige...
mitlerweile habe ich gesehen, dass sich schon etwas geändert hat! jetzt würde egal ob site oder Seite angegeben wird (insofern der Wert in der Variable stimmt) immer die richtige Seite angezeigt werden und wenn der Wert nicht stimmt, dann eben die pagenotfound..
wäre es möglich etwas einzusetzen, dass jede variable (ausser Seite) als falsch gewertet wird und dann sofort auf pagenotfound verwiesen wird?
die Lösung ist schon gut, danke dafür.. Ist jetzt nur rein interessehalber..
Also zusammengefasst:
Seite ohne parameter 'Startseite'
Seite mit parameter 'Seite' und richtigem String Content laden
Seite mit parameter 'Seite' und falschem String 'pagenotfound'
Seite mit falschem paramter zb seiteeeee und richtigem string 'pagenotfound'
Seite mit falschem Parameter und falschem String 'pagenotfound'
Vielen lieben Dank schonmal für eure Hilfen!
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|