Hallo,
Habe ein Problem mit der DB-Abfrage:
mit
my $count = ssp::readSQLData("SELECT PGID, DESCR, PRICE, IMG FROM ITEM","DESCR","PRICE","IMG","PGID");
wird die Seitennummer korrekt ausgelesen und mit
$test = ssp::get_var_db("PGID",$i);
auch angezeigt
Wenn ich aber nur Artikel, die auf dieser Seite liegen, ausgeben möchte
my $count = ssp::readSQLData("SELECT PGID, DESCR, PRICE, IMG FROM ITEM WHERE PGID='1200008060'","PGID","DESCR","PRICE","IMG");
kommt die Fehlermeldung
ZitatDBD::ODBC::st execute failed: [Microsoft][ODBC Microsoft Access Driver] Datentypen in Kriterienausdruck unverträglich. (SQL-22018)(DBD: st_execute/SQLExecute err=-1) at Ibodata.pm line 1627.
z.B. WHERE ITEMID='4711' funktioniert jedoch.
Wo habe ich da den Fehler gemacht?
Nachtrag:
Der komplette Code (falls DA irgendwo der Fehler steckt ???)
my $count = ssp::readSQLData("SELECT PGID, DESCR, PRICE, IMG FROM ITEM WHERE PGID='1200008060'","PGID","DESCR","PRICE","IMG");
if ($count >= 0) {
my $i=0;
while ($count > $i) {
$test = ssp::get_var_db("PGID",$i);
$descr = ssp::get_var_db("DESCR",$i);
$preis = ssp::get_var_db("PRICE",$i);
$img = ssp::get_var_db("IMG",$i);
$bild = qq { <IMG BORDER=0 SRC=$img> };
main::mprint("$test / $bild / $descr / $preis<br>\n");
++$i;
}
} else {
my $errtext = ssp::get_last_sqlerr();
main::mprint("Fehler beim DB Zugriff: $errtext<br>\n");
}
}
Zusatzfrage: in welcher Tabelle (wenn überhaupt) finde ich die eingetragenen Crossartikel?
> PGID='1200008060'
Vielleicht mal so testen: PGID=1200008060
PGID ist als int(11), hinterlegt ITEMID als char(40).
> Crossartikel
Bei uns ist die Cross(haupt)nummer in ERG4 hinterlegt, zB. cr01128.
Alle Artikel mit 'cr01128' in ERG4 werden dann als zusammenhängende
Crossartikel angezeigt.
jg
@jg
DANKE - PGID=1200008060 ohne ' funktioniert
zu Crossartikeln: mein Problem ist, daß ich diese in einem Formular anzeigen will und ich das (lt. ahe wenn ich ihn richtig verstanden habe) nur mit eine direkten DB-Abfrage machen kann.
Detailseite: Mengeneingabe -> 1. Formular: abhängig von der bestellten Menge unterschiedliche Ausgabe der weitern Artikel -> und dann noch ein Fomular (mit Anzeige der Crossartikel des bestellen 2. Hauptartikels, eine Infoseite auf der die gesammelten Daten gemeinsam in den WK gelegt werden.
Stehe momentan "auf der Leitung", wie ich das machen soll aber ich versuche es weiter.
Jetzt funktioniert schon mal die Anzeige der Hauptartikel :D
> Detailseite: Mengeneingabe -> 1. Formular: abhängig von der bestellten Menge unterschiedliche
> Ausgabe der weitern Artikel -> und dann noch ein Fomular (mit Anzeige der Crossartikel des
> bestellen 2. Hauptartikels, eine Infoseite auf der die gesammelten Daten gemeinsam in den WK gelegt werden.
Uups, das scheint höhere Mathematik zu sein, da komme ich jetzt nicht mehr mit... ;)
Ich würde die Crossfunktion auf jeden Fall nicht zu kompliziert machen.
Da schleichen sich dann manchmal schnell noch weitere Probleme ein.
jg
Hallo,
mal ein kurzer Denkanstoss zur Abfrage:
Angenommen im ersten Schritt wählt der Kunde den Artikel xyz aus.
Für diesen Artikel sind die Crossartikel "item1,item2,item3" im Feld Ergänzung 1 eingetragen.
Die Crossartikel sind hier dann beispielsweise die verfügbaren Flaschen für den eigentlichen Artikel.
Zur Abfrage der Flaschen können Sie dann die entsprechende SQL-Abfrage erzeugen:
...
my $itemid = ssp::get_var_form('itemid'); ## Das kommt per hidden-Input an
my $cross = ssp::get_var_form('cross'); ## Das auch, wird im vorigen Formular auf __ergaenz1__ gesetzt
if (length($cross)) {
my @itemids = split(",", $cross);
my @where;
foreach my $id (@itemids) {
push(@where, "ITEMID='$id'");
}
my $read = ssp::readSQLData("SELECT PGID,DESCR FROM ITEM WHERE " . join(" OR ", @where), "PGID", "DESCR");
## Auslesen und Ausgabe der einzelnen Artikel
}
...
@ahe
(http://www.woll-insel.at/phpBB2/images/icon/icon19.gif)
my @itemids = split(",", $cross);
my @where;
foreach my $id (@itemids) {
push(@where, "ITEMID='$id'");
das war's wo ich gestern angestanden bin
"irgendwie mit split" und weiter bin ich nicht gekommen...........
Bitte nochmal um Hilfe - ich bekomme es nicht hin :'(
...................
my $read = ssp::readSQLData("SELECT PGID,DESCR,PRICE,IMG FROM ITEM WHERE " . join(" OR ", @where), "PGID", "DESCR","PRICE","IMG");
## Auslesen und Ausgabe der einzelnen Artikel
$descr = ssp::get_var_db("DESCR");
$preis = ssp::get_var_db("PRICE");
$img = ssp::get_var_db("IMG");
$bild = qq | <img src="$img"> |;
$out = qq |
<table>
<tr>
<td> $bild </td>
<td> $preis </td>
</tr>
<tr>
<td colspan="2"> <input type="radio" name="Flasche" value="$preis" checked> $descr</td>
</tr>
</table>
|;
main::mprint("$out");
}
}
Es wird nur der erste Crossartikel angezeigt
Habe es auch mit
....................
if ($read >= 0) {
my $i=0;
while ($read > $i) {
....................
und $descr = ssp::get_var_db("DESCR",$i);
main::mprint("$out");
++$i; versucht,
aber damit ist mir das Programm jedesmal abgestürzt ???
wo habe ich den Fehler gemacht, daß nicht alle Crossartikel angezeigt werden?
was muß ich bei
<input ..... name="xxx" value="xxx" ........
korrekt eintragen?
Also die Schleife sollte so aussehen
...
my $read = ssp::readSQLData("...", "DESCR", ...);
for (my $i = 0; $i < $read; $i++) {
my $descr = ssp::get_var_db("DESCR", $i);
...
}
...
und das input sollte so aussehen
<input type="hidden" name="cross" value="__ergaenz1__">
Danke - so funktioniert es ;D
Letzter kleiner "Schönheitsfehler":
Ich möchte das "checked" verwenden - aber gibt es eine Möglichkeit, daß nicht der letzte sondern der erste Crossartikel standardmäßig ausgewählt ist?
Setzen Sie einfach bei dem zu selektierenden Wert <input type="radio" name="xxx" value="yyy" checked>.
Bei allen anderen Feldern namens xxx lassen Sie das checked weg.
?? bei "normalem" HTML-Seitenaufbau ist mir das schon klar, aber in diesem Fall habe ich doch nur einen <input type... Eintrag ($out = qq |...)
Hmm, ich scheine da an der falschen Stelle zu sein.
Was möchten Sie denn ausgeben?
Ich hatte gedacht, dass es um die Artikelauswahl getht.
Dafür würden Sie bei beispielsweise 3 Flaschen folgendes ausgeben:
<input type="radio" name="item_flasche" value="itemid1"> Dies ist Flasche 1<br>
<input type="radio" name="item_flasche" value="itemid2"> Dies ist Flasche 2<br>
<input type="radio" name="item_flasche" value="itemid3"> Dies ist Flasche 3
Dann kann der Kunde eine der drei Flaschen auswählen und im nächsten Formular können Sie per ssp::get_var_form("item_flasche") die ausgewählte Flasche festellen und die zugehörigen Korken anzeigen.
@ ahe
Antwort per mail
_______________________
--> DANKE für den geduldigen "Nachhilfeuntericht"