Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: oci / php while problem

  1. #1
    Guest
    Gast

    Standard oci / php while problem

    Hi!

    folgendes Problem:

    Die Page ist so eine Art Webshop - der Kunde sucht sich die Artikel aus, kann sie stornieren (einzelne und alle), kann Favoriten hinzufügen und nach Artikeln suchen, ausserdem kann er bis 1 Woche im Vorraus bestellen. Wenn er nun aber 2 Artikel für eine Woche aussucht und diese mit dem Button "alle stornieren" stornieren will, wird der Eintrag "Vorbestellt" welcher in der DB steht nicht richtig upgedatet.. ich weiss zwar wieso aber nicht wie ich es lösen soll

    also bitte helft mir *g*

    Hier der Code:

    <?php
    session_start();
    require('auth.php');
    require('connect.php');

    $sql= ociparse($c,"select b.id,l.vorbestellt,b.bestnr from bestellungen b, lager l where b.fixiert is Null and b.kurzz = '" . $_SESSION['kuerzel'] ."' and b.bestnr=l.bestnr");
    ociexecute($sql);

    while($res=oci_fetch_array($sql))
    {
    $vorbestellt = $res['VORBESTELLT'] - 1;
    $sql0= ociparse($c,"update lager set vorbestellt = " . $vorbestellt . " where bestnr = '". $res['BESTNR'] ."'");
    ociexecute($sql0);
    $sql1= ociparse($c,"delete from bestellungen where fixiert is Null and ID = '".$res['ID']."' and kurzz = '".$_SESSION['kuerzel'] ."'");
    ociexecute($sql1);

    ocicommit($c);
    }

    //header('location:bestellungen.php');
    ?>

    Die beiden Sätze werden zwar aus der DB gelöscht, aber eben von vorbestellt wird nicht 2 abgezogen sondern nur 1 weil ja das erste Select (ausserhalb der while schleife) nur einmal ausgeführt wird und dadurch auch wenn das update schon einmal durchlief noch immer 2 als Wert in Vorbestellt enthält.


    Ich danke schonmal fuer die Hilfe!
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ich denke mal ohne dass du uns einen tieferen einblick in deine datenbankstruktur gibst und hier und da ein wenig dokumentierst wie du genau intern arbeitest wird es ziemlich schwer für uns dir da zu helfen...


    aber wenn ich da halbswegs durchgestiegen bin, müsste es dieser Code tun:

    [php:1:b304b2352a]<?php
    session_start();
    require('auth.php');
    require('connect.php');

    $sql= ociparse($c,"select b.id,l.vorbestellt,b.bestnr from bestellungen b, lager l where b.fixiert is Null and b.kurzz = '" . $_SESSION['kuerzel'] ."' and b.bestnr=l.bestnr");
    ociexecute($sql);

    while($res=oci_fetch_array($sql))
    {
    $res['VORBESTELLT']--;
    $vorbestellt = $res['VORBESTELLT'];
    $sql0= ociparse($c,"update lager set vorbestellt = " . $vorbestellt . " where bestnr = '". $res['BESTNR'] ."'");
    ociexecute($sql0);
    $sql1= ociparse($c,"delete from bestellungen where fixiert is Null and ID = '".$res['ID']."' and kurzz = '".$_SESSION['kuerzel'] ."'");
    ociexecute($sql1);

    ocicommit($c);
    }

    //header('location:bestellungen.php');
    ?> [/php:1:b304b2352a]
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

  3. #3
    Gast

    Standard

    [php:1:aa6a572827]<?php
    <?php
    session_start();
    require('auth.php'); // ueberpruefung ob session vorhanden oder nicht nicht -> weiter interessant
    require('connect.php'); //datenbank connect

    $sql= ociparse($c,"select b.id,l.vorbestellt,b.bestnr from bestellungen b, lager l where b.fixiert is Null and b.kurzz = '" . $_SESSION['kuerzel'] ."' and b.bestnr=l.bestnr"); //selektiert alle eintraege im table bestellungen (wo die bestellungen der einzelnen kunden hinterlegt werden) die auf den user dieser session zutreffen
    ociexecute($sql);

    while($res=oci_fetch_array($sql))
    {
    $vorbestellt = $res['VORBESTELLT'] - 1;
    $sql0= ociparse($c,"update lager set vorbestellt = " . $vorbestellt . " where bestnr = '". $res['BESTNR'] ."'"); //im lager table ist die produktpalette verspeichert mit den Beständen und vorbestellten mengen des produkts -> da ja hier ein storno vorgenommen wird, soll hier die vorbestellte menge wieder zurückgerechnet werden, wenn aber nun von einem artikel 2 einträge im bestellungen table sind funktioniert das nicht (auch nicht das von modula)
    ociexecute($sql0);
    $sql1= ociparse($c,"delete from bestellungen where fixiert is Null and ID = '".$res['ID']."' and kurzz = '".$_SESSION['kuerzel'] ."'"); // und hier soll en eben dann endgültig die bestellungen des users aus dem bestellungen table gelöscht werden und somit ist der kunde wieder "bestellungslos"...
    ociexecute($sql1);

    ocicommit($c);
    }

    header('location:bestellungen.php');
    ?>
    ?>[/php:1:aa6a572827]

    hier bitte (: deins funktioniert nicht modula

  4. #4
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ah, ich glaub so langsam kapiere ichs...

    $res sieht beispielsweise so aus?
    [php:1:73fe3d4732]<?php
    $res = array(
    'id' => '123456', // primary_key, interne identifizierung?
    'vorbestellt' => '2', // menge / anzahl die von dem artikel aus dem Lager vorbestellt wurde?
    'bestnr' => '56789', // bestellnummer des artikels, für die Buchhaltung, eindeutig?
    );
    ?>[/php:1:73fe3d4732]

    soweit richtig? wenn nicht, bitte korrigieren
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

  5. #5
    Gast

    Standard

    jop richtig (:

    ID is eindeutig definiert und fortlaufend (also bei jedem insert von einem satz wird automatisch weitergezählt)
    vorbestellt wie du schon sagtest
    und bestnr ist eindeutig, sieht aber entweder so aus: "H1234" oder so "G1234", wobei 1234 beliebige zahlen sein koennen.

  6. #6
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Na, dann fehlt in dem Array aber die Angabe, wie oft denn der Kunde den Artikel bestellt hat - du müsstest quasi deinen SELECT ändern:
    Code:
    select b.id,l.vorbestellt,b.bestnr
    - so, dass du auch auf die anzahl zugreifen kannst die der Kunde bestellt hat, verstehst du was ich meine?

    Weil das ist ja die anzahl die du aus dem Lager abziehen musst - und nicht bloß immer "1" sondern auch mal 2,3,4 oder je nachdem wieviel halt der kunde vorbestellt hat
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

  7. #7
    Azubi(ne)
    Registriert seit
    18.08.2005
    Beiträge
    86
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    so endlich mal dazu überwunden mich anzumelden :>

    der Kunde kann nicht eine größere anzahl an artikel bestellen sondern immer einen von der gleichen sorte pro tag aber bis zu einer woche im vorraus. so kann es eben sein dass im table bestellungen vom gleichen benutzer mehrere sätze stehen wo aber das gleich bestellt wurde nur eben ein anderes datum

    du musst dir das nicht als webshop wie amazon oder was weiss ich vorstellen es is nur ähnlich... wenn ich dir nun sage dass es eine interne mittagessensauswahl page is wirst du dir auch ned viel vorstellen könnnen *g* es is so dass jeder benutzer in der firma nen pc und nen login fuer diese page hat, hier kann er: fuer jeden tag das essen bestellen (im vorraus) / stornieren / suchen / überblick über seine bestellungen etc. das prinzip eines webshops nur ohne bezahlung und mengen ^^

  8. #8
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    wenn also im table mehrere sätze von einem Benutzer sind gibt deine SQL Abfrage ja auch mehere an $res=oci_fetch_array($sql) zurück - oder nicht?

    d.h. du müsstest bei jedem Durchlauf der while schleife "vorbestellt" um EINS zurücksetzen, oder nicht?

    Code:
    ociparse&#40;$c,"update lager set vorbestellt = vorbestellt - 1 where bestnr = '". $res&#91;'BESTNR'&#93; ."'"&#41;
    Wenns das nicht ist, dann brauch ich mal nen Beispieldatensatz - entweder über print_r($res) in der while schleife ausgegeben oder sonst wie
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

  9. #9
    Azubi(ne)
    Registriert seit
    18.08.2005
    Beiträge
    86
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    genau das war mein ansatz nur nun ist das problem, dass ich in $res die sätze stehen hab, und wenn der da die while schleife durchgeht und vorbestellt - 1 rechnet wird trotzdem weiter drinnen stehen vorbestellt=1.

    stell dir das doch mal vor...

    Du hast das Array $res sagen wir mit 2 bestellungen von einem user wo nur das datum unterschiedlich ist
    wuerde als so aussehen:

    ID vorbestellt BestNr
    1 2 H1235
    2 2 H1235


    nun geht php her laeuft den ersten satz durch, rechnet vorbestellt - 1, macht das update und löscht den ersten satz. fertig nun 2. durchlauf -> es steht wieder 2 vorbestellt im array also wird wieder update gemacht mit vorbestellt=1....

    ich hoffe das is verständlich :/

  10. #10
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    wenn von einem user nun sagen wir mal 4 bestellungen wären, würd das dann so aussehen?

    ID vorbestellt BestNr
    1 4 H1235
    2 4 H1235
    3 4 H1235
    4 4 H1235
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •