Seltsam: Konfigurationseinstellungen werden verworfen

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Seltsam: Konfigurationseinstellungen werden verworfen

Beitrag von Edanis » So 13. Jun 2004, 20:34

Hi zusammen :D

Ich bin seit knapp einer Woche mit Contenido beschäftigt und als erstes einen mächtigen Lob für diese Entwicklung, bin richtig begeistert!

Im Rahmen der Gehversuche habe ich ein paar Module geschrieben (verändert) aber das untenstehende Modul ist das erste wo ich die SQL-Syntas verändert habe, das sage ich da ich nicht weiß wo der Fehler ist.

Das Modul basiert auf dem von Martin Horwath, gepostet von emergence und sollte zu Erstellungsdaten das Änderungsdatum samt Autor angeben. Hat auch prima getan solange ich die Einstellung über Quelltext vorgenommen habe, nun hatte ich ne Idee, im Inputbereich zwei Checkboxen einzubauen über welche die Ausgabe gesteuert wird.

Nun stelle ich das volgende Verhalten fest: Wenn ich das Template frisch zuweise und konfiguriere, sind beide Checkboxen leer (ok), wähle ich eine oder beide aus, kann ich nie mehr beide auschalten, es bleibt immer mindestens eine ausgewählt, und zwar die zuvor eingeschaltet war. Wenn ich eine CB auswähle, kann die andere abgewählt werden :shock:.

Das Prob besteht nur bei diesem Modul und auch bleibt vorhanden wenn ich meine Änderungen zurücknehme (also D, lastmodified und modiefiedby aus der query entfernen). Kann jemand sagen ob ich durch das falsche Syntax die DB aus dem tritt gebracht habe oder warum der Fehler da sein könnte? Vielen Dank im Voraus

Ja, das System ist:
Contenido v 4.4.4.
WAMP mit w2k, Apache 1.3.31, PHP 4.3.6, MySQL 4.0.20a (die 4.0.18 stand permanennt auf selbstmord)

Das system ist lokal, error.log ist vorhanden und leer. Was muss ich noch angeben?

Code: Alles auswählen

Name	Authorinfo

Beschreibung
Gibt den Verfassernamen und Datum an so wie das Korrekturdatum und
den Namen des entsprechenden Authors.


Eingabe:

/***********************************************
* Angabe des Artikelautors, Erstellungsdatum, Modifikationsdatum und
* des Modifikationsautors.
* Basiert auf dem Modul von  Martin Horwath, ver 1.0 (01.10.2003)
*
* Variablen: 1: ist 1 falls Autoren mit Realnamen anzusprechen sind.
*            2: ist 1 falls Datum mit der Zeit azuzeigen ist.
*
*/

$AuthRNState = (("CMS_VALUE[1]" == "1") ? " checked" : "");
$TimeShState = (("CMS_VALUE[2]" == "1") ? " checked" : "");

$TextCSS = ' style="font-family: Verdana,Arial,Helvetica; font-size: 11px;"';

echo '<table cellspacing="0" cellpadding="0" border="0">
          <tr><td>&nbsp;</td>
                 <td><input type="checkbox" value="1"
                                  name="CMS_VAR[1]"'.$AuthRNState.'></td>
                 <td'.$TextCSS.'>Autoren mit Realnamen ansprechen.</td>
                 <td>&nbsp;</td>
          </tr>
          <tr><td></td>
                 <td><input type="checkbox" value="1"
                                  name="CMS_VAR[2]"'.$TimeShState.'></td>
                 <td'.$TextCSS.'>Zeitangabe in die Datumangabe aufnehmen.</td>
                 <td>&nbsp;</td>
          </tr>
        </table>';



Ausgabe

<?php

/***********************************************
* Angabe des Artikelautors, Erstellungsdatum, Mpdifikationsdatum und
* des Modifikationsautors.
* Basiert auf dem Modul von  Martin Horwath, ver 1.0 (01.10.2003)
*
*/

//=========== Anpassung, Vorbelegung =======================

//Autoren mit dem Realnamen (vs. Loginname) angeben.
$ShowRealName = ("CMS_VALUE[1]" == "1");

//Zeit in der Datumangabe mit angeben.
$ShowTime     = ("CMS_VALUE[2]" == "1");

//=========== Datensammlung ================================

$query = "SELECT A.author AS author,
                 A.created AS created,
                 A.modifiedby AS modifiedby,
                 B.lastmodified AS lastmodified,
                 C.realname AS realname,
                 D.realname AS modrealname
          FROM
                 ".$cfg["tab"]["art_lang"]." AS A,
                 ".$cfg["tab"]["content"]." AS B,
                 ".$cfg["tab"]["phplib_auth_user_md5"]." AS C,
                 ".$cfg["tab"]["phplib_auth_user_md5"]." AS D
          WHERE
                 A.idart = '$idart' AND
                 B.idartlang = A.idartlang AND
                 C.username = A.author AND
                 D.username = A.modifiedby
          ORDER BY
                 B.lastmodified DESC";

$db->query($query);
$db->next_record();

$Author       = $db->f("author");     // loginname
$Realname     = $db->f("realname");   // realname
$LastModified = strtotime($db->f("lastmodified"));
$Created      = strtotime($db->f("created"));
$ModifiedBy   = $db->f("modifiedby"); // loginname
$ModRealname  = $db->f("modrealname");// realname

if ($ShowRealName) {
  $AuthorName = $Realname;
  $ModName    = $ModRealname;
} else {
  $AuthorName = $Author;
  $ModName    = $ModifiedBy;
}

if ($ShowTime) {
  $CreatedTime  = date("d.m.Y H:i",$Created);
  $ModifiedTime = date("d.m.Y H:i",$LastModified);
} else {
  $CreatedTime  = date("d.m.Y",$Created);
  $ModifiedTime = date("d.m.Y",$LastModified);
}

//=========== Ausgabe ======================================

echo '<div class="authorinfoline">
        Verfasst von <span class="authorinfoname">'.$AuthorName.'</span>
        am <span class="authorinfotime">'.$CreatedTime.'</span>.
      </div>';
if ($Created != $LastModified) {
  echo '<div class="authorinfoline">';
  if ($Author == $ModifiedBy){
    echo 'Zuletzt bearbeitet am <span class="authorinfotime">'.$ModifiedTime.'</span>.';
  } else {
    echo 'Bearbeitet von <span class="authorinfoname">'.$ModName.'</span>
          am <span class="authorinfotime">'.$ModifiedTime.'</span>.';
  }
  echo '</div>';
}

?>

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Mo 14. Jun 2004, 16:17

Hi,
nach meiner Meinung must du CMS_Value auch setzen, wenn die Checkbox nicht gechecked ist. Wenn ich den Code im Input Teil richtig verstehe, dann wird bei checked der Wert 1 übergeben, bei unchecked tut sich nichts, also wird die 1 auch nicht wieder in 0 geändert.

Also eigentliche eine If-Else Abfrage

Viel Erfolg Florian

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Mo 14. Jun 2004, 20:07

Hi, Florian und danke sehr für die Antwort :), es ist etwas dran, die Symptome sprechen jedenfalls dafür.

Sobald ich dazu komme werde ich dem nachgehen. So genau kapiere ich die Zusammenwirkung von Formularen und dem Inputbereich von Contenido noch nicht. Ich habe die Form gebaut anhang von Beispiele und Quelltexte im Forum so wie ich die verstanden habe. Kann gut sein, dass ich zuviel herausangepasst habe :)

MfG, Edanis

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Mo 14. Jun 2004, 20:49

Meld dich wieder, wenn es klappt.
Mit dem ganz kappieren kann ich nachvollziehen, da tue ich mich auch sehr schwer. (Deshalb schnorre ich lieber fertige Module) :wink:
Viel Erfolg Florian

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Di 15. Jun 2004, 01:21

Also, mit dem kapieren klappts nicht ganz, mit dem Modul anscheinend schon :)

Und Du hast tatsächlich Licht ins dunkle gebracht, an der Stelle hätte ich die Falle nicht vermutet.

Wenn ich die Variablen notiere, werden sie beim Kompillieren ersetzt; im Quelltext der konfigurationsseite steht zb an der Stelle:

Code: Alles auswählen

<input type="checkbox" value="1"  name="C11CMS_VAR[1]" checked>
Wenn ich die Konfig bestätige, wird also die Variable "C11CMS_VAR[1]" auf "1" gesetzt wenn die Box ausgewählt ist, sonst auf leeres String.

Durch dieses Wert sollte bei der nächsten Seitenaufbau die Variable "CMS_VALUE[1]" ersetzt werden, so dass die Variable

Code: Alles auswählen

$AuthRNState = (("CMS_VALUE[1]" == "1") ? " checked" : "");
auf "checked" sitzt falls ich vorher die Checkbox ausgewählt hatte. Das schreibe ich bei der Formaufbau hinein. Sollte funktionieren, falls ich bis dahin alles richtig verstehe.

Diese Auslagerung gefällt mir wegen der übersichtlichkeit, dem Contenido aber anscheinend nicht, zumindest nicht im Inputbereich, jedenfalls war der Fehler, dass ich die Variable dazwischengeschaltet habe. Als ich die Auswertung in die Formaufbau verschoben habe, also

Code: Alles auswählen

<td><input type="checkbox" value="1"  
           name="CMS_VAR[1]"'.(("CMS_VALUE[1]" == "1") ? " checked" : "").'></td>
hat alles problemlos funktioniert.

Warum das der Fehler war keine Ahnung. Ich poste das Input das ich habe (Output bleibt wie oben)

Code: Alles auswählen

/***********************************************
* Angabe des Artikelautors, Erstellungsdatum, Modifikationsdatum und
* des Modifikationsautors.
* Basiert auf dem Modul von  Martin Horwath, ver 1.0 (01.10.2003)
*
* Variablen: 1: ist 1 falls Autoren mit Realnamen anzusprechen sind.
*            2: ist 1 falls Datum mit der Zeit azuzeigen ist.
*/

$TextCSS = ' style="font-family: Verdana,Arial,Helvetica; font-size: 11px;"';

echo '<table cellspacing="0" cellpadding="0" border="0">
          <tr><td>&nbsp;</td>
              <td><input type="checkbox" value="1"  name="CMS_VAR[1]"'.
                   (("CMS_VALUE[1]" == "1") ? " checked" : "").'></td>
                 <td'.$TextCSS.'>Autoren mit dem Realnamen ansprechen.CMS_VALUE[1]</td>
                 <td>&nbsp;</td>
          </tr>
          <tr><td></td>
              <td><input type="checkbox" value="1"  name="CMS_VAR[2]"'.
                   (("CMS_VALUE[2]" == "1") ? " checked" : "").'></td>
                 <td'.$TextCSS.'>Zeitangabe in die Datumangabe aufnehmen.CMS_VALUE[2]</td>
                 <td>&nbsp;</td>
          </tr>
        </table>';
Wäre nett wenn profis erklären könnten ob ich Recht habe und warum das der Fehler war.

Nochmls vielen dank für die idee, sonst habe ich den ganzen Abend die Zeilen angestarrt ohne daraus schlau zu werden :)

Gruss, Edanis.

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Di 15. Jun 2004, 11:51

Ich vermute das bei

Code: Alles auswählen

<input type="checkbox" value="1" name="CMS_VAR[1]"'.$AuthRNState.' ......
'.$AuthRNState.' die Punkte bzw. das Hochkomma falsch sitzt, ich konnte es zu Hause aber nicht richtig hinbekommen. Du bist doch in einer Echo Anweisung.
Gruß Florian
Bis ich erst einmal die Kurzschreibweise verstanden habe hat mich einige Zeit Wälzen im Handbuch gekostet. So ein kleiner Kommentar hilft dir und anderen :wink:

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Mi 16. Jun 2004, 01:16

Sorry mit der Kurzschreibweise, ich habe so ein vorurteil, dass da ich in PHP neu bin, wissen alle was ich weiß. Die Schreibweise kenne ich aus java, war selbs überascht die in einem php-Buch zu sehen. sie ist eleganter und kürzer als normale if-else.

Wegen der Echo-Anweisung verstehe ich nicht was Du meinst, ich dachte, echo gibt einen String aus, Strings werden mit Punkten verbunden und müssen mit selben Zeichen anfangen und enden, und dass ' und " seien voll vertauschbar. Übersehe ich da was?

Das Code wurde direkt aus dem Eingabefenster kopiert und Contenido hat sich ncht darüber beschwert, ein Syntaxfehler kann da nicht sein.

Ich habe trotzdem die Tabelle in laute echos zerlegt, aus

Code: Alles auswählen

<td><input type="checkbox" value="1" name="CMS_VAR[1]"'.$AuthRNState.'></td>
wurde

Code: Alles auswählen

echo '<td><input type="checkbox" value="1" name="';
echo "CMS_VAR[1]";
echo '"';
echo $AuthRNState;
echo '></td>';
Es lief trotzdem nicht aber es ist nicht das Problem nach meiner Erklärung, ich habe dann die korrigierte Version zurückgespielt und die lief wieder nicht :shock:

Dann habe die Anführungszeichen übersetzt, etwa so:

Code: Alles auswählen

echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">
        <tr><td>&nbsp;</td>
            <td><input type=\"checkbox\" value=\"1\" 
                       name=\"CMS_VAR[1]\"".(("CMS_VALUE[1]" == "1") ? " checked" : "")."></td>
...
          </table>";
ging trotzdem nicht....

Nun wirds aber lüstig: setze ich in einem anderen Container ein Modul das Checkboxen enthällt, verhält sich unser Infomodul auf einmal richtig (es ist die korrigierte Fassung). Dasgleiche wenn das Infomodul zweimal im Template liegt.

Nun spiele ich die 'fehlerhafte' alte Fassung zurück und das Template enthält nur die zwei davon, beide Module verhalten sich fehlerhaft aber wie: Ist in einem Mod eine CB ausgewählt, kann ich im anderen die CBoxen normal aus und abwählen, die letzte Checkbox von beiden Modulen kann ich aber nicht abwählen.

Das gleiche setzt sich auch mit weiteren Platzierungen dieses Moduls fort, aber nur dieses Moduls, liegt irgendwo im Template ein Modul mit Checkboxen, ist das Infomodul wieder brav.

Ich glaube das Zirkus liegt irgendwo an einer durch meine Experimente ruinierten Datei, ich werde Contenido neu installieren müssen, dan schreibe ich weiter.

Lüstige Grüsse, Edanis.

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mi 16. Jun 2004, 06:47

Edanis hat geschrieben:Dann habe die Anführungszeichen übersetzt, etwa so:

Code: Alles auswählen

echo "<table cellspacing="0" cellpadding="0" border="0">
        <tr><td>&nbsp;</td>
            <td><input type="checkbox" value="1" 
                       name="CMS_VAR[1]"".(("CMS_VALUE[1]" == "1") ? " checked" : "")."></td>
...
          </table>";
ging trotzdem nicht....
Irgendwas stimmt da mit Deinen Anfuehrungszeichen nicht, mir ist aber nicht ganz klar, was, weil ich wegen der vielen Anfuehrungszeichen nicht genau weiss, was Du da ab name= machen willst. Wenn Du Dein echo in doppelte Anfuehrungszeichen setzt, muessen alle weiteren darin vorkommenden Anfuehrungszeichen einfache sein, oder Du maskierst die doppelten Anfuehrungszeichen. Oder Du setzt Dein echo in einfache Anfuehrungszeichen und verwendest darin die doppelten, was ich eher empfehlen wuerde. Der Anfang wuerde dann so aussehen:

Code: Alles auswählen

echo '<table cellspacing="0" cellpadding="0" border="0">
        <tr><td>&nbsp;</td>
            <td><input type="checkbox" value="1" 
nur wie gesagt, 'dann verliessen sie ihn' ... Aber vielleicht kannst Du das dann nochmal umschrieben.

Gruss
Christa[/code]

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Mi 16. Jun 2004, 13:48

Hi, Christa und danke für die Antwort, der Empfehlung folge ich normalerweise nur wollte ich hier der Frage nachgehen ob der ganze String wo CMS_VALUE[] dirn steht in "" muss.

Mit den Anführungszeichen ist nichts falsch: Das Code

Code: Alles auswählen

$T = (("CMS_VALUE[1]" == "1") ? " checked" : "")
ist eine Abkürzung für

Code: Alles auswählen

 if ("CMS_VALUE[1]" == "1") {
  $T = " checked";
} else {
  $T = "";
}
Die ( ? : ) liefert also einen String, steht aber ausserhalb von Strings und da muss ich nichts quotten.

Das Problem mit Checboxen ist aber wesentlich abenteuerlicher.

Ich habe Contenido neu installiert und stelle fest, dass ich keine unbenutzte Elemente (Artikel, Module usw) löschen kann, das Papierkorb ist rot, ein Klick tut aber gar nix. Dann habe ich MySQL neu installiert, kann zwar die meisten Module löschen aber paar Module werden als benutzt angegeben obwohl ich sie niergendwo benutze. Das am Rande, vielleicht wird es das Nachfolgende erklären.

Also, ich lege das Layout mit 4 Container und ein Testtemplate darüber.
Das Infomodul reduziere ich auf

Code: Alles auswählen

Eingabe:
echo '<input type="checkbox" value="1"  name="CMS_VAR[1]"'.(("CMS_VALUE[1]" == "1") ? " checked" : "").'>';

Ausgabe: 
<?php 
echo "<hr/><div class=authorinfoline>[Authorinformation]</div>"; 
?>
Im Eingabebereich gbt es nur eine Checkbox, die Ausgabe tut kein SQL.

Nun lege ich in die Container das Infomodul (ein bis viermal); Es ist dasselbe Verhalten zu beobachten: Die CB sind irgendwie miteinander verbunden. Die letzte CBox von allen Modulen lässt sich nicht ausshalten, wenn ich eine einschalte, kann ich die andere ausschalten. Liegt ein Modul alleine da, ist die CB einmal eingeschaltet nicht mehr auszuschalten.

Ich kann das Input Umschreiben aber weder

Code: Alles auswählen

if ("CMS_VALUE[1]" == "1"){
  echo '<input type="checkbox" value="1"  name="CMS_VAR[1]" checked>';
} else {
  echo '<input type="checkbox" value="1"  name="CMS_VAR[1]">';
}
noch

Code: Alles auswählen

$d_checked = "";
if ("CMS_VALUE[1]" == "1"){
  $d_checked = " checked";
}
echo '<input type="checkbox" value="1"  name="CMS_VAR[1]"'.$d_checked.'>';
bewirken irgendeine Verhaltensänderung.

Dann nehme ich eie Formtabelle aus einem anderen Modul von mir, das ännlich programmmiert wurde und läuft, und kürze sie zunehmend ab. Die kürzeste Fassung die noch richtig funktioniert ist:

Code: Alles auswählen

$Checked = (("CMS_VALUE[3]" == "1") ? "checked" : "");

echo '<table cellspacing="0" cellpadding="0" border="0">
        <tr><td><input type="checkbox" value="1" name="CMS_VAR[3]"'.$Checked.'></td>
            <td><input type="text" name="CMS_VAR[1]" value="CMS_VALUE[1]" size="5" maxlength="5"></td>
        </tr>
      </table>';
Richtig bedeutet, das Modul ist alleine und die CB geht an und aus.

Nehme ich nun das Eingabefeld raus, also

Code: Alles auswählen

$Checked = (("CMS_VALUE[3]" == "1") ? "checked" : "");

echo '<table cellspacing="0" cellpadding="0" border="0">
        <tr><td><input type="checkbox" value="1" name="CMS_VAR[3]"'.$Checked.'></td>
            <td></td>
        </tr>
      </table>';
beginnt der Spaß von vorn.

Verberge ich das Edotorfeld:

Code: Alles auswählen

$Checked = (("CMS_VALUE[3]" == "1") ? "checked" : "");

echo '<table cellspacing="0" cellpadding="0" border="0">
        <tr><td><input type="checkbox" value="1" name="CMS_VAR[3]"'.$Checked.'></td>
            <td><input type="hidden" name="CMS_VAR[0]" value="CMS_VALUE[0]"></td>
        </tr>
      </table>';
ist alles wieder in Ordnung :D :evil:

Habe ich doch ein Bug gefunden :?:

Gruss, Edanis

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Mi 16. Jun 2004, 20:43

Hallo Edanis,
hast du dir mal den Qelltext angeschaut, der ausgegeben wird? Vielleicht kannst Du da erkennen, woher das Problem kommt.

Gruss Florian

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Do 17. Jun 2004, 08:44

Das mit dem hidden irritiert mich extrem :twisted:

Kann es sich vielleicht um einen "simplen" Browserfehler handeln und weniger um ein Contenido Problem?
Gruß Florian

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 17. Jun 2004, 10:35

im Prinzip kann Contenido hieran nicht schuld sein, denn das ist ganz normaler PHP-Code, der evaluiert wird - das macht PHP, nicht Contenido.

Tips: Ausgabe ansehen und dann denken ;)

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Do 17. Jun 2004, 11:10

Hi, sorry dass ich mich etwas spät melde, das mit hidden irritiert mich auch aber anscheinend wird die Checkboxauswahl nur dann korrekt übernommen wenn es ein Textfeld im Modul gibt oder ein Modiul eines anderen Typs mit Checboxen in der Template, das versteckte Feld ist eine 'chirurgische Lösung' (Symptome bekämpfen ohne den Grund zu kennen).

Die Ausgabe macht mich nicht schlau, die Ausgabe im Konfigfenster scheint von der Ausgabe bei anderen Modulen nicht zu unterscheiden (kann keine Auffälligkeiten feststellen). Auch die Ausgabe der Variablen entspricht der (falschen) Checkboxmarkierung.

Die Ausgabe im Back- und Frontend entspricht der Markierung, die Contenido haben möchte.

Meine Vermutung ist dass das Problem beim abspeichern in die Datenbank entsteht, ich weiss aber nicht wie ich den ganzen Datenfluss beobachten kann.

Heute nahcmittag habe ich wieder Zeit dafür, vielleicht weiß ich mehr.

Gruss, Edanis

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Do 17. Jun 2004, 20:41

Leider kann dem wenig beitragen, außer dass das Problem auftritt wenn auf der Template beliebige Module mit lauten Checkboxen oder Radiobuttons als Eingabeelemente liegen. Ein Textfeld irgendwo oder Auswahlbox und das Problem ist entschärft.

Ich dachte zunächst, eine Konfiguration würde verweigert wenn alle Eingabeelemente keine Werte lidefern (das tun Checkboxen die abgewählt sind, Editfelder haben ein Value), was den Anschein erklärt, die Boxen wären untereinander verbunden. Dann habe ich ein wertloses Editfeld hinzugefügt:

Code: Alles auswählen

Input
echo '<input type="checkbox" value="1"  name="CMS_VAR[1]"'.(("CMS_VALUE[1]" == "1") ? " checked" : "").'>
      <input type="text" name="CMS_VAR[2]" size= "4" maxlength="5">';
das Problem war trotzdem weg.

Das einzige, was mir nur noch einfällt anzustellen, ist die Daten manuell in die Datenbank reinzuschreiben und auszulesen. wozu ich aber keine ahnung habe.

Kann mir jemend verraten, wie und wo die variablen abgespeichert werden, wenn ich eine Template konfiguriere?

MfG,
Edanis

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Mo 21. Jun 2004, 01:17

Fortsetzung der Geschihte :)

Ich habe das Testmodul

Code: Alles auswählen

$Checked = (("CMS_VALUE[3]" == "1") ? "checked" : "");
echo '<input type="checkbox" value="1" name="CMS_VAR[3]"'.$Checked.'>';
Auf dem Webserver installiert, wo die Seite stehen wird an der ich mitarbeite. Dort läuft MYSQL 4.0.18. also keine alpha wie bei mir lokal, trotzdem dieselbe geschichte.

Da es aber eine Netzwerkkarte zwichen dem Server und Browser liegt, kann ich mir Packete anscheien die verschickt werden.

Also,

1. Das Testmodul enthält nur eine Checkbox, die bereits ausgewählt ist. Das Packet A enthält die Anfrage wo ich die CB ausgewählt lasse und die Konfiguration bestätige. Das Packet B wo ich die CB abwähle und bestätige. In beiden Fällen bleibt die Checkbox ausgewählt, der Server schickt das Wörtchen 'checked' an den Browser.

A enthält gegenüber dem Packet B das Paar "C1CMS_VAR%5B3%5D=1" in der Post-Anfrage, oder übersetzt
"C1CMS_VAR[3]=1" (Container 1, CMS_VAR[3]). bedeutet. B enthält dieses Teil nicht. Der Browser funktioniert also anscheinend.

2. Nun füge ich das wertlose Editfeld zum Modul hinzu:

Code: Alles auswählen

$Checked = (("CMS_VALUE[3]" == "1") ? "checked" : "");
echo '<input type="checkbox" value="1" name="CMS_VAR[3]"'.$Checked.'>
      <input type="text" name="CMS_VAR[0]" size= "4" maxlength="5">';
Das Packet A (CB ausgewählt lassen) enthält nun Paare "C1CMS_VAR%5B3%5D=1&C1CMS_VAR%5B0%5D="
oder "C1CMS_VAR[3]=1&C1CMS_VAR[0]=" Das PAcket B enthält aber nur das Paar "C1CMS_VAR%5B0%5D=" oder "C1CMS_VAR[0]=" in der Post-Anfrage.

Also, eine Checkbox die nicht ausgewählt ist, taucht gar nicht in der Anfrage auf, ein Editfeld, auch wenn sein Value undefiniert ist, schon (evtl mit mit leeren Value).

:!:

Wenn ich eine Konfiguration bestätige, wird die Post-Anfrage verschickt wo pro Checkbox das Paar "Name=Wert" übergeben wird jedoch nur dann wenn die Checkbox ausgewählt ist. Bei Editfeldern wrd der Variablenname auch dann übergeben, wenn das Wert leer ist (dann aber als "Name=").

Gibt es nur laute Checkboxen und Radios auf der Template und keine davon ist ausgewählt, wird keiner der Namen übergeben. Das mag Contenido anscheinend nicht und verwirft die Konfiguration. Ist ein Editfeld vorhanden wird nur sein Namewertpaar übergeben, die Chekboxennamen zwar nicht aber Contenido wählt sie trotzdem ab.

Wie auch immer, solange ich dem Phänomen nicht witer auf den Grund gehen kann, bleibt mir nur die chirurgische Lösung, ob sie mir gefällt oder nicht. Aus dem Grunde poste ich volständigkeitshalber das entgültige Modul mit dem versteckten Feld

Code: Alles auswählen

Name	Authorinfo

Beschreibung
Gibt den Verfassernamen und Datum an so wie das Korrekturdatum und
den Namen des entsprechenden Authors.

Gruss, Edanis


Eingabe:
/***********************************************
*
* CONTENIDO-MODUL INPUT
*
* Angabe des Artikelautors, Erstellungsdatum, Modifikationsdatum und
* des Modifikationsautors.
* Basiert auf dem Modul von  Martin Horwath, ver 1.0 (01.10.2003)
*
* Variablen: 1: ist 1 falls Autoren mit Realnamen anzusprechen sind.
*            2: ist 1 falls Datum mit der Zeit azuzeigen ist.
*
* Version 0.0.3
* Datum:  16.06.2004
*/

$TextCSS = ' style="font-family: Verdana,Arial,Helvetica; font-size: 11px;"';

echo '<table cellspacing="0" cellpadding="0" border="0">
          <tr><td>&nbsp;</td>
                 <td><input type="checkbox" value="1" 
                      name="CMS_VAR[1]"'.
                      (("CMS_VALUE[1]" == "1") ? " checked" : "").'></td>
                 <td'.$TextCSS.'>Autoren mit dem Realnamen ansprechen.</td>
                 <td>&nbsp;<input type="hidden" name="CMS_VAR[0]"
                                  value="CMS_VALUE[0]"></td>
          </tr>
          <tr><td></td>
                 <td><input type="checkbox" value="1" 
                      name="CMS_VAR[2]"'.
                      (("CMS_VALUE[2]" == "1") ? " checked" : "").'></td>
                 <td'.$TextCSS.'>Zeitangabe in die Datumangabe aufnehmen.</td>
                 <td>&nbsp;</td>
          </tr>
         </table>';


Ausgabe


<?php
/***********************************************
*
* CONTENIDO-MODUL OUTPUT
*
* Angabe des Artikelautors, Erstellungsdatum, Mpdifikationsdatum und
* des Modifikationsautors.
* Basiert auf dem Modul von  Martin Horwath, ver 1.0 (01.10.2003)
*
* Version 0.0.3
* Datum:  16.06.2004
*/

//=========== Anpassung, Vorbelegung =======================

//Autoren mit dem Realnamen (vs. Loginname) angeben.
$ShowRealName = ("CMS_VALUE[1]" == "1");

//Zeit in der Datumangabe mit angeben.
$ShowTime     = ("CMS_VALUE[2]" == "1");

//=========== Datensammlung ================================

$query = "SELECT A.author AS author,
                 A.created AS created,
                 A.modifiedby AS modifiedby,
                 B.lastmodified AS lastmodified,
                 C.realname AS realname,
                 D.realname AS modrealname
          FROM
                 ".$cfg["tab"]["art_lang"]." AS A,
                 ".$cfg["tab"]["content"]." AS B,
                 ".$cfg["tab"]["phplib_auth_user_md5"]." AS C,
                 ".$cfg["tab"]["phplib_auth_user_md5"]." AS D
          WHERE
                 A.idart = '$idart' AND
                 B.idartlang = A.idartlang AND
                 C.username = A.author AND
                 D.username = A.modifiedby
          ORDER BY
                 B.lastmodified DESC";

$db->query($query);
$db->next_record();

$Author       = $db->f("author");     // loginname
$Realname     = $db->f("realname");   // realname
$LastModified = strtotime($db->f("lastmodified"));
$Created      = strtotime($db->f("created"));
$ModifiedBy   = $db->f("modifiedby"); // loginname
$ModRealname  = $db->f("modrealname");// realname

if ($ShowRealName) {
  $AuthorName = $Realname;
  $ModName    = $ModRealname;
} else {
  $AuthorName = $Author;
  $ModName    = $ModifiedBy;
}

if ($ShowTime) {
  $CreatedTime  = date("d.m.Y H:i",$Created);
  $ModifiedTime = date("d.m.Y H:i",$LastModified);
} else {
  $CreatedTime  = date("d.m.Y",$Created);
  $ModifiedTime = date("d.m.Y",$LastModified);
}

//=========== Ausgabe ======================================

echo '<div class="authorinfo">
        <!-- Verfasserinformation -->
        <div class="authorinfoline">
          Verfasst von <span class="authorinfoname">'.$AuthorName.'</span>
          am <span class="authorinfotime">'.$CreatedTime.'</span>.
        </div>';
if ($Created != $LastModified) {
  echo '<div class="authorinfoline">';
  if ($Author == $ModifiedBy){
    echo 'Zuletzt bearbeitet am <span class="authorinfotime">'.$ModifiedTime.'</span>.';
  } else {
    echo 'Bearbeitet von <span class="authorinfoname">'.$ModName.'</span>
          am <span class="authorinfotime">'.$ModifiedTime.'</span>.';
  }
  echo '  </div>
          <!-- Verfasserinformation ende -->
        </div>';
}

?>

Gesperrt