Probleem met query *OPGELOST*

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Racoon smasher

racoon smasher

15/04/2014 11:38:57
Quote Anchor link
Het lukt me maar niet om de juiste query te maken zodat het de juiste gegevens uit de database pakt. Ik heb op het internet gekeken en vind alles over JOINS, maar hier kom ik maar niet aan uit, want snap daar serieus niks van.

Is er iemand die me kan helpen hiermee?

Mysql error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\linkbuilding\instellingen.php on line 76


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
if(isset($_POST['submit']))
{


    /* Tabel style */
    $bodyBG = mysql_real_escape_string($_POST['bodyBG']);
    $headerBG = mysql_real_escape_string($_POST['headerBG']);
    $subBalkBG = mysql_real_escape_string($_POST['subBalkBG']);
    $subBalkText = mysql_real_escape_string($_POST['subBalkText']);
    $menuBG = mysql_real_escape_string($_POST['menuBG']);
    $menuText = mysql_real_escape_string($_POST['menuText']);
    $menuHover = mysql_real_escape_string($_POST['menuHover']);
    $menuDropHover = mysql_real_escape_string($_POST['menuDropHover']);
    $lettertype = mysql_real_escape_string($_POST['lettertype']);

    /* Tabel tablestyle */
    $tableHeaderBG = mysql_real_escape_string($_POST['tableHeaderBG']);
    $tableHeaderText = mysql_real_escape_string($_POST['tableHeaderText']);
    $tableContentText = mysql_real_escape_string($_POST['tableContentText']);
    $tableRowOneBG = mysql_real_escape_string($_POST['tableRowOneBG']);
    $tableRowTwoBG = mysql_real_escape_string($_POST['tableRowTwoBG']);
    $tableRowHoverBG = mysql_real_escape_string($_POST['tableRowHoverBG']);
    
    
    $queryEdit = mysql_query("UPDATE style, tablestyle SET bodyBG = '$bodyBG', headerBG = '$headerBG', subBalkBG = '$subBalkBG', subBalkText = '$subBalkText', menuBG = '$menuBG', menuText = '$menuText', menuHover = '$menuHover', menuDropHover = '$menuDropHover', lettertype = '$lettertype', tableHeaderBG = '$tableHeaderBG', tableHeaderText = '$tableHeaderText', tableContentText = '$tableContentText', tableRowOneBG = '$tableRowOneBG', tableRowTwoBG = '$tableRowTwoBG', tableRowHoverBG = '$tableRowHoverBG' WHERE id = 1");
    if ($queryEdit)
    {

        $queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het thema van de website aangepast', '$date')");

        if($queryLogboek)
        {

            $melding = 'Het thema is aangepast!';
        }
    }
}

    $querySelect = mysql_query("SELECT * FROM style, tablestyle where id = 1");
    $queryFetch = mysql_fetch_array($querySelect);

?>
Gewijzigd op 16/04/2014 13:56:02 door Racoon smasher
 
PHP hulp

PHP hulp

29/03/2024 08:53:25
 
- SanThe -

- SanThe -

15/04/2014 11:42:51
Quote Anchor link
Je query zal mislukt zijn.
Bouw eens nette foutafhandeling in dan ga je wat zien.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/04/2014 12:31:51
Quote Anchor link
Ik denk dat je heel blij mag zijn dat de queries niet uitgevoerd werden, want je vergeet een heel belangrijk onderdeel van de join, nl de join voorwaarden. Zonder die creeër je een CROSS JOIN.
 
Racoon smasher

racoon smasher

15/04/2014 15:52:56
Quote Anchor link
Het probleem is opgelost.

Ik heb er een fouthandeling aan toegevoegd en de select query aangepast. Verder heb ik ook geleerd dat een update query geen 2 tabellen tegelijk kan aanpassen en dat het in 2 aparte query's moet.

Als het CMS af is zal ik hem wel laten zien bij het bijbehorende topic.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
if(isset($_POST['submit']))
{

    $bodyBG = mysql_real_escape_string($_POST['bodyBG']);
    $headerBG = mysql_real_escape_string($_POST['headerBG']);
    $subBalkBG = mysql_real_escape_string($_POST['subBalkBG']);
    $subBalkText = mysql_real_escape_string($_POST['subBalkText']);
    $menuBG = mysql_real_escape_string($_POST['menuBG']);
    $menuText = mysql_real_escape_string($_POST['menuText']);
    $menuHover = mysql_real_escape_string($_POST['menuHover']);
    $menuDropHover = mysql_real_escape_string($_POST['menuDropHover']);
    $lettertype = mysql_real_escape_string($_POST['lettertype']);
    
    $tableHeaderBG = mysql_real_escape_string($_POST['tableHeaderBG']);
    $tableHeaderText = mysql_real_escape_string($_POST['tableHeaderText']);
    $tableContentText = mysql_real_escape_string($_POST['tableContentText']);
    $tableRowOneBG = mysql_real_escape_string($_POST['tableRowOneBG']);
    $tableRowTwoBG = mysql_real_escape_string($_POST['tableRowTwoBG']);
    $tableRowHoverBG = mysql_real_escape_string($_POST['tableRowHoverBG']);
    
    
    $queryEdit1 = mysql_query("UPDATE style SET bodyBG = '$bodyBG', headerBG = '$headerBG', subBalkBG = '$subBalkBG', subBalkText = '$subBalkText', menuBG = '$menuBG', menuText = '$menuText', menuHover = '$menuHover', menuDropHover = '$menuDropHover', lettertype = '$lettertype' WHERE id = 1");
    $queryEdit2 = mysql_query("UPDATE tablestyle SET tableHeaderBG = '$tableHeaderBG', tableHeaderText = '$tableHeaderText', tableContentText = '$tableContentText', tableRowOneBG = '$tableRowOneBG', tableRowTwoBG = '$tableRowTwoBG', tableRowHoverBG = '$tableRowHoverBG' WHERE id = 1");    
    if ($queryEdit1 && $queryEdit2)
    {

        $queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het thema van de website aangepast', '$date')");

        if($queryLogboek)
        {

            $melding = 'Het thema is aangepast!';
        }
    }

    else
    {
        $melding =     'Er is iets fout gegaan. Herlaad de website en probeer het opnieuw!';
    }
}

    $querySelect = mysql_query("SELECT * FROM style, tablestyle WHERE style.id = tablestyle.id AND style.id = 1");
    $queryFetch = mysql_fetch_array($querySelect);

?>
Gewijzigd op 16/04/2014 13:35:17 door racoon smasher
 
Obelix Idefix

Obelix Idefix

15/04/2014 23:12:01
Quote Anchor link
Waarom maak je al die variabelen aan (regel 4 t/m 19)?
 
Reshad F

Reshad F

15/04/2014 23:28:36
Quote Anchor link
Ik zou de basis voor mysql en php eerst even leren voor je begint met het echte logica gedeelte want je moet eerst A beheersen voor je naar B gaat. Ik kan nu zoveel fouten opnoemen in je 41 regels code dat er misschien 1 regel overblijft die goed is.
 
Racoon smasher

racoon smasher

16/04/2014 09:17:07
Quote Anchor link
Obelix en Idefix op 15/04/2014 23:12:01:
Waarom maak je al die variabelen aan (regel 4 t/m 19)?


Hoe wil je het anders doen? als je andere oplossing weet die sneller en makkelijker is dan zou het fijn zijn :P

Toevoeging op 16/04/2014 09:19:35:

Reshad F op 15/04/2014 23:28:36:
Ik zou de basis voor mysql en php eerst even leren voor je begint met het echte logica gedeelte want je moet eerst A beheersen voor je naar B gaat. Ik kan nu zoveel fouten opnoemen in je 41 regels code dat er misschien 1 regel overblijft die goed is.



Reshad momenteel is er niks fout aan me code, want het werkt perfect en is niet te injecten, maar als jij weet hoe ik het beter kan doen dan mag jij je skills tonen, leer ik ook van :)

en over het leren van PHP gesproken, ik ga toevallig binnenkort beginnen met een abonnement op TreeHouse.
 
Ivo P

Ivo P

16/04/2014 09:20:47
Quote Anchor link
Quote:
Hoe wil je het anders doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php

$queryEdit1
= mysql_query("UPDATE style SET bodyBG = '". mysql_real_escape_string($_POST['bodyBG'] ."', ... ?>


Bijkomend voordeel is, dat je ook zeker ziet dat je de betreffende vars hebt escapet.
Gewijzigd op 16/04/2014 09:22:03 door Ivo P
 
Racoon smasher

racoon smasher

16/04/2014 09:25:36
Quote Anchor link
Ivo P op 16/04/2014 09:20:47:
Quote:
Hoe wil je het anders doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php

$queryEdit1
= mysql_query("UPDATE style SET bodyBG = '". mysql_real_escape_string($_POST['bodyBG'] ."', ... ?>


Bijkomend voordeel is, dat je ook zeker ziet dat je de betreffende vars hebt escapet.


Dit is inderdaad een goeie alternatief, maar is niet overzichtelijk en aangezien een stagiaire dit CMS volgend jaar moet overnemen en ze op de manier die ik doe werken op school is het wel handig om het zo te houden.
 
Ivo P

Ivo P

16/04/2014 09:34:11
Quote Anchor link
Het is ook handig om stagairs een goede manier van werken te leren.

Leerlingen lopen stage om in de werkelijkheid te kunnen kijken. Theorie is leuk, maar in de praktijk gaat het vaak anders.
Veel docenten zijn geen expert op elk vakgebied.Ze dragen een bepaalde manier van werken over op leerlingen, zodat ze vast kunnen beginnen.
Als tijdens de lessen alleen met variabelen met namen als $x en $y gewerkt wordt, is dat bijvoorbeeld geen reden om vars als $naam maar te vermijden.

Het kost je ongeveer 5 minuten bij een trage leerling om uit te leggen dat die vars gewoon in de query geplaatst kunnen worden.
Tevens zou het minder geheugen kunnen gebruiken, omdat de waarden niet opnieuw onthouden moeten worden (niet 100% waar trouwens).

Vroeger was dat een issue, omdat een programma in een max aantal kB geheugen moest passen.
Maar dat is geen reden om nu de volle 8GB van je server te vullen, "omdat het kan".

Los daarvan:
Je moet nu een heel eind naar boven zoeken of variabele $x gemaakt is met mysql_real_escape_string(), of dat dat vergeten is, of dat de var een heel andere afkomst had.

Daarnaast: $bodyBG is nu alleen bruikbaar om in een query in te zetten.
Zou je hem naar het scherm willen sturen, dan is deze vervuild door mysql_real_escape_string. Immers, voor output naar het scherm heb je htmlspecialchars() nodig




Toevoeging op 16/04/2014 09:37:35:

Qua overzichtelijk:

Dat is nog maar de vraag. Ik vind het niet niet overzichtelijk dat eerst een heel blok vars aangemaakt wordt.
Zou er 1 bijkomen, die ook naar de update query moet , dan moet je die op 2 plekken toevoegen.

En jij schrijft je query uit op 1 regel, maar
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$update
= "UPDATE tabel
              SET kolom1 = '123',
                  kolom2 = 'ABC',
                  kolom3 = '"
.mysql_real_escape_string($_POST['x'], $conn) ."',
                  kolom4 = '"
.mysql_real_escape_string($_POST['y'], $conn)."'
           WHERE id = '999'"
;
?>


mag ook, en is nog leesbaar ook....
Gewijzigd op 16/04/2014 09:38:12 door Ivo P
 
Racoon smasher

racoon smasher

16/04/2014 09:41:45
Quote Anchor link
Ivo P op 16/04/2014 09:34:11:
Het is ook handig om stagairs een goede manier van werken te leren.

Leerlingen lopen stage om in de werkelijkheid te kunnen kijken. Theorie is leuk, maar in de praktijk gaat het vaak anders.
Veel docenten zijn geen expert op elk vakgebied.Ze dragen een bepaalde manier van werken over op leerlingen, zodat ze vast kunnen beginnen.
Als tijdens de lessen alleen met variabelen met namen als $x en $y gewerkt wordt, is dat bijvoorbeeld geen reden om vars als $naam maar te vermijden.

Het kost je ongeveer 5 minuten bij een trage leerling om uit te leggen dat die vars gewoon in de query geplaatst kunnen worden.
Tevens zou het minder geheugen kunnen gebruiken, omdat de waarden niet opnieuw onthouden moeten worden (niet 100% waar trouwens).

Vroeger was dat een issue, omdat een programma in een max aantal kB geheugen moest passen.
Maar dat is geen reden om nu de volle 8GB van je server te vullen, "omdat het kan".

Los daarvan:
Je moet nu een heel eind naar boven zoeken of variabele $x gemaakt is met mysql_real_escape_string(), of dat dat vergeten is, of dat de var een heel andere afkomst had.

Daarnaast: $bodyBG is nu alleen bruikbaar om in een query in te zetten.
Zou je hem naar het scherm willen sturen, dan is deze vervuild door mysql_real_escape_string. Immers, voor output naar het scherm heb je htmlspecialchars() nodig




Toevoeging op 16/04/2014 09:37:35:

Qua overzichtelijk:

Dat is nog maar de vraag. Ik vind het niet niet overzichtelijk dat eerst een heel blok vars aangemaakt wordt.
Zou er 1 bijkomen, die ook naar de update query moet , dan moet je die op 2 plekken toevoegen.

En jij schrijft je query uit op 1 regel, maar
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$update
= "UPDATE tabel
              SET kolom1 = '123',
                  kolom2 = 'ABC',
                  kolom3 = '"
.mysql_real_escape_string($_POST['x'], $conn) ."',
                  kolom4 = '"
.mysql_real_escape_string($_POST['y'], $conn)."'
           WHERE id = '999'"
;
?>


mag ook, en is nog leesbaar ook....


Bedankt voor de uitleg, ik zal je manier binnenkort is uitvoeren op 1 van me codes en laat hem daarna hier zien.



Toevoeging op 16/04/2014 10:05:19:

Zou het nog korter of beter kunnen of is dit de juiste manier?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
if(isset($_POST['submit']))
{

    
    $update1 = "UPDATE style
                    SET bodyBG = '"
. mysql_real_escape_string($_POST['bodyBG']) . "',
                        headerBG = '"
. mysql_real_escape_string($_POST['headerBG']) . "',
                        subBalkBG = '"
. mysql_real_escape_string($_POST['subBalkBG']) . "',
                        subBalkText = '"
. mysql_real_escape_string($_POST['subBalkText']) . "',
                        menuBG = '"
. mysql_real_escape_string($_POST['menuBG']) . "',
                        menuText = '"
. mysql_real_escape_string($_POST['menuText']) . "',
                        menuHover = '"
. mysql_real_escape_string($_POST['menuHover']) . "',
                        menuDropHover = '"
. mysql_real_escape_string($_POST['menuDropHover']) . "',
                        lettertype = '"
. mysql_real_escape_string($_POST['lettertype']) . "'
                    WHERE id = 1"
;
                    
    $update2 = "UPDATE tablestyle
                    SET tableHeaderBG = '"
. mysql_real_escape_string($_POST['tableHeaderBG']) . "',
                        tableHeaderText = '"
. mysql_real_escape_string($_POST['tableHeaderText']) . "',
                        tableContentText = '"
. mysql_real_escape_string($_POST['tableContentText']) . "',
                        tableRowOneBG = '"
. mysql_real_escape_string($_POST['tableRowOneBG']) . "',
                        tableRowTwoBG = '"
. mysql_real_escape_string($_POST['tableRowTwoBG']) . "',
                        tableRowHoverBG = '"
. mysql_real_escape_string($_POST['tableRowHoverBG']) . "'
                    WHERE id = 1"
;
    
    $queryEdit1 = mysql_query($update1);
    $queryEdit2 = mysql_query($update2);
        
    if ($queryEdit1 && $queryEdit2)
    {

        $queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het thema van de website aangepast', '$date')");

        if($queryLogboek)
        {

            $melding = 'Het thema is aangepast!';
        }
    }

    else
    {
        $melding =     'Er is iets fout gegaan. Herlaad de website en probeer het opnieuw!';
    }
}


    $querySelect = mysql_query("SELECT * FROM style, tablestyle WHERE style.id = tablestyle.id AND style.id = 1");
    $queryFetch = mysql_fetch_array($querySelect);
?>
Gewijzigd op 16/04/2014 10:06:09 door racoon smasher
 
- SanThe -

- SanThe -

16/04/2014 10:10:39
Quote Anchor link
Om de datum en tijd van dit moment in de database te zetten gebruik je NOW().
 
Racoon smasher

racoon smasher

16/04/2014 10:17:31
Quote Anchor link
- SanThe - op 16/04/2014 10:10:39:
Om de datum en tijd van dit moment in de database te zetten gebruik je NOW().


Bedankt voor de tip, heb hem ingevoerd :)

Afbeelding
 
Ivo P

Ivo P

16/04/2014 10:18:56
Quote Anchor link
zo te zien heb je

a) NOW() tussen '' gezet. Dat moet niet: NOW() is een SQL-functie.
(dat had je zelf kennelijk al door)

b) de datum opgeslagen in een kolom van het type varchar en niet in een DATE of DATETIME
Gewijzigd op 16/04/2014 10:20:17 door Ivo P
 
Racoon smasher

racoon smasher

16/04/2014 10:22:07
Quote Anchor link
Ivo P op 16/04/2014 10:18:56:
zo te zien heb je

a) NOW() tussen '' gezet. Dat moet niet: NOW() is een SQL-functie.
(dat had je zelf kennelijk al door)

b) de datum opgeslagen in een kolom van het type varchar en niet in een DATE of DATETIME


Ja dat tussen '' weet ik, maar wat vergeten die weg te halen x]
en maakt het uit dan of die in varchar of date staat dan?
 
- SanThe -

- SanThe -

16/04/2014 10:25:45
Quote Anchor link
Ja, een VARCHAR is voor tekst en DATE en DATETIME zijn voor datums en tijden.
 
Racoon smasher

racoon smasher

16/04/2014 10:26:56
Quote Anchor link
- SanThe - op 16/04/2014 10:25:45:
Ja, een VARCHAR is voor tekst en DATE en DATETIME zijn voor datums en tijden.


Ja dat weet ik, maar in principe maakt het niet echt uit, maar heb het al aangepast is altijd beter.
 
- SanThe -

- SanThe -

16/04/2014 10:27:27
Quote Anchor link
En er zijn diverse functions voor datums en tijden die niet werken bij een VARCHAR veld.
 
Racoon smasher

racoon smasher

16/04/2014 10:28:05
Quote Anchor link
- SanThe - op 16/04/2014 10:27:27:
En er zijn diverse functions voor datums en tijden die niet werken bij een VARCHAR veld.


ow oke dat wist ik nog niet, ty
 
Ivo P

Ivo P

16/04/2014 10:31:45
Quote Anchor link
Bijvoorbeeld DATE_FORMAT() om het formaat aan te passen,

YEAR() om alleen het jaartal te gebruiken:

... WHERE YEAR(datumkolom) = 2013

om alles van vorig jaar te selecteren

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

En als zo'n functie dan al werkt op een varchar(): het zal allicht beter werken zonder de conversie string>date vooraf te moeten doen.
En je voorkomt dat er ineens "16 april 2014" staat waar het 2014-04-16 moet zijn
 
Racoon smasher

racoon smasher

16/04/2014 11:51:45
Quote Anchor link
Ivo nog bedankt voor de informatie :P

Even nog een vraag aan iedereen hier:
Vinden jullie dat als je meer op forums bezig bent dat je dan veel sneller PHP leert? want dat gevoel heb ik nu wel namelijk.

Buiten dit ga ik nog beginnen met Treehouse (academy voor programmeer taal) om me skills te verbeteren.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.