Switch Abfrage

Megaman2044

Lt. Junior Grade
Registriert
Feb. 2005
Beiträge
365
Servus Jungs,

ich habe ein Problem mit meiner switch abfrage, genauer mit der varibale $_REQUEST
also z.b. wenn ich index.php?site=users aufrufe zeigt er asdas555d an, was auch richtig ist. Nur wenn ich index.php?site=users&add aufrufe stellt er immer nochasdas555d da, wahrscheinlich stimmt das mit der variable $_REQUEST nicht. Danke schon mal:

users.php
PHP:
$action=$_REQUEST;				
switch ($action):
default:
echo "asdas555d";
break; 
case 'add';

echo "asdas888d";
break; 
endswitch;
 
Hi,

auf gut Glück versucht php zu programmieren?:D


$_REQUEST ist ein Array aus all den Variablen die z.B. in der url mit übergeben werden.

$_REQUEST deines Aufrufs (index.php?site=users&add) besteht aus den Variablen site und add.
Dem switch muste nun kenntlich machen welche Variable vom Array überprüft werden soll.
Mit case definierste die Übereinstimmungen, gefolgt von beliebigen code und abschließenden break.
Default setzt man zum Schluß. Wenn bisher keine Übereinstimmung gefunden wurde wird default
ausgeführt.


PHP:
switch($_REQUEST['site']):
(
 case "users":
      echo "asdas888d";
 break;
 default:
      echo "asdas555d";
)

Setzt man das break nicht nach jedem case so kann man verschiedene Übereinstimmumgen als eine Zusammenfassen.

PHP:
switch($_REQUEST['name']):
(
 case "oma":
 case "opa":
      echo "Großeltern";
 break;
 default:
      echo "Unbekannt";
)

Anmerkung: mit print_r($_REQUEST) kannste dir das Array anzeigen lassen, so siehste genau welche Variablen und deren Werte mitgekommen sind.


mfg
Baff
 
naja ich bin aber schon in der users.php also geht das auch nicht.

würde ich es so machen index.php?site=users&action=add

dann müsste ich ja einfach $_REQUEST['action'] machen aber ich habe das ja anders gibt es ja keine andere möglichkeit ?
 
Sorry ist zwar nicht zum Thema, aber du bist ein Scherzkeks. Woher sollen wir wissen in welcher Datei du dich befindest... und da das nicht dein erster Beitrag in den vergangen 5 Stunden ist. Frage ich dich welche Lösungsansätze du bereits versucht hast?

Es macht kein Spaß Leuten zu helfen die ihren Quellcode präsentieren anschließend die Änderungen eines Forum Mitglieds übernhemen, NULL dabei lernen und in drei Tagen das selbe Problem erneut haben obwohl es bereits gelöst wurde.

V1tzl1 hat es in diesem Beitrag sehr schön formuliert
https://www.computerbase.de/forum/t...te-zerlegen-und-vercoden.222156/#post-2175308
Es ist Sinnvoller bei Null anzufangen.

Aber nun zu deiner Frage:
Natürlich gibt es andere möglichkeiten du könntest anstatt Switch-Case auch IF-Abfragen formulieren und nach deinen Kriterien die Ausgabe formulieren. Ob das Sinnvoller ist sei dahingestellt aber es wäre eine Möglichkeit.

Wie.zb.
PHP:
<?
if ($_POST['site'] == "user" AND $_POST['action'] == "add"){
     //mach was schönes
}
?>

Was ich dir auch ans Herz legen möchte ist nicht mit $_REQUEST zu Arbeiten. Du wirst dir später bei der Erweiterung deines Scripts dankbar sein, dir nichtdie Frage stellen zu müssen, was genau das für eine Variable ist... POST, GET, etc.
 
Upps sorry, aber ich wollte es mit switch machen, da ich grade das mit den gnzen if abfragen habe, was wenn die DAtei groß wird etwas unübersichtlicht wirkt. Finde ich.
 
Da muss ich dir Recht geben. Könnte unübersichtlich werden.
Aber da du es bereits mit IF-Abfrage realisiert hast musst du es beurteilen können ob es noch Übersichtlich ist.

Aber ich verstehe nicht dein Problem, da baff dir eine ausführliche Beschreibung geliefert hat.
Woran scheitert es oder besser gesagt was genau hast du mit welcher Variable vor. Was soll geschehen wenn die Variable X den wert Y hat. Fragen über Fragen und keine davon geht für mich persönlich aus deiner Fragestellung und den anderen Posts hervor.
 
Beschreib doch bitte mal, was du mit deinem Script am Ende bewirken möchtest und wo dein Problem genau ist. Sonst können wir nichts weiter tun, als dir sagen, wo in deinem Code etwas unlogisches steht und wo nicht, anstatt dir bei deinem Problem zu helfen.

Edit: Hm web2 war schneller mit Posten ...
 
Also im moment habe ich es so:

PHP:
if(isset($_REQUEST['add])) {
 }
else
{
if(isset($_REQUEST['cat-add']))
  { 
  ..

das finde ich etwas un übersichtlicht.

Jetzt wollte ich es mit switch machen. WEil ich bei anderen scon so gesegen

PHP:
$action=$_GET['action'];

switch($action) 
case'add' 
...

da ich aber nie das mit action habe sondern so mache

index.php?site=users&add sonst wäre es ja so index.php?site=users&action=add

aber ich will es so haben index.php?site=users&add, jetzt ist meine Frage wie ich die variable action fülle.
 
Hi,

naja immer noch merkwürdig was du machst aber ich weis jetzt
worauf du hinaus willst.

Dein "add" stellt einen Wert dar mit dem du arbeiten willst.
Der Wert wird in keiner Variablen per URL übergeben, sondern ist selbst
eine Variable (alles was nach & kommt).

Somit muste aus $_REQUEST, was ja ein Array ist, die Keys auslesen für dein $action, um anschließend $action im switch verwenden zu können.
Anbei hier mal eine schnelle Lösung(nicht flexibel), schau dir aber auch mal
Array-Funktionen an.

PHP:
foreach($_REQUEST as $key=>$val)
{
 $i++;
 if($i==2) // achtung hier die Position angeben
 $action=$key;
}

switch($action):
(
 case "add":
      echo "asdas888d";
 break;
 default:
      echo "asdas555d";
)


mfg
Baff
 
WEnn ich es so mache gibt er doch auch die werte aus oder nicht ?

PHP:
foreach($_REQUEST as $key) 
{ 
  $action=$key; 
} 

switch($action): 
( 
 case "add": 
      echo "asdas888d"; 
 break; 
 default: 
      echo "asdas555d"; 
)
 
So hasst du gleich 2 Fehler drin
foreach($var1 as $var2 => $var3) gibt das Array mit key und value wieder
foreach($va1 as $var2) gibt nur die value wieder, egal wie du die variablen benennst.

die value die du suchst, ist in der Variable Request ein key.
Intern wird die Variable Request in etwa so zugewiesen
$_Request = array('site' => 'user', 'add' => '');

Ein weiteres Problem, ist, dass du deine action Variable immer wieder überschreibst. angenommen die URL wäre index.php?site=users&add&wasweisich=blubb
Dann wäre action auf einmal nicht mehr add, sondern wasweisich (bzw mit deinem oberen Fehler wäre sie blubb)

Ich werde das Gefühl nicht los, dass du dir die Sache viel zu kompliziert machst, abe solange du uns nich verrätst, was du vor hast, kann ich dir nicht helfen, meine Glaskugel ist nämlich gerade im Urlaub
 
alder Vadder habe doch egesagt was ich vor habe. ich will nicht mehr so eine große if verschachtelung sondenr es mit einer switch abfrage machen, meine Frage war an euch ob das geht.
 
Hm da haben wir uns wohl etwas missverstanden, denn ich dachte an eine etwas globalere Beschreibung, zb Ich möchte über meinen Index auf einige unterseiten weiterleiten. Außerdem müsste ich noch eine Variable add mitübergeben. So was in der Art.

Deine If Abfragen, die du da hasst (und einige Fehler haben, ganz nebenbei) kannst du natürlich über ein Switch vereinfachen,m solange du dabei immer die gleiche Variable betrachtest. Jedoch fehlt da noch die hälfte, nämlich deine 2. Variable action und add. Was soll damit passieren. In deinen Lösungsansätzen taucht die immer kräftig auf und scheint auch das Problem zu sein, allerdings taucht es in deiner Erklärung zu dem Projekt nicht auf, da kann ich immer noch raten, was du nun willst.
So wie ich das nun verstehe möchtest du lediglich deinen Quellcode kleinerbekommen, dann sollten wir auch etwas mehr von dem Quellcode zu sehen bekommen.
 
ist mein Post nummer neun nicht klar genug:

ICH HABE im Moment verschachtelte IF abFRAGEN. DA MIR DAS ZU und übersichtlich ist WILL ICH FRAGEN OB DAS MIT SWITCH GEHT DAS WARS.
 
Megaman2044 schrieb:
ist mein Post nummer neun nicht klar genug:

ICH HABE im Moment verschachtelte IF abFRAGEN. DA MIR DAS ZU und übersichtlich ist WILL ICH FRAGEN OB DAS MIT SWITCH GEHT DAS WARS.

Ok Klare Aussage, klare Antwort:

NEIN!


Ganz einfach deshalb, weil du mit switch nur eine Variable auf einen konstanten Wert prüfen kannst. Deshalb geht es mit Deinem Ansatz, der im Übrigen unsinnig ist, eben nicht. Du hast mehrere Variablen und du müsstest schon eine Art künstliche Intelligenz programmieren, damit das Programm weiß, welche der leeren URL-Variablen es denn nun in $action packen soll. Selbst wenn Du das hinbekommst, was ich bezweifle, reißt Du dir damit (im Übrigen auch schon jetzt) eine riesige Sicherheitslücke in deinen Code. Was machst Du denn, wenn ich z.B. folgendes als URL übergebe:
index.php?site=users&add&delete ?

Zur Zeit hast Du das Ganze priorisiert, das wäre mit dem switch und dem automatischen Füllen von $action nur noch schwerlich möglich. Überleg Dir halt einfach, ob es nicht leichter wäre die URL-Struktur anzupassen, eben nach dem Muster: index.php?site=users&action=add.

Dann kannst Du sehr einfach Deine switch-Abfrage machen. Im übrigen würde ich bei einer fehlerhaften Übergabe - also dem defaut-Zweig - eine unkritische Aktion oder gar eine Fehlerseite ausgeben.


Ciao
 
S.Giny Super antwort, dann hat sich das ja erledigt. Danke. Gibt es eine andere möglichkeit das mit den ganzen if abfragen etwas zu sortieren ?
 
Wieso hat es sich erledigt? S.Giny hat dir doch auch gesagt, wie du das mit switch/case umsetzen kannst ...
 
naja weil ich es so lassen wollte wie ich es im moment habe. meint ihr das ist echt unsichere so :

index.php?site=users&add statt index.php&action=add ???
 
Zurück
Oben