Artikel von bestimmter Seite per ssp::readSQLData auslesen

Begonnen von dobra, Juni 03, 2007, 09:37:21

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

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?
mfG
dobra

jg

> 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
--
www.schmuckzone.de

dobra

@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
mfG
dobra

jg

> 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
--
www.schmuckzone.de

ahe

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
    }
    ...
MfG ahe

dobra

@ahe


        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...........
mfG
dobra

dobra

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?
mfG
dobra

ahe

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__">


MfG ahe

dobra

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?
mfG
dobra

ahe

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.
MfG ahe

dobra

??  bei "normalem" HTML-Seitenaufbau ist mir das schon klar, aber in diesem Fall habe ich doch nur einen <input type...  Eintrag ($out = qq |...)
mfG
dobra

ahe

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.
MfG ahe

dobra

@ ahe

Antwort per mail
_______________________

-->  DANKE für den geduldigen "Nachhilfeuntericht"
mfG
dobra