Problemer med at læse sql rigtig

Tags:    php sql mysqli

Hej Udvikleren,

det er sådan at jeg er i gang med at gøre så min hjemmeside kan modtage betaling, og er snart færdig men mangler lige de sidste par små ting før at jeg er helt færdig.

Fold kodeboks ind/udPHP kode 


Den vil ikke angiv nogle dag eller point, men lige før min update skriver jeg sådan her:

Fold kodeboks ind/udPHP kode 


og der kommer de rigtig tal ud fra tabellen. som jeg ønsker at der skal komme ud der fra!



Samtidig har jeg også det her problem: Lad også sige at jeg køber 20 dag medlemskab men så om 5 dage finder jeg ud af at jeg gerne vil forlæng medlemskab, kan jeg på en eller anden måde gøre sådan at den bare bygge videre på datoen?,



10 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 12 karma
Sorter efter stemmer Sorter efter dato
umildbart ser det ud som om du overskriver din variabel $stmt du erklærer her
ln 1 >> if ($stmt = $this->mysqli->prepare('SELECT pakker.dage, ...
med
ln 10 >> if($stmt = $this->mysqli->prepare('UPDATE bruger ...

dvs din while ($stmt->fetch()) { ln 7 fucker up

prøv at lave navnet om på din $stmt variabel inde i while løkken til feks $stmt1

(utested)
Fold kodeboks ind/udKode 





prøv at tilføje følgende test
echo "UPDATE bruger SET rank=".$rank.", betal_dato=NOW() + INTERVAL " . $dage . " DAY, point=point+" . $point . " WHERE `id`=".$id;
inde i din while
hvad udskriver den ?? er det det vi forvendter ??

Fold kodeboks ind/udKode 


kan du ikke dumpe nogle test data til følgende tabeller: bruger, pakker, pakkertekst.



Lad også sige at jeg køber 20 dag medlemskab men så om 5 dage finder jeg ud af at jeg gerne vil forlæng medlemskab, kan jeg på en eller anden måde gøre sådan at den bare bygge videre på datoen?,

pseudo code
$dage=20;
if (betal_dato>NOW() ){
betal_dato + INTERVAL $dage
}
else{
betal_dato=NOW() + INTERVAL $dage
}

men det tager vi bagefter





Ingen af dem smider noget i databasen med point eller dato.
Jeg kan på ingen måde se problem lige nu. hmm


lyder mystisk, det virker hos mig
her er hele min test code, prøv at ligge dette i en seperat fil og kør det.

du skal dog rette connection
$conn = MySqlIConnOOP();
til
$conn = MySqlIConnOOP("database_navn"); // eller hvad du har kaldt din database

Fold kodeboks ind/udKode 


brugertabellen, kollonner jeg ikke bruger fjernet, intet ændret ellers
Fold kodeboks ind/udKode 

de 2 andre tabeller er der ikke ædret på, men du skal kan slåes sammen da der er en 1 til 1 relation mellem dem




@ronny den smider ikke den dag op i sql og de point som bruger skal ha,

Dagen = bliver den dato som det er i dag.
Point = kommer der intet op.



ln 10
her er der vist et pluds for meget
point=point++" . $point .
skulle da være
point = point+" . $point .




ln 10
her er der vist et pluds for meget
point=point++" . $point .
skulle da være
point = point+" . $point .


Den smider ikke nogle point ovn i det som man har i forvejen.



prøv at tilføje følgende test
echo "UPDATE bruger SET rank=".$rank.", betal_dato=NOW() + INTERVAL " . $dage . " DAY, point=point+" . $point . " WHERE `id`=".$id;
inde i din while
hvad udskriver den ?? er det det vi forvendter ??

Fold kodeboks ind/udKode 


kan du ikke dumpe nogle test data til følgende tabeller: bruger, pakker, pakkertekst.



Lad også sige at jeg køber 20 dag medlemskab men så om 5 dage finder jeg ud af at jeg gerne vil forlæng medlemskab, kan jeg på en eller anden måde gøre sådan at den bare bygge videre på datoen?,

pseudo code
$dage=20;
if (betal_dato>NOW() ){
betal_dato + INTERVAL $dage
}
else{
betal_dato=NOW() + INTERVAL $dage
}

men det tager vi bagefter


Efter at have skrevet den kode som du sat så komme det her:

Fold kodeboks ind/udSQL kode 


Det var også det jeg havde forvente at der skulle komme ud:

Bruger:

CREATE TABLE IF NOT EXISTS `bruger` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`brugernavn` varchar(400) NOT NULL,
`adgangskode` varchar(600) NOT NULL,
`fornavn` varchar(200) NOT NULL,
`efternavn` varchar(200) NOT NULL,
`rank` int(2) NOT NULL,
`betal_dato` datetime NOT NULL,
`img` varchar(500) NOT NULL,
`opret_dato` datetime NOT NULL,
`point` int(200) NOT NULL,
`ipbruger` varchar(255) NOT NULL,
`login_ip` varchar(100) NOT NULL,
`profiltekst` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=236 ;



CREATE TABLE IF NOT EXISTS `pakker` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`navn` varchar(100) NOT NULL,
`pris` int(100) NOT NULL,
`info` varchar(400) NOT NULL,
`dage` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Data dump for tabellen `pakker`
--

INSERT INTO `pakker` (`id`, `navn`, `pris`, `info`, `dage`) VALUES
(1, 'Admin', 0, 'Admin', 0),
(2, 'Gratis', 0, 'Kom let i gang med ordklar', 0),
(3, 'Ordklar plus', 150, 'Kom godt i gang', 75),
(4, 'Big Plus', 249, 'En ny livsstil', 240);


CREATE TABLE IF NOT EXISTS `pakkerTekst` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`point` int(11) NOT NULL,
`infotekst` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Data dump for tabellen `pakkerTekst`
--

INSERT INTO `pakkerTekst` (`id`, `point`, `infotekst`) VALUES
(2, 200, '<p class="pi-smaller-text"><span>*</span> Hjælper dig gerne med at finde et tilbud til Efterskoler</p>\n <p class="pi-smaller-text"><span>*</span> Der er Gratis support / Hjælp hele tiden via email som er ordklar support!</p>\n\n<p class="pi-smaller-text"><span>*</span> Adgang for ordblinde\n</p>'),
(3, 325, '<p class="pi-smaller-text"><span>*</span> Hjælper dig gerne med at finde et tilbud til Efterskoler</p>\n <p class="pi-smaller-text"><span>*</span> Der er Gratis support / Hjælp hele tiden via email som er ordklar support!</p>\n <p class="pi-smaller-text"><span>*</span>Mulighed for at se 30 minutter video ved ordklar.dk</p>'),
(4, 700, '<p class="pi-smaller-text"><span>*</span> Hjælper dig gerne med at finde et tilbud til Efterskoler og VUC mv</p>\n <p class="pi-smaller-text"><span>*</span> Der er Gratis support / Hjælp hele tiden via email som er ordklar support!</p>\n <p class="pi-smaller-text"><span>*</span>Mulighed for at se 60 minutter video ved ordklar.dk</p>');





er du til enkelt eller dobbelt plinger i din prepare statement ??
ret
if($stmt = $this->mysqli->prepare('UPDATE bruger SET rank=?, betal_dato=NOW() + INTERVAL " . $dage . " DAY, point=point++" . $point . " WHERE `id`=?')){ // hvilke id snakker vi om her ?? de er godt nok ens men angiv det

til
if($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=?, betal_dato=NOW() + INTERVAL ' . $dage . ' DAY, point=point+' . $point . ' WHERE bruger.id=?')) {


iøvrigt fik jeg glæde af at kunne udskrive statemented med
http://stackoverflow.com/questions/962986/how-to-echo-a-mysqli-prepared-statement
Fold kodeboks ind/udKode 



rettet code
Fold kodeboks ind/udKode 




nu tror jeg den ged er rundbarberet
Fold kodeboks ind/udKode 





er du til enkelt eller dobbelt plinger i din prepare statement ??
ret
if($stmt = $this->mysqli->prepare('UPDATE bruger SET rank=?, betal_dato=NOW() + INTERVAL " . $dage . " DAY, point=point++" . $point . " WHERE `id`=?')){ // hvilke id snakker vi om her ?? de er godt nok ens men angiv det

til
if($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=?, betal_dato=NOW() + INTERVAL ' . $dage . ' DAY, point=point+' . $point . ' WHERE bruger.id=?')) {


iøvrigt fik jeg glæde af at kunne udskrive statemented med
http://stackoverflow.com/questions/962986/how-to-echo-a-mysqli-prepared-statement
Fold kodeboks ind/udKode 



rettet code
Fold kodeboks ind/udKode 




nu tror jeg den ged er rundbarberet
Fold kodeboks ind/udKode 



Ingen af dem smider noget i databasen med point eller dato.

Jeg kan på ingen måde se problem lige nu. hmm



Meget meget mærkeligt fordi hos mig virker det på ingen måde.

Det er muligt fordi hvis jeg skriver sådan her i sql så virker det helt fint ud problemer:

Fold kodeboks ind/udSQL kode 



(DET VIRKER NU!!, Det virker efter at pakker og pakkerTekst kom over i en, så virker det 100% uden problemer)



Indlæg senest redigeret d. 08.10.2014 21:45 af Bruger #17136
t