Variable ändert sich einfach so

schnofeli
Ich brauche einmal eine Hilfe von einem Profi für das wbb light 1.0.2 in der usercp.php

im Abschnitt else
php:
1:
2:
3:
4:
5:
6:
7:
if($action=="options_change") {
 if(isset($_POST['send'])) {....
}else {
...
  $r_raubueberfall $wbbuserdata['raubueberfall'];
  $r_raubpn $wbbuserdata['raubueberfallpn'];
...}

werden die hinterlegten Werte ausgelesen die im Profil dann angezeigt werden.

Jetzt habe ich folgenden Abschnitt:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
if ($userself == 1) {
         if(isset($r_raubueberfall)) $raubueberfall[$r_raubueberfall]=" selected=\"selected\"";
         if(isset($r_raubpn)) $raubpn[$r_raubpn]=" selected=\"selected\"";

      if ($wbbuserdata['tueberfall'] > 0)  $selraub " disabled=\"disabled\"";   

      $raubuseronoff="<tr bgcolor=\"{tabletitlecolor}\" id=\"tabletitle\">
      <td colspan=2><smallfont color=\"{fontcolorsecond}\"><b>» Raubüberfall Spiel</b></font></td>
       </tr>
       <tr id=\"tableb\" bgcolor=\"{tablecolorb}\">
        <td><normalfont><b>Am Raubüberfall Spiel teilnehmen ?</b></font><br><smallfont>W&auml;hle diese Option, wenn du am Raubüberfall teilnehmen möchtest.<br><b>Wenn heute schon ein Raubüberfall verübt wurde, kann man erst morgen wieder umstellen!</b></font></td>
        <td><select name=\"r_raubueberfall\"$selraub>
         <option value=\"1\"$raubueberfall[1]>Ja</option>
         <option value=\"0\"$raubueberfall[0]>Nein</option>
        </select></td>
        </tr>
        <tr id=\"tableb\" bgcolor=\"{tablecolorb}\">
        <td><normalfont><b>Willst Du per per PN benachrichtigt werden ?</b></font><br><smallfont>W&auml;hle diese Option, wenn du bei Überfällen eine PN erhalten möchtest.<br><b>Wenn heute schon ein Raubüberfall verübt wurde, kann man erst morgen wieder umstellen!</b></font></td>
        <td><select name=\"r_raubpn\"$selraubpn>
         <option value=\"1\"$raubpn[1]>Ja</option>
         <option value=\"0\"$raubpn[0]>Nein</option>
        </select></td>
        </tr>";}


Hier geht es mir um die 4. Zeile
php:
1:
($wbbuserdata['tueberfall'] > 0)  $selraub " disabled=\"disabled\"";


Sobald der Wert grösser als 0 ist funktioniert die Variable $r_raubueberfall nicht mehr. Diese wird immer auf 0 gesetzt wenn man die Option für $raubpn ändert. Im zuständigen Query Update ... sind die beiden Variablen richtig hinterlegt, denn wenn tueberfall = 0 ist, dann funktioniert alles einwandfrei.

Hat hier jemand ein Tipp für mich was ich falsch mache?
Schrimm
Hallo,

So aus dem Kontext gerissen, lässt sich das schwer sagen. Augenzwinkern

Das Problem könnte aber folgendes sein:
Wenn dein Wert der Variable "$wbbuserdata['tueberfall']" größer als "0" ist, wird doch die Variable "$selraub" mit einem "disable" beschrieben.

Jene befindet sich auch im Formular für "r_raubueberfall".
php:
1:
<select name="r_raubueberfall\"$selraub>

Das bedeutet, dass diese Feld somit ausgeblendet wird und keine Variable an die Datenbank übermittel bzw. an dein Skript wird.
Je nach Einstellung wird somit ein "Standardwert" für diesen Fall übernommen, der meist entweder "NULL" oder "0" ist, somit wäre deine Variable "r_raubueberfall" ausgeschaltet, sofern du mit "funktioniert nicht mehr" sowas gemeint hast. Augenzwinkern
schnofeli
Hallo Schrimm

herzlichen Dank für die schnelle Antwort. Das wird es wohl sein. Warum kann ich dann den hinterlegten Wert nicht noch einmal aus der DB lesen und der Variable $r_raubueberfall zuweisen?
Ich habe am Schluss des Skriptes dann versucht nochmals den Wert aus der DB zu lesen.
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
if ($userself == 1) {
         if(isset($r_raubueberfall)) $raubueberfall[$r_raubueberfall]=" selected=\"selected\"";
         if(isset($r_raubpn)) $raubpn[$r_raubpn]=" selected=\"selected\"";

      if ($wbbuserdata['tueberfall'] > 0)  $selraub " disabled=\"disabled\"";   

      $raubuseronoff="<tr bgcolor=\"{tabletitlecolor}\" id=\"tabletitle\">
      <td colspan=2><smallfont color=\"{fontcolorsecond}\"><b>» Raubüberfall Spiel</b></font></td>
       </tr>
       <tr id=\"tableb\" bgcolor=\"{tablecolorb}\">
        <td><normalfont><b>Am Raubüberfall Spiel teilnehmen ?</b></font><br><smallfont>W&auml;hle diese Option, wenn du am Raubüberfall teilnehmen möchtest.<br><b>Wenn heute schon ein Raubüberfall verübt wurde, kann man erst morgen wieder umstellen!</b></font></td>
        <td><select name=\"r_raubueberfall\"$selraub>
         <option value=\"1\"$raubueberfall[1]>Ja</option>
         <option value=\"0\"$raubueberfall[0]>Nein</option>
        </select></td>
        </tr>
        <tr id=\"tableb\" bgcolor=\"{tablecolorb}\">
        <td><normalfont><b>Willst Du per per PN benachrichtigt werden ?</b></font><br><smallfont>W&auml;hle diese Option, wenn du bei Überfällen eine PN erhalten möchtest.<br><b>Wenn heute schon ein Raubüberfall verübt wurde, kann man erst morgen wieder umstellen!</b></font></td>
        <td><select name=\"r_raubpn\"$selraubpn>
         <option value=\"1\"$raubpn[1]>Ja</option>
         <option value=\"0\"$raubpn[0]>Nein</option>
        </select></td>
        </tr>";
       $r_raubueberfall $wbbuserdata['raubueberfall'];}

Wenn ich den dann mit echo ausgebe ist der dennoch 0. Also hier noch ohne
php:
1:
if ($wbbuserdata['tueberfall'] > 0)
um zu testen, dass die Variable auf jeden Fall einen Wert erhält
Schrimm
Hallo,

Da ich nicht weiß, wie genau die Daten in die Datenbank gelangen und wie du deine Daten wieder aus der Datenbank holst, ist dies schwer zu erkennen.

Eventuell bei den Tests immer gleich die SQL-Datenbank im Blick behalten und gucken, wie sich die Werte dort verhalten, wenn du bestimmte Einstellungen vornimmst.

Also direkt über das Admintool der SQL-Datenbank, falls vorhanden, nachschauen. Augenzwinkern
schnofeli
Danke, das machte ich schon so, darum ist es mir auch aufgefallen, denn das mit dem "echo" habe ich noch nicht ganz raus wie das funktioniert. Einmal wird das auf der Seite angezeigt und in einem anderen Fall wieder nicht.

Es ist schon so, wie Du geschrieben hast, dass wenn "disable" dann wird 0 geschrieben, aber ich verstehe nicht, warum ich den Wert nicht aus der DB lesen kann wenn dort 1 steht und nicht 0 Mauer

Der update - Befehl der Tabelle kommt ja, zumindest wie ich es interpretiere, erst später.

Na ja, ich habe es nun halt so gelöst, dass beide Werde "disable" sind und erst einen Tag später, wenn der 1. Wert wieder aktiv ist geändert werden kann.

Aber interessiert hätte es mich schon warum das so ist, denn ich möchte etwas lernen und nicht einfach die "billige" Variante programmieren.

Jedenfalls herzlichen Dank für Deine Unterstützung.
Schrimm
Hallo,

Warum soll der Wert "1" nicht ausgelesen werden können?
Bist du sicher, dass du auf deinen Wert mittels "$wbbuserdata['raubueberfall']" zugreifen kannst?
Wie sieht denn dein ganzes Skript aus?

Erkläre auch eventuell, wie das Ganze genau funktionieren soll.
Wenn du im Grunde nur das Formular herzeigst und nicht wann jenes aufgerufen wird und wie genau es mit dem Datenbankeintrag zusammenhängt bzw. wie es die Daten aus der Datenbank holt, lässt sich nicht wirklich besonders viel sagen, wo das Problem liegt.

Wenn ich das richtig sehe ist das bei dir wie folgt:
Du gehst auf dein Profil und willst einstellen, ob du am Spiel teilnehmen willst.
Du fragst nun ab, ob dich jemand überfallen hat:
"if($wbbuserdata['tueberfall']>0) $selraub = " disabled=\"disabled\"";"

Dies deaktiviert den Ausstieg am Spiel, wenn du bereits überfallen wurdest.
Wenn du nun speicherst, ist folglich in der Datenbank der Wert "r_raubueberfall" dennoch "0", auch wenn er auf "1" war, da jener Fall, soweit ich das sehe, nicht berücksichtigt wird.

Du müsstest also eine Variable für den Fall "$wbbuserdata['tueberfall']>0" definieren.

In etwa so:
php:
1:
if($wbbuserdata['tueberfall'] > 0$querywert=$wbbuserdata['raubueberfall'];


"$querywert" steht hier für "$_POST['r_raubueberfall']", "$_GET['r_raubueberfall']" oder welche Übertragungsart auch immer im Update-Befehl verwendet wird.
schnofeli
Hallo Schrimm

schön von Dir zu lesen. Also ich habe einmal die usercp.php angehängt. Dort wird im else - Teil von
php:
1:
if($action=="options_change") {

der Wert der Variable $r_raubueberfall zugewiesen.
php:
1:
$r_raubueberfall $wbbuserdata['raubueberfall'];


Aus diesem Grund denke ich, dass wenn die quasi am Anfang aus der DB gelesen wird, dass diese Variable auch abgefüllt sein müsste. Oder eben wieder zugewiesen werden kann, wie im vorletzten Beitrag von mir.

Der Updatebefehl kommt meiner Meinung nach erst später.
Schrimm
Das ist zwar korrekt, aber wenn du dein Formular absendest, wird der "else"-Teil nicht mehr ausgeführt und folglich, wenn das Formular auf "disabled" steht kein Wert für "$r_raubueberfall" übermittelt.

Du musst deine übermittelten Variablen vor dem Updatebefehl schreiben.
Also unter:
php:
1:
if(isset($_POST['send'])) {

Der "else"-Teil wird genau dann aufgerufen, wenn der "send"-Befehl nicht ausgeführt wurde.
Ebenfalls wird alles nach dem "else"-Teil nicht mehr wirksam für den Update-Befehl.

Ergo:
Für deinen Update-Befehl ist die Variable "$r_raubueberfall" immer "NULL" bzw. existiert Sie gar nicht und es wird somit einfach ein "Standard"-Wert übernommen.
schnofeli
Da bin ich nun aber schön auf dem Schlauch gestanden und habe den Wald vor lauter Bäumen nicht gesehen.

Habe das nun am richtigen Ort eingesetzt und es funktioniert einwandfrei.

Herzlichen Dank für Deine Geduld und die Erklärungen Blume