Page 1 of 1

Überprüfung von Formulardaten

Posted: Wed Mar 11, 2009 9:32 am
by zappodrom
Moin,

ich muss unsere Firmenseite aktualisieren und habe dazu natürlich zu CMSms gegriffen - was sonst!? :)

Nun habe ich allerdings ein (hoffentlich) kleines Problem. Auf der alten Seite haben wir ein Formular welche eine Onlinekennung abfragt. Hier der Code:

Code: Select all

<h2>Rechnung per E-Mail - Überprüfung der Daten.</h2>
<p> </p>
<h3>Sie möchten am Service <em>Rechnung per E-Mail</em> teilnehmen?</h3>
Alles was Sie dazu benötigen ist Ihre Mitgliedsnummer, Online-ID und Ihre Bankverbindung. Die Mitgliedsnummer und die Online-ID finden Sie rechts oben auf Ihrem Beitragsbescheid.<br />
<p>Bitte geben Sie zur Kontrolle die Daten in die untenstehenden Felder ein.</p>
<p>Achten Sie bitte darauf, dass die Mitgliedsnummer <strong>ohne</strong> die trennenden Schrägstriche eingegeben wird. So wird z.B. aus der Nummer 03/1234/56789 die Eingabe <strong>03123456789</strong>.</p>
<form action="http://www.friesoyther-wasseracht.de/cmsmadesimple/index.php?page=checkid" method="post"> 
<table border="0" cellspacing="3" cellpadding="3" rules="none">
<tbody>
<tr bgcolor="#dddddd">
<td align="right"><strong>Mitgliedsnummer:</strong></td>
<td><input maxlength="15" name="hebenr" size="15" type="text" /></td>
</tr>
<tr bgcolor="#dddddd">
<td align="right"><strong>Online-ID:</strong></td>
<td><input maxlength="15" name="id" size="15" type="text" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Weiter" /></td>
</tr>
</tbody>
</table>
</form> <img style="border: 0pt none; margin: 5px;" src="uploads/images/bescheid.jpg" alt="Beispiel eines Beitragsbescheides" />
(Das der code vielleicht noch nicht ganz valid ist, ist im Moment zweitrangig. Es geht ersteinmal um die korrekte technische Abhandlung der Vorgänge.)

Wie ihr oben sehen könnt, geht der Formularinhalt nach der Eingabe an die Seite "checkid". Diese hat einen UDT {checkid} als einzigsten Inhalt. Der UDT {checkid} sieht folgendermaßen aus:

Code: Select all

<?
$conn = pg_connect("dbname=fwabill");
if (!$conn) {
    $msg = "Es konnte keine Verbindung zum Datenbankserver hergestellt werden!";
    }
    else {
      pg_exec($conn,"set datestyle to german");
    }
?>
<h2>Rechnung per E-Mail</h2>
<p>
<?
$hebenr = $_POST["hebenr"];
$id = $_POST["id"];
if ($hebenr === NULL || $id === NULL || $hebenr === '0' || $id === '0' || $hebenr === ''|| $id === '' || $id === ' ' || $hebenr === ' ')
        {
        print "<font color=\"red\">Geben Sie bitte beide Werte korrekt ein!</font><p>
        <a href=\"http://www.friesoyther-wasseracht.de/cmsmadesimple/index.php?page=rechnung-online\">
        Bitte wiederholen Sie die Eingabe!</a>";
        } else {
        $sql = sprintf ("SELECT hebenr, onlineid FROM checkid WHERE hebenr=%s AND onlineid=%d", $hebenr, $id);
        $res_chkid = @pg_exec($conn, $sql) or die ("Konnte die Tabelle nicht abfragen!");
        $rows = pg_numrows($res_chkid);
        if ($rows==1)
                {
                include "formular.lib";
                } else {
                print "<font color=\"red\">Die Pruefung der Online-ID schlug fehl!</font><p>
                        <a href=\"http://www.friesoyther-wasseracht.de/cmsmadesimple/index.php?page=rechnung-online\">
                        Bitte wiederholen Sie die Eingabe!</a>";
                }
        }
?>
Nach erfolgreicher Überprüfung der Eingaben soll ein weiteres Formular (formular.lib) angezeigt werden welches noch weitere Daten abfragt.
Nun habe ich allerdings das Problem, das nach dem Absenden des ersten Formulars (Mitgliedsnummer und Onlineid) keine Angaben auf dem Bildschirm erscheinen. Die Seite "checkid" bleibt inhaltslos. Es wird nur das Template angezeigt. Anschauen könnt ihr Euch das unter http://www.friesoyther-wasseracht.de/cm ... ung-online
Als Mitgliedsnummer kann 1234 und als Onlineid kann 5678 verwand werden.

Kann es sein, das die Formulardaten "unterwegs" verloren gehen? Weder in den Logfiles noch im HTML-Code steht irgendetwas  verdächtiges.
Um es vorweg zu nehmen: Ja die Dateien sind für den Webserver lesbar und auf die DB wird auch zugegriffen. Aber selbst wenn aus der DB nur Grütze kommen sollte, müsste doch zumindestens ein Fehler angezeigt werden!?

Ohne dem CMSms-Framework drum herum funktioniert das alles ganz wunderbar. Merkwürdig.

Gruß,
Christian

Re: Überprüfung von Formulardaten

Posted: Wed Mar 11, 2009 12:34 pm
by zappodrom
Ich habe jetzt mal ein wenig experimentiert :)

Es scheint so, als ob der Code in "checkid" gar nicht ausgeführt wird. Ein eingefügtes phpinfo () wurde nicht ausgegeben!
Rufe ich allerdings die Vorschau in der Adminoberfläche auf, wird mir das phpinfo () angezeigt.
Ich schließe daraus, das ich den php-Aufruf anpassen muß, damit das ganze korrekt ausgegeben werden kann.

Ist das der richtige Ansatz? Gibt es Richtlinien die ich dabei beachten soll/muss? Ich konnte dazu im Forum nichts finden - oder ich hatte die falschen Suchbegriffen :(.

Re: Überprüfung von Formulardaten

Posted: Thu Mar 12, 2009 6:48 pm
by NaN
Bei UDTs braucht man die ein- und ausleitenden php-Tags nicht ().
Der UDT hätte so eigentlich garnicht gespeichert werden können.

Was ist "fwabill" für eine Datenbank?
Wenn es dieselbe DB ist, die auch Dein CMS nutzt, dann brauchst keine Verbindung herzustellen.
Die besteht nämlich schon.

Für Datenbankabfragen hat das CMS eigene Funktionen.
Wenn es sich hier um ein und dieselbe DB handelt, dann würde ich z.B. folgenden Code verwenden... (siehe unten)

Die Variable $id ist eine "reservierte" (evtl. sogar globale) Variable, die das CMS selbst benutzt.
Wenn sie in Deinem UDT überschrieben wird, kann das zu Problemen führen.
(das CMS kann dann bestimmte Aktionen den jeweiligen Modulen/Plugins/UDTs nicht mehr zuordnen; dadurch gehen die Daten vermutlich "verloren")
Daher würde ich sie in Deinem UDT anders benennen.

Code: Select all


global $gCms;
$db =& $gCms->GetDb();

$online_id = $_POST['id'];
$hebenr = $_POST['hebenr'];

$query = "SELECT hebenr, onlineid FROM checkid WHERE hebenr=? AND onlineid=?";
$dbresult = $db->Execute($query, array($hebenr, $online_id));
if($dbresult && $row = $dbresult->FetchRow()) {
       if(!empty($row)) {
              include "formular.lib";
       }
       else {
              echo "Fehler... (nix gefunden)";
       }
}
else {
       echo "DB-Fehler... (auch nix gefunden oder Verbindungsfehler oder was auch immer)";
}

Für das Generieren von Links gibt es auch Core-Funktionen des CMS (ist insofern praktisch, falls sich bei der Seite mal was ändern sollte, bleiben die Links intakt) den Code hab ich aber gerade nicht im Kopf.

Und zu guter letzt: wie hast Du den UDT erstellt? Über das Backend? Ist er also in der DB gespeichert, oder wolltest Du ein Plugin erstellen (also als PHP-Datei)?

Re: Überprüfung von Formulardaten

Posted: Fri Mar 13, 2009 9:34 am
by zappodrom
Hi NaN,

danke für Deine Antwort!
NaN wrote:
Bei UDTs braucht man die ein- und ausleitenden php-Tags nicht ().
Der UDT hätte so eigentlich garnicht gespeichert werden können.
Ja, das habe ich schon korrigiert. :)
Was ist "fwabill" für eine Datenbank?
Wenn es dieselbe DB ist, die auch Dein CMS nutzt, dann brauchst keine Verbindung herzustellen.
Die besteht nämlich schon.

Für Datenbankabfragen hat das CMS eigene Funktionen.
Wenn es sich hier um ein und dieselbe DB handelt, dann würde ich z.B. folgenden Code verwenden... (siehe unten)
fwabill ist eine eigene Tabelle innerhalb der CMSms Datenbank. Danke für die viel einfachere Lösung der DB-Abfrage! Ich kenne/kannte die DB-Funktionen bislang nicht. Sind diese abhängig von der verwendeten DB? Ich benutze hier nämlich Postgres.
Die Variable $id ist eine "reservierte" (evtl. sogar globale) Variable, die das CMS selbst benutzt.
Wenn sie in Deinem UDT überschrieben wird, kann das zu Problemen führen.
(das CMS kann dann bestimmte Aktionen den jeweiligen Modulen/Plugins/UDTs nicht mehr zuordnen; dadurch gehen die Daten vermutlich "verloren")
Daher würde ich sie in Deinem UDT anders benennen.
Jo, das habe ich dann auch mal schnell gemacht ;).

Für das Generieren von Links gibt es auch Core-Funktionen des CMS (ist insofern praktisch, falls sich bei der Seite mal was ändern sollte, bleiben die Links intakt) den Code hab ich aber gerade nicht im Kopf.
Das wäre mal interessant zu wissen. Kann man sich die (Deutsche) Doku eigentlich irgendwo als PDF herunterladen?
Und zu guter letzt: wie hast Du den UDT erstellt? Über das Backend? Ist er also in der DB gespeichert, oder wolltest Du ein Plugin erstellen (also als PHP-Datei)?
Nach anfänglichen Problemen habe ich die Sache jetzt lösen können. Ich habe die damals verwendeten Scripte einfach über ein UDT im Backend eingebunden (include foo.php). Da mir die Zeit fehlte das bis zum Termin umzustricken schien mir das das einfachste zu sein. Aber als Endlösung möchte ich gerne alle "Kunden" die sich zu der Onlinerechnung anmelden in einer Tabelle in der DB speichern.
Das das ganze mit CMSms und den Modulen FormBuilder und FormBrowser geht, habe ich schon probiert. Mir fehlt nur die übergabe der Variableninhalte von einem Form zum nächsten. Eigentlich macht es das Form automatisch, aber ich muss ja noch die eingegebenen Daten über die Tabelle fwabill verifizieren. Und der Weg ist mir noch nicht ganz klar.
Aber das wird hoffentlich noch...

Danke für Deine Hilfe nochmal.

Re: Überprüfung von Formulardaten

Posted: Fri Mar 13, 2009 11:50 pm
by NaN
zappodrom wrote:
fwabill ist eine eigene Tabelle innerhalb der CMSms Datenbank. Danke für die viel einfachere Lösung der DB-Abfrage! Ich kenne/kannte die DB-Funktionen bislang nicht. Sind diese abhängig von der verwendeten DB? Ich benutze hier nämlich Postgres.
Kann sein, dass Du den Code da noch etwas anpassen musst.
Ich bin davon ausgegangen, dass fwabil eine DB ist, weil in Deinem Code stand

Code: Select all

pg_connect("dbname=fwabill")
Ich dachte "checkid" wäre die Tabelle.

CMSms benutzt den Datenbank-Layer Adodb Lite.
Dadurch ist es kompatibel zu unterschiedlichen Datenbanken.
Derzeit kommen mit der Installation des CMS DB-Unterstützung für MySQL und Postgres.
Das lässt sich aber nach Belieben erweitern.