[function->while->switch ]Switch Ergebnis außerhalb verwenden

Martin_N

wissensdurstig
Guten Abend,
seit ca 1 Stunde und viel Googlen und rumbasteln frage ich hier jetzt mal nach, da ich via google zu keinem Ergebnis komme..
Gesucht habe ich nach:
  • php global
  • php switch result external use
  • auf w3schools.com
  • u.v.a.
Einige Fehlermeldungen konnte ich ebenfalls ausmerzen, so das jetzt keine Fehlermeldung kommt!
Mein einziges Problem ist lediglich das benutzen der Variable $Nkategorie1 außerhalb der switch Anweisung.

Zunächst hier der Quellcode und dann die Erklärung:
PHP:
						function getCategorie1 () {
							$findCategorie = mysql_query("SELECT * FROM kategorien ORDER BY kategorie_nr ASC");
							while ($findCategorie2 = mysql_fetch_row($findCategorie)) {
								switch ($_POST['Nkategorie1']) {
									case $findCategorie2[0]:
										$_POST['Nkategorie1'] = $findCategorie2[1];
										$Nkategorie1 = $_POST['Nkategorie1'];
									break;
								}
							}
						}
Ich mache das alles in einer function() {} weil ich unnötiges schreiben vermeiden möchte, denn man kann entweder 1 Datensatz oder 2 hinzufügen und wenn 2, dann kann man die function einfügen :)
Gleiches wenn man nur einen einfügen will. Aber okay! Weiter geht's.

Mit der while Schleife hole ich
a) die Kategorienummer aus dem Formular und
b) lasse ich eine Switch-Anweisung laufen, um einen Text für den neuen Datensatz zu bekommen.
Es gibt eine Tabelle für die Noten und die Kategorien. DIe Kategorien werden in das select field mit einer while-schleife geladen.
PHP:
while ($printall = mysql_fetch_object($allnotes)) {
							echo '<option value="'.$printall->fachnummer.'">'.$printall->fach.'</option>
							';
						}
Da das Fach auch Leerzeichen/Sonderzeichen beinhalten kann, nehme ich die Nummer für die weitere bearbeitung.
Diese möchte ich dann mit dem oben geposteten wieder zu einem Text machen.

Die Variable wird wunderbar übertragen und wenn ich den Text, sprich die ausgewählte Kategorie, direkt im switch case ausgeben lasse, gibt er mir den Text aus. Dies tut er aber nicht in der function, also außerhalb der switch Anweisung.
Da ich diesen Text jedoch zum einfügen in der Db benötige, muss ich die Variable global definieren.
Mit dem Befehl
global​
hat es bei mir nicht funktioniert -> entweder habe ich da etwas nicht korrekt geschrieben oder es geht nicht..


Habt Ihr die Lösung oder Tipps was ich tuen könnte?
Wenn Ihr noch genaueres benötigt, sagt bitte bescheid :)

Vielen Dank für Deine Hilfe (:
 
Versuch mal die Variable in dem Scope zu definieren, wo du sie auch benutzen willst:

PHP:
                         function getCategorie1 () {
                            $Nkategorie1 = 0; // Im äußeren Scope definieren
                            $findCategorie = mysql_query("SELECT * FROM kategorien ORDER BY kategorie_nr ASC");
                            while ($findCategorie2 = mysql_fetch_row($findCategorie)) {
                                switch ($_POST['Nkategorie1']) {
                                    case $findCategorie2[0]:
                                        $_POST['Nkategorie1'] = $findCategorie2[1];
                                        $Nkategorie1 = $_POST['Nkategorie1'];
                                    break;
                                }
                            }
                            echo $Nkategorie1; // hier sollte jetzt der richtige Wert kommen
                        }

Habe ich das richtig verstanden?
 
Erstmal danke. So weit klappt das jetzt. Er gibt mir die Auswahl aus.
Ich habe gehört und gelesen das man via dem Befehl "return" eine Variable global machen kann, also das diese auch außerhalb der Funktion genutzt werden kann. Stimmt das?
Ich habe aus testzwecken echo mit return ersetzt und es versucht.
Er sagt mir jedoch immer noch an, das ein Feld leer ist.

PHP:
                         function getCategorie1 () {
                            $Nkategorie1 = 0; // Im äußeren Scope definieren
                            $findCategorie = mysql_query("SELECT * FROM kategorien ORDER BY kategorie_nr ASC");
                            while ($findCategorie2 = mysql_fetch_row($findCategorie)) {
                                switch ($_POST['Nkategorie1']) {
                                    case $findCategorie2[0]:
                                        $_POST['Nkategorie1'] = $findCategorie2[1];
                                        $Nkategorie1 = $_POST['Nkategorie1'];
                                    break;
                                }
                            }
                            return $Nkategorie1; // hier sollte jetzt der richtige Wert kommen
                        }

Hier ist mal meine function in der die Note hinzugefügt wird. (um die Übersicht in der unteren If-Abfrage zu bewahren ebenfalls in einer Funktion.)
PHP:
						/* erstelle eine Funktion in der die 1. Note hinzugefügt wird. */
							function addNote1 () { ## function anfang
								if ($_POST['Nnote1BTN'] == true) { // if button anfang
									getCategorie1();
									if ($_POST['Nfach1'] != "" && $Nkategorie1 != "" && $_POST['Nnote1'] != "") { //--> if insert anfang
										echo '<br />
										';
										
										// --> Insert Note 1.
										$insert1 = mysql_query("INSERT INTO note (notennummer, schuelernummer, fachnummer, kategorie, note) VALUE ('NULL', '".mysql_real_escape_string($_SESSION['schuelernummer'])."', '".mysql_real_escape_string($_POST['Nfach1'])."', '".mysql_real_escape_string($Nkategorie1)."', '".mysql_real_escape_string($_POST['Nnote1'])."')");
										$insert1 = ""; // insert leeren, sicherheitsgrund
										echo '<br />Eintrag f&uuml;r Note 1 erfolgreich.
										';
									} else {
									echo 'Bitte f&uuml;llen Sie alle mit (*) gekennzeichneten Felder aus.
									';
									} // --> if insert ende
								} // if button ende
							} ## function ende


Nach einer überprüfung ob die Variable $Nkategorie1 übergeben wird, fällt das Ergebnis negativ aus.
PHP:
						/* erstelle eine Funktion in der die 1. Note hinzugefügt wird. */
							function addNote1 () { ## function anfang
								if ($_POST['Nnote1BTN'] == true) { // if button anfang
									getCategorie1();
									echo "<br /><b>Fach:</b> ".$_POST['Nfach1']."<br /><b>Kategorie:</b> ".$Nkategorie1."
									<br /><b>Note:</b>".$_POST['Nnote1']."
									<br /><br /><br />";
									[...]
Es wird folgendes ausgegeben:
Fach: 14
Kategorie:
Note:22


Bitte füllen Sie alle mit (*) gekennzeichneten Felder aus.
Mit dem Befehl return scheint das auf diese Weise nicht zu funktionieren..
 
Zuletzt bearbeitet:
Mit return erledigst du genau zwei Sachen: einerseits endet die Funktion damit und andererseits gibt er den Wert, welcher zwischen return und dem Semikolon steht, aus, damit man ihn dann als Rückgabewert der Funktion abfangen kann.
PHP:
function high_five()
{
  return 5;
}

$zahl = high_five(); # $zahl hat jetzt den Wert 5

PS: Ich würde dir dazu raten, deinen Code modularer zu gestalten und auf den Gebrauch von global zu verzichten. Du siehst mit der Zeit nicht mehr durch und deine Funktionen ändern dann Werte ungewollt und scheinbar unvorhersehbar.
 
Zuletzt bearbeitet:
Zurück