Problem mit SQL

Gesperrt
Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Problem mit SQL

Beitrag von Arno Simon »

Hallo,

ich habe das Formularmodul von w3concepts ein wenig an meine Bedürfnisse angepasst, insbesondere in Hinsicht auf die Speicherung in einer Datenbank.

Bis zur Generierung - der in meinen Augen - gültigen SQL-Sequenz, läuft ja auch alles zu meiner Zufriedenheit. Einzig wird die SQL-Sequenz zum Schluß nicht durchgeführt, und ich kann den Grund nicht erkennen.

Vielleicht fällt es Euch leichter, etwas zu erkennen oder ich bin einfach nur schon zu lange am Rechner...

Nicht alles an diesem Coding stellt das Optimum dar und hält sich - insbesondere was die Verwendung von Contenido-Konstanten etc. angeht - an die Entwicklungsvorgaben, aber das Ergebnis ist letztlich auch nicht für die Öffentlichkeit bestimmt und wird nur bei mir Verwendung finden.

Hier das CodeSnippet zur Erzeugung der SQL-Sequenz:

Code: Alles auswählen

   function entry2database() {
    $EventAnmeldung = 'con_events_anmeldungen';
    $FormData = $this->suppress('sent');
    $FirstFlag = 0;
    $ColumnList = '';
    $ValueList = '';
    $Delimiter = '';
    foreach ($FormData as $key => $value) {
      $ColumnList .= $Delimiter."'".$key."'";
      $ValueList .= $Delimiter."'".$value."'";
      if ($FirstFlag == 0) {
       $FirstFlag = 1;
       $Delimiter = ', ';
      }
    }
    $ColumnList .= $Delimiter."'idclient'";
    $ValueList .= $Delimiter."'3'";
    $SQL = 'INSERT INTO '.$EventAnmeldung.' ('.$ColumnList.')';
    $SQL .= 'VALUES ('.$ValueList.');';
    echo $SQL."<br>";
    $db->query($SQL);
    return true;
   }
Und das ist die daraus resultierende SQL-Sequenz:

Code: Alles auswählen

INSERT INTO con_events_anmeldungen 
('accept', 'termin', 'p1_sex',
 'p1_lastname', 'p1_firstname', 'p1_position',
 'p1_company', 'p1_street', 'p1_country',
 'p1_plz', 'p1_city', 'p1_phone',
 'p1_fax', 'p1_mail', 'p2_sex',
 'p2_lastname', 'p2_firstname', 'p2_position',
 'p2_mail', 'p3_sex', 'p3_lastname',
 'p3_firstname', 'p3_position', 'p3_mail',
 'idclient'
) VALUES 
('Ja', '2004-09-07', 'male',
 'Simon', 'Arno', 'Berater / Entwickler',
 '', 'das ist meine Adresse 55', '2',
 '99999', 'Musterhausen', '0049(333)4567891',
 '0049(333)9115879', 'a.simon@schnoddermasse.de', 'female',
 '', '', '',
 '', 'female', '',
 '', '', '',
 '3');
Natürlich ist die SQL-Sequenz im Original nicht so formatiert, sondern wird ohne Zeilenumbrüche erzeugt. Diese habe ich nur der Übersichlichkeit halber für Eure Augen eingefügt und immer 3 Variablen bzw. Werte in einer Zeile zusammengefaßt.

Die Klasse DB_Contenido gibt scheinbar - leider - keine Fehlermeldung aus, wenn eine von der DB zurückkommt, jedenfalls erhalte ich von obigem Coding nur das Testweise echo $SQL; ausgegeben und danach ist Schluß und der entsprechende Eintrag in der DB erfolgt leider ebenfalls nicht.

Zweierlei Fragen:

1. Gibt es die Möglichkeit vom Datenbanklayer die Fehlermeldung zu erfahren? Über die Contenido-FAQ habe ich zwar mittlerweile die "Ur-Klasse" gefunden, werde aber auch nach Lesen der Doku nicht wirklich schlauer. Eine Methode zur Ausgabe des bzw. der Fehler, habe ich jedenfalls leider nicht gefunden :(

2. Fällt Euch an obiger SQL-Sequenz, welche an sich mit einer entsprechenden SQL-Sequenz - von PHPmyAdmin erzeugt - übereinstimmt, oder am Coding etwas auf, was zum Fehler führen kann / könnte / müßte?

Wer den Code evtl. in einer Modulkopie einbauen und testen will, benötigt ja prinzipiell noch die angesprochene Tabelle. Hier der entsprechende SQL-Dump zur Erzeugung:

Code: Alles auswählen

CREATE TABLE `con_events_anmeldungen` (
  `idclient` int(10) NOT NULL default '0',
  `accept` varchar(4) NOT NULL default '',
  `termin` varchar(10) NOT NULL default '0000-00-00',
  `p1_sex` varchar(6) NOT NULL default '',
  `p1_lastname` varchar(35) NOT NULL default '',
  `p1_firstname` varchar(35) NOT NULL default '',
  `p1_position` varchar(35) default NULL,
  `p1_company` varchar(50) default NULL,
  `p1_street` varchar(50) NOT NULL default '',
  `p1_country` char(1) NOT NULL default '',
  `p1_plz` varchar(6) NOT NULL default '',
  `p1_city` varchar(35) NOT NULL default '',
  `p1_phone` varchar(20) NOT NULL default '',
  `p1_fax` varchar(20) NOT NULL default '',
  `p1_mail` varchar(50) NOT NULL default '',
  `p2_sex` varchar(6) default NULL,
  `p2_lastname` varchar(35) default NULL,
  `p2_firstname` varchar(35) default NULL,
  `p2_position` varchar(35) default NULL,
  `p2_mail` varchar(50) default NULL,
  `p3_sex` varchar(6) default NULL,
  `p3_lastname` varchar(35) default NULL,
  `p3_firstname` varchar(35) default NULL,
  `p3_position` varchar(35) default NULL,
  `p3_mail` varchar(50) default NULL
) TYPE=MyISAM;
Besten Dank im voraus und

gruß

Arno
Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Beitrag von Arno Simon »

Ups.... :oops:

wie heißt's so schön??

Wer lesen kann, ist klar im Vorteil!
ContenidoFAQ hat geschrieben:Wichtig: benutzen Sie möglichst nie die Variable $db in ihren Modulen. Verwenden Sie bitte eigene Variablen Namen.
Gesagt getan und das Coding entsprechend angepasst, bleibt's auch nicht mehr stehen, sprich die Erfolgsmeldung erscheint.... Leider ohne das die SQL wirklich ausgeführt wird. In der DB erscheint kein neuer Eintrag und ist somit leider auch für die Katz... :(

Gruß

Arno
Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Beitrag von Arno Simon »

Sorry Leuts...

bin wohl doch ein wenig zu Müde um noch zu Programmieren :(

Der entsprechende CodeSnippet sieht jetzt so aus:

Code: Alles auswählen

   function entry2database() {
    $EventAnmeldung = 'con_events_anmeldungen';
    $FormData = $this->suppress('sent');
    $FirstFlag = 0;
    $ColumnList = '';
    $ValueList = '';
    $Delimiter = '';
    $conDB = new DB_Contenido;
    foreach ($FormData as $key => $value) {
      $ColumnList .= $Delimiter.$key;
      if ( empty($value) ) { $v = 'NULL'; }
                            else  { $v = "'".$value."'"; }
      $ValueList .= $Delimiter.$v;
      if ($FirstFlag == 0) {
       $FirstFlag = 1;
       $Delimiter = ', ';
      }
    }
    $ColumnList .= $Delimiter."idclient";
    $ValueList .= $Delimiter."3";
    $SQL = 'INSERT INTO '.$EventAnmeldung.' ( '.$ColumnList.') ';
    $SQL .= 'VALUES ('.$ValueList.');';
    echo $SQL."<br>";
    $conDB->query($SQL);
    return true;
   }
und damit funktioniert's jetzt.... Manchmal muß man sich scheinbar selbst den Holzhammer verpassen, damit man auf die richtige(n) Idee(n) kommt.

Gruß

Arno

PS Der Beitrag kann geschlossen, wenn nicht gar gelöscht, werden
Gesperrt