[PHP / SQL]Lege rijen uit db geven data van vorige rij

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Hallo,

Het gaat om een updatefunctie van gegevens in een cms. Ik heb een formulier waarin bepaalde gegevens staan. Nu wil ik die gegevens uit de database halen en dan als value van dat formulier plaatsen om zo te kunnen updaten.

Ik krijg het alleen niet goed. Het kan namelijk zo zijn dat er meer formulieren staan dan dat er gegevens zijn. Dit is mijn sql.

code:
1
2
3
4
5
6
SELECT attribute_id, language_id, attribute_desc FROM `products_attributen` WHERE attribute_id = '6' AND language_id = 1 LIMIT 0,1
SELECT attribute_id, language_id, attribute_desc FROM `products_attributen` WHERE attribute_id = '6' AND language_id = 1 LIMIT 1,1
SELECT attribute_id, language_id, attribute_desc FROM `products_attributen` WHERE attribute_id = '6' AND language_id = 1 LIMIT 2,1
SELECT attribute_id, language_id, attribute_desc FROM `products_attributen` WHERE attribute_id = '6' AND language_id = 1 LIMIT 3,1
SELECT attribute_id, language_id, attribute_desc FROM `products_attributen` WHERE attribute_id = '6' AND language_id = 1 LIMIT 4,1
SELECT attribute_id, language_id, attribute_desc FROM `products_attributen` WHERE attribute_id = '6' AND language_id = 1 LIMIT 5,1


Bij de eerste 3 query's komt hij met de juiste gegevens. De laatste 2 query's zijn echter leeg en geeft de sql van phpmyadmin dan ook "MySQL gaf een lege resultaat set terug (0 rijen). (Query duurde 0.0000 sec)"

Bij de data die via php wordt weggeschreven neemt hij dan echter bij de lege query's de data van de laatste query die wel data bevat.

Is het een beetje duidelijk wat ik bedoel en kan iemand me misschien iets verder op weg helpen??

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Barleone
  • Registratie: Maart 2009
  • Laatst online: 12:48
twisted2000 schreef op woensdag 17 juni 2009 @ 14:34:
Het kan namelijk zo zijn dat er meer formulieren staan dan dat er gegevens zijn.
Je bedoelt dat er meer formuliervelden zijn die je moet vullen, dan dat er gegevens in de db staan?
@ hieronder: Misschien dat je mijn zin niet begrijpt zoals ik hem bedoel, maar we zitten op 1 lijn. Wat jij zegt bedoelde ik namelijk. ;)

[ Voor 21% gewijzigd door Barleone op 17-06-2009 14:44 ]

Tweakers.net 6 nostalgie! - Wayback Machine
Have you tried turning it off and on again?


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
nee ik heb meer formulier velden (6 stuks) waarvan ik maar voor 3 velden gegevens heb,

De eerste 3 vult hij ook netjes, maar nummer 4,5,6 worden met dezelfde data gevuld als veld 3 terwijl die gewoon leeg moeten blijven

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is me totaal niet duidelijk wat je wil, ik snap alleen dat je lege result-sets terug krijgt? Als je in wat begrijpelijkere taal uit kunt leggen wat je nu precies bedoelt scheelt dat denk een hoop.

Ben je misschien op zoek naar een "Paging" systeem?


Verder is je topic title niet echt duidelijk, dus als je via de Topic Report een andere title voor wil stellen dan pas ik die straks ook even aan.

edit:
Na bovenstaande snap ik je probleem wat beter. Waarschijnlijk zit je probleem niet in je SQL maar gewoon in je PHP code. Je moet wel controleren of er wat terug word gegeven. Lees daarvoor even Debuggen: Hoe doe ik dat? door. Ik verwacht dat het gewoon debuggen is.

[ Voor 30% gewijzigd door Woy op 17-06-2009 14:43 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Die topic title was idd een foutje, was even weg geweest en verder gaan typen vandaar, mijn excuses.

Zo doe ik controleren in php wat ik voor data krijg:

code:
1
2
3
4
5
6
7
8
if ($row1['attribute_desc'] != "")
    {
        $value = stripslashes($row1['attribute_desc']);
    }
    else
    {
        $value = "";
    }


De $value is dan data die in het formulier moet komen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Kun je iets meer code laten zien? Bijvoorbeeld ook hoe je je query uitvoerd. Waarom roep je trouwens een stripslashes aan op je resultaat?

Tot slot is het handiger dat je ook een voorstel voor een titel doet ipv enkel zeggen dat je het vergeten bent. Je voorstel kun je doorgeven via een topicreport.

[ Voor 37% gewijzigd door Janoz op 17-06-2009 15:04 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
En hoe vul je $rowl?

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
De limit wordt opgebouwd uit een lus.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$qry1 = "SELECT     attribute_id,
                    language_id,
                    attribute_desc
        FROM        " . PRODUCTS_ATTRIBUTE_TABLE . "
        WHERE       attribute_id = '" . stripslashes($row0['attribute_id']) . "'
        AND         language_id = 1
        LIMIT       " . $t . "," . $t1 . "";
                    
        $res1 = mysql_query($qry1) or die("Database error<HR>" . mysql_error());
    
             while ($row1 = mysql_fetch_array($res1)) { 
                        
                 if ($row1['attribute_desc'] != "")
        {
            $value = stripslashes($row1['attribute_desc']);
        }
        else
        {
            $value = "";
        }
    }

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Janoz schreef op woensdag 17 juni 2009 @ 15:03:
Tot slot is het handiger dat je ook een voorstel voor een titel doet ipv enkel zeggen dat je het vergeten bent. Je voorstel kun je doorgeven via een topicreport.
Waarschijnlijk een domme vraag maar waar vind ik topic report?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

1 : Met het handje dat voor de topic titel staat

2 : Ah, dat vermoede ik al. Bedenk eens wat voor waarde $value krijgt (of beter gezegd, houdt) wanneer je query geen resultaten oplevert en de fetch row gelijk false oplevert.


Tot slot vind ik het wel een heel vreemde manier om 6 veldjes te vullen. Waarom gebruik je uberhaupt 6 queries voor iets dat ook in 1 kan (en de stripslashes vraag staat nog steeds)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Die stripslashes was idd n foutje, heb ik weggehaald.

Die 6 velden kunnen ook 3 velden zijn, voor deze query heb ik nog een andere query die uit de database haalt hoeveel velden hij moet laden. Dan haalt hij met de bovenstaande query op welk van de opgehaalde velden data bevat en met hij die ook vullen.

Het gaat om attributen die dynamisch worden aangemaakt met een dynamisch aantal opties voor een productpagina voor een shop.
Als je dus een attribuut aanmaakt kun je daarbij het aantal mogelijke opties opgeven.

Bij ieder product kun je dan kiezen om een of meerdere van die opties in te vullen. Vandaar de vreemde manier om 6 veldjes te vullen, dat kan dus elke keer een ander aantal zijn.

En dat die waarde blijft staan dat begrijp ik, ik kan echter even geen oplossing bedenken.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
twisted2000 schreef op woensdag 17 juni 2009 @ 16:27:
Bij ieder product kun je dan kiezen om een of meerdere van die opties in te vullen. Vandaar de vreemde manier om 6 veldjes te vullen, dat kan dus elke keer een ander aantal zijn.
Dan selecteer je gewoon alle rows en loop je er met een loopje doorheen :?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Janoz schreef op woensdag 17 juni 2009 @ 15:03:
Waarom roep je trouwens een stripslashes aan op je resultaat?
Misschien een beetje off-topic maar ik ben even benieuwd wat er mis is met stripslashes...?

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Ok, dat kan ik dan inderdaad doen. Heeft iemand nog n richting waar ik op kan m.b.t. de lege rows?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 17 juni 2009 @ 16:36:
[...]

Misschien een beetje off-topic maar ik ben even benieuwd wat er mis is met stripslashes...?
Er is niks mis met stripslashes als je slashes weg wilt halen, maar waarom wil je slashes weghalen?
twisted2000 schreef op woensdag 17 juni 2009 @ 16:37:
Ok, dat kan ik dan inderdaad doen. Heeft iemand nog n richting waar ik op kan m.b.t. de lege rows?
Een lege row bestaat niet. Als je bijvoorbeeld max 6 fields wil vullen doe je iets dergelijks
code:
1
2
3
4
5
6
$result = DoQuery();
$rowNum = 0;
while( $rowNum < 6 && HasMoreRows($result) )
{
    FillField( $rowNum++, GetRow( $result ) );
}

[ Voor 43% gewijzigd door Woy op 17-06-2009 16:45 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 17 juni 2009 @ 16:36:
[...]

Misschien een beetje off-topic maar ik ben even benieuwd wat er mis is met stripslashes...?
Met stripslashes zelf in principe niks. Het is een functie om een string die in geescapte toestand is te converteren naar een normale string. De functie loslaten op een niet geescapte string zorgt echter voor vreemde resultaten.

Hoe het hier toegepast wordt kan volgens mij maar 2 dingen betekenen.
1 : Hij wordt losgelaten op een string die niet in een geescapte toestand is. Fout dus
2 : De strings staan geescaped in de database. Dat is in principe ook fout aangezien het helemaal niet nodig is om ze geescaped in de database te hebben staan. Over het algemeen wijst dat juist op symptoombestrijding van het lukraak toepassen van addslashes.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Die stripslashes zijn daar gekomen omdat ik werkte met een wysiwyg editor, waarin mensen nog weleens vanalles typen. Is beetje blijven hangen, om snel te werken doe ik namelijk veel copy pasten waardoor mn code niet altijd zo mooi blijft.
Verder ben ik geen prof scripter vandaar.

Blijft voor mij nog altijd de vraag of iemand me kan helpen met het oorspronkelijke probleem?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
De fout zit gewoon in het feit dat de expressie in de while loop op regel 11 van je code voorbeeld ( twisted2000 in "[PHP / SQL]Lege rijen uit db geven data ..." ) altijd naar false evalueert als je query geen rows retourneert. Daar had je eenvoudig achter kunnen komen als je een beetje had gedebugged, dus ik wil je nogmaals op: Debuggen: Hoe doe ik dat? wijzen

Verder blijft mijn punt staan dat het erg vreemd is om 6 maal in een loopje achter elkaar 1 record op te halen met een limit van 1. Haal dan gewoon meteen 6 rows op en loop daar met een loopje doorheen.

[ Voor 7% gewijzigd door Woy op 17-06-2009 16:59 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Heb het! Bedankt voor jullie hulp

code:
1
2
3
4
5
6
7
8
if ($row1 = mysql_fetch_array($res1)) { 
                        
                $value = stripslashes($row1['attribute_desc']);
            }
            else
            {
                $value = "";
            }

Acties:
  • 0 Henk 'm!

Verwijderd

Janoz schreef op woensdag 17 juni 2009 @ 16:43:
[...]


Met stripslashes zelf in principe niks. Het is een functie om een string die in geescapte toestand is te converteren naar een normale string. De functie loslaten op een niet geescapte string zorgt echter voor vreemde resultaten.

Hoe het hier toegepast wordt kan volgens mij maar 2 dingen betekenen.
1 : Hij wordt losgelaten op een string die niet in een geescapte toestand is. Fout dus
2 : De strings staan geescaped in de database. Dat is in principe ook fout aangezien het helemaal niet nodig is om ze geescaped in de database te hebben staan. Over het algemeen wijst dat juist op symptoombestrijding van het lukraak toepassen van addslashes.
Krijg nou wat, heb ik al die jaren de functie addslashes verkeerd begrepen. }:O
Ik dacht altijd dat de strings geescaped de database ingingen, maar dat is natuurlijk helemaal niet zo, je escaped alleen de query. 8)7
Pagina: 1