PHP Variable nur einmal initialisieren?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

naja du hast da ein paar grobe logikfehler drinne, aber zunächst einmal was ganz anderes:

es gibt keine if-schleifen: Eine Schleife ist ein sich wiederholender Code, der solange ausgeführt wird, wie eine Bedingung erfüllt ist. Ein if ist ein Abfrage Ob eine Bedingung erfolgt ist und sich dann Verzweigt.

Also Schleife: tue immer wieder das gleich bis etwas erreicht ist
Bedingung: Wenn eine Bedingung erfolgt ist tue dies, wenn die Bedingung nicht erfüllt ist tue jenes

aber fangen wir mal von vorne an:

<?php
$entscheidung = 0; // hier wird deine Varible schonmal initialisiert
if($_SERVER["REQUEST_METHOD"] == "post" && $entscheidung == 1)  // Hier überprüfst du sie direkt nach der initalisierung

Das ist also ungefähr so: als würdest du den würfel mit der 6 nach oben auf den Tisch legen und danach schauen ob der würfel nun eine 1 zeigt ....

außerdem würde ich bei so doppelvergleichen Grundsätzlich die Klammern setzen, kann immer mal sein, das du ausversehen den höherwertigen Operator in der Mitte hast. In deinem Schnipsel ist das aber in Ordnung.

So das nächste ist die REQUEST Method. Wo liegt der Sinn darin, wenn du nach der bedingung ein Cookie ausliest. PS: dabei ist ein syntaxfehler zu sehen. Da gehört statt dem "," ein ";" hin ^^

So als dann mal sehen was wir nun übrig haben:

<?php
if($_SERVER["REQUEST_METHOD"] == "post")
{
$ersteller = $_COOKIE['username'];
$sql = "SELECT * FROM eintraege WHERE ersteller = $ersteller;";
}
else
{
$sql = "SELECT * FROM eintraege;
}?>

So und jetzt bin ich erstmal mit meinem Latein am ende, weil nirgendwo geschrieben wird, wie du deine Entscheidung übertragen möchtest.

Aber ich hätte trotzdem noch eine Anmerkung. Ein Cookie['username'] ist recht unsicher, da der Anwender dieses Cookie sehrleicht missbrauchen könnte und irgendeinen käse dort reinschreibt. Besser du machst das über die sessionverwaltung oder so.

Ok Ok, erstmal danke für deine Antwort, das klingt alles ganz logisch :D

AAAAAber, ich hab am ende der Seite (es ist ein Arbeitsjournal) und am Anfang sollten ALLE Beiträge angezeigt werden von ALLEN benutzern, und dann kann man am ende der Seite einen Button klicken "Nur meine Beiträge anzeigen" und dann werden (auf der gleichen Seite) nur die angezeigt, welche der jetzt angemeldetet Benutzer erstellt hat. Verstehst du was ich meine?

Hier ist mal der Code am ende der Seite, aber es ist noch ein Chaos wegen den 1/0en Zeugs >.<

Ich hab jetzt dann glaub jede Kombination ausprobiert ^^

        if($entscheidung == 1)
        {
            echo '<form action="arbeitsjournal.php" method="POST">
                    <input type="submit" value="Zeige meine Eintraege" class="button" />
                    </form>'; 
            $entscheidung = 1;
        }
        else
        {
            //$entscheidung = 1;
            echo '<form action="arbeitsjournal.php" method="POST">
                    <input type="submit" value="Zeige alle Eintraege" class="button" />
                    </form>';
        }

Und am Anfang steht jetzt:

    if($_SERVER["REQUEST_METHOD"] == "POST" && $_POST['entscheidung'] == 0)
    {
        $ersteller = $_COOKIE['username'];
        $sql = "SELECT * FROM eintraege WHERE ersteller = \"$ersteller\";";
        $entscheidung = 1;
    }
    else
    {
        $sql = 'SELECT * FROM eintraege;';
        $entscheidung = 1;
    }

Und ich muss die Variable entscheidung ja initialisieren, da ich ja sonst nicht überprüfen kann ob er jetzt ALLES ausgeben muss oder nur meine Beiträge... :D

0

Nun erstmal gibt es keine If-Schleife. If ist eine Verzweigung. Abgesehen davon initialisierst du sie dort doch nur einmal. Was fehlt ist natürlich die Möglichkeit das auszuwählen, das ist aber anhand des hier geposteten nicht nachvollziehbar.

Gibt es ein Template bzw. eine HTML-Seite in der entsprechende Formen, Checkboxen oder Radiobuttons eine Entscheidung ermöglichen oder wie hast du dir das vorgestellt?

Hier ist das was am Ende des codes steht. Da wird dann halt entschieden ob wieder alles ausgegeben wird, oder nur die eigenen erstellten Einträge

        if($entscheidung == 0)
        {
            echo '<form action="arbeitsjournal.php" method="POST">
                    <input type="submit" value="Zeige meine Eintraege" class="button" />
                    </form>'; 
            $entscheidung = 1;
        }
        else
        {
            echo '<form action="arbeitsjournal.php" method="POST">
                    <input type="submit" value="Zeige alle Eintraege" class="button" />
                    </form>';
            $entscheidung = 0;
        }
0
@KilerAffe

erstmal ist das total sinnfrei, da der Code doppelt da ist und so oder so ausgegeben wird, sprich er könnte auch oberhalb oder unterhalb der Verzweigung sein, ebenso ist es unsinn etwas, dass auf 0 steht auf 0 zu setzen, ergo bräuchtest du nur ein Teil der Verzweigung.

Offen bleibt aber die Frage, wo die Entscheidung gesetzt/getroffen wird. Wie entscheidet der Benutzer? Oder tut er das garnicht? Wer tut es?

Ggf. solltest du uns so ausführlich wie möglich erklären was du überhaupt vor hast.

0

Bei deiner Frage ist noch unklar von welchem äußeren Einfluss der Wert von $entscheidung abhängig sein soll.

Im Moment ist es ja so, dass die if Bedingung nie erfüllt sein wird, weil $entscheidung == 1 geprüft wird, aber direkt davor $entscheidung auf 0 gesetzt wird.

Mehrere while Schleifen ineinander

Hallo zusammen,

ich glaube, meine Frage ist ziemlich leicht zu beantworten, da sie, wahrscheinlich, einfach nur auf einem Denkfehler beruht^^. Dennoch sitze ich jetzt seit einiger Zeit daran und finde keine Lösungsmöglichkeit, auch mit dem Inkrement einer Variable, damit eine Schleife nur einmal ausgeführt wird, führt nicht zum gewünschten Ergebnis. Vielleicht kann mir hier ja jemand weiterhelfen, bzw. hatte das gleiche Problem auch mal ;-)

Erstmal zum Vorhaben: Ich hole aus einer MySQL Datenbank die Spalte "Namen", diese Spalte beinhaltet, wer hät's gedacht, einige Namen. Der zweite Teil ist, dass ich mit der php Funktion "opendir" ein Verzeichnis auf dem Server öffne und alle Verzeichnisse dahinter auslese. Sprich: Ich öffne mit php den Ordner Namen, dann listet er mir die Verzeichnisse (sind mit Namen betitelt) dahinter auf. Soweit so gut, einzelnd funktioniert das auch super. Das Problem kommt erst, wenn ich beides gleichzeitig mache, dazu später mehr... Am Ende möchte ich die Namen, die ich aus der Datenbank geholt habe, von den Verzeichnisnamen abziehen, dies erfolgt mit string replace.

Nun der Code:

    $abfrage = "SELECT Name FROM blabla ORDER BY ID ASC";
    $ergebnis = mysql_query($abfrage);  
    while($row = mysql_fetch_object($ergebnis))
    {   
    echo $row->Name;

    if ($handle = opendir('../../../Namen/')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo $file;
        }
    }
    closedir($handle);
    }
    }

In der ersten while Schleife hole ich den Inhalt aus der Datenbank und gebe ihn aus, passt, dann öffne ich das Verzeichnis "Namen" auf dem Server und lasse die Verzeichnisse dahinter auflisten. Als Seitenoutput bekomme ich jetzt allerdings den ersten Namen der Datenbank, dann die Verzeichnisse auf dem Server, dann wieder ein Name der Datenbank und die Verzeichnisse auf dem Server, dann wieder ein Name der Datenbank usw. Ist logisch, da ich ja beide while Schleifen ineinander verschachtelt habe, somit bekomme ich jedes Mal, wenn etwas aus der Datenbank geholt wird, den Serverinhalt mit. Das soll aber nicht sein...

Nun zu meiner Frage: Wie bekomme ich es hin, dass ich $row->Name (erste while) von $file (zweite while) abziehen kann, ohne dass mir hunderte Sachen (while Ergebnisse) ausgegeben werden? Irgendwie stehe ich auf dem Schlauch...

Über eine Antwort und eine kurze Erklärung würde ich mich wirklich sehr freuen!

Grüße, Hummel

...zur Frage

Wie verändere ich die Reihenfolge in der SQL-Datenbank?

Hallo miteinander!

Ich baue gerade eine Homepage für einen Verein. Hier gibt es auch eine Administrationsoberfläche zum Verwalten der einzelnen Funktionäre. Diese können hinzugefügt, gelöscht oder auch editiert werden. Diese sind alle in einer Datenbank abgelegt.

Mein Ziel wäre, dass ich die Reihenfolge der Datensätze ändern kann wie ich will. Hierfür gibt es in der Adminoberfläche innerhalb von jeder Datensatzzeile einen Button "nach oben" bzw einen Button "nach unten". So möchte ich die Position der Datensätze um +1 bzw -1 verändern.

Es gibt eine Spalte mit dem Namen "id" (auto_increment) der jeden Datesatz innerhalb der Datenbank eindeutig definiert und gleichzeitig aufsteigen sortiert (beginnend von 1..)

Wenn ich nun den Button "nach oben" drücke, kommt folgender PHP-MySQL-Code zum Einsatz:

if ($_GET['top_id']) 
{
 $id = $_GET['top_id'];
 $sql_up = "SELECT id from fitnessteam WHERE id<'$id' ORDER BY id DESC LIMIT 10";
 $res_up = mysql_query($sql_up);
 while($row_up = mysql_fetch_row($res_up))
 {
 $id2 = $row_up[0];
  mysql_query("UPDATE fitnessteam SET id='$id2' WHERE id='$id'");
  mysql_query("UPDATE fitnessteam SET id='$id' WHERE id='$id2'");
  }
}

Die Absicht ist folgende: Die ID des vorhergehenden Datensatzes ermitteln und danach austauschen.

Doch bei diesem Script funktioniert leider garnichts. Bitte um Hilfe.

...zur Frage

Probleme mit header-Weiterleitung unter PHP, aber nur bei Strato?

Hey zusammen,

neulich habe ich auf meinem Strato-Webspace etwas ausprobiert. Header sollen ja am Anfang des Dokuments ausgegeben und mit die(); oder exit(); beendet werden, schon ein echo kann die Weiterleitung via header("Location #"); sabotieren.

So weit, so gut - kennt man ja als Fortgeschrittener.

Allerdings kann ich auf meinem zweiten Webspace, dem selbstgehostetem, header an jeder beliebigen Stelle im Script setzen und dennoch funktionieren sie. Wie kann das sein??

In beiden Fällen ist PHP 5.9 installiert.

Funktioniert nur auf dem 2. Webspace:

<?php   
echo "Nur ein Beispiel... störendes echo";  
header("Location: data.php");  
?>

Wieso funktioniert dieser Code auf einmal, aber PHP bei Strato wehrt sich dagegen. Gibt's ne PHP-Einstellung, die das erlaubt?

...zur Frage

PHP und MySQL -> auf doppelten EIntrag prüfen

Hi @ all! Bin gerde dabei, eine Gutschein-Datenbank zu entwickeln. Es werden 4 Code-Blöcke zu einer einzelnen, kryptischen bestell_ID zusammengefasst (alles Zahlen): $code1.$code2.$code3.... Code 4 hat als letzte und 5. Stelle immer eine "ReserveNull". Die Datenbank soll abgeckeckt werden, um einen doppelten Eintrag zu vermeiden, also

WENN Doppeleintrag vorhanden, DANN erhöhe $code4 solange um +1, bis kein Doppeleintrag mehr vorhanden

Egentlich ein Job für eine Schleife, funktionierte aber nicht: Lange Wartezeit, um am End hat's Nonsens ausgegeben und das Layout vergewaltigt.... Folgende Lösung ist auch nix, hab Handbücher, php.net und Google, ja sogar(!) yahoo bemüht, kein Erfolg!

Starte_MySQL();

$sql = "SELECT count(*) AS anzahl FROM bestellungen WHERE bestell_ID = '$bestell_ID'";
$query = mysql_query($sql);
$row = mysql_fetch_object($query);
if($row->anzahl > 0) {
   $code_4_5 = $code_4_5 + 1;
   $code_four = $code_4_1_2.$code_4_3_4.$code_4_5;
   $bestell_ID = $code_one."-".$code_two."-".$code_three."-".$code_four;
}
if($row->anzahl > 0) {
   $code_4_5 = $code_4_5 + 1;
   $code_four = $code_4_1_2.$code_4_3_4.$code_4_5;
   $bestell_ID = $code_one."-".$code_two."-".$code_three."-".$code_four;
}
if($row->anzahl > 0) {
   $code_4_5 = $code_4_5 + 1;
   $code_four = $code_4_1_2.$code_4_3_4.$code_4_5;
   $bestell_ID = $code_one."-".$code_two."-".$code_three."-".$code_four;
}

Irgendwer eine Idee, wie man einem engagiertem Laien hier helfen könnt?

Besten Dank, ich bin schon am End'

...zur Frage

Was möchtest Du wissen?