PHP vraagje

Gestart doorViezelolly19 reacties140 weergaven

20 berichten · pagina 1 van 2

Viezelolly

Lid · Topicstarter

Berichten
294
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Goedenmorgen,

Ik moet een website maken, nu heb ik de data vanuit een MySql database verkregen en deze als array opgeslagen ($array).

Dit is de PHP code welke ik gebruik om de data uit de database te halen en deze data op te slaan als array.

Dit is het resultaat nu:
Afbeelding

Dit is wat ik wil:
Afbeelding

Dit is de code die ik gebruik:
Spoiler tonen
Codeblok (voorbeeld.php):
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

for($i=1; $i < 12; $i++) {
$sql = SELECT * FROM menu WHERE id= . $i;
$results = $db->query($sql);
$array = array();
foreach($results as $row) {
$array = array( //lat, longitude, postcode, stad, telefoon,
0 => $row[id],
1 => $row[knopNaam],
2 => $row[knopHref],
3 => $row[extern]
);

$case = $array[3];

switch($case) {
case 0:
echo
  • . $array[1] .
  • ;
    break;
    case 2:
    echo
  • . $array[1] .
  • ;
    break;
    case 4:
    echo
  • . $array[1] .
  • ;
    break;
    case 5:
    echo
  • . $array[1] .
  • ;
    break;
    }
    }
    }

    Simpelweg wil ik de lis Boekenlijst tot en met Rooster in een ul met als class sub.

    Ik hoop dat jullie mij zouden kunnen helpen, zou echt heel fijn zijn! smile
    Alvast bedankt!

    toevoeging op 24 september 2015, 09:53:30:
    Afbeeldingen gefixt! clown
    0
    Berichten
    518
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Ik zie een paar fouten in bovenstaande code. Allereerst is moeten integers niet in een string of char. [c]10[/c] zou dus gewoon [c]10[/c] moeten zijn. Verder is het ook overbodig om $row om te zetten in een nieuwe array $array. Als je toch met indexen wilt werkenm dan moet je [c]FETCH_NUM[/c] gebruiken.

    Verder is het onveilig om de ->query functie te gebruiken. PDO is zo gemaakt dat je de [c]prepare[/c] en [c]execute[/c] functies kan gebruiken, die wel veilig zijn. Eventuele parameters ($i) kan je binden via de [c]bind[/c] functie.

    Ook nogal raar om een for loop te gebruiken voor je menu. Nu moeten er 12 queries uitgevoerd worden. En wat als je nu meer paginas toevoegd?
    Je kan de WHERE uit je query halen, dan krijg je een array met alle menu-items in. Je kan deze bekijken dmv de functie [c]var_dump[/c]

    In de switch zie ik dat case 0 en 4 hetzelfde resultaat hebben. Je kan dit ook eenmalig doen dmv deze code

    [COLOR= #0000BB]<?php[/COLOR]
    [URL="http://www.php.net/switch"]switch[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]4[/COLOR][COLOR= #007700]) {
    case[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700]:
    case[/COLOR] [COLOR= #0000BB]4[/COLOR][COLOR= #007700]:[/COLOR]
        [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Deze switch is 0 of 4[/COLOR][COLOR= #007700];[/COLOR]
        [URL="http://www.php.net/break"]break[/URL][COLOR= #007700];
    }[/COLOR]


    Om je vraag toch te beantwoorden...
    Je moet je database structuur aanpassen zodat die weet wat een hoofd en wat een submenu is. Je kan een aparte tabel aanmaken voor de hoofd- en submenus, of nog beter; je kan een column [c]parent[/c] toevoegen die 0 is bij een hoofdmenu, en indien het een submenu is kan je er het id van het hoofdmenu opslaan waartoe het submenu behoort.
    Je kan per menuitem nog een aparte query doen om te kijken of deze submenus heeft. Of nog beter: SQL Joins gebruiken, maar dan moet je toch al wel wat SQL kunnen.
    0
    Berichten
    14.025
    Reputatie
    1
    Punten
    0,01
    Lid sinds
    Laatst gezien
    @hierboven ->query() is niet onveilig maar op de manier hoe hij het gebruikt wel.
    0
    Viezelolly

    Lid · Topicstarter

    Berichten
    294
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Kitnkiller schreef:
    Ik zie een paar fouten in bovenstaande code. Allereerst is moeten integers niet in een string of char. [c]10[/c] zou dus gewoon [c]10[/c] moeten zijn. Verder is het ook overbodig om $row om te zetten in een nieuwe array $array. Als je toch met indexen wilt werkenm dan moet je [c]FETCH_NUM[/c] gebruiken.

    Verder is het onveilig om de ->query functie te gebruiken. PDO is zo gemaakt dat je de [c]prepare[/c] en [c]execute[/c] functies kan gebruiken, die wel veilig zijn. Eventuele parameters ($i) kan je binden via de [c]bind[/c] functie.

    Ook nogal raar om een for loop te gebruiken voor je menu. Nu moeten er 12 queries uitgevoerd worden. En wat als je nu meer paginas toevoegd?
    Je kan de WHERE uit je query halen, dan krijg je een array met alle menu-items in. Je kan deze bekijken dmv de functie [c]var_dump[/c]

    In de switch zie ik dat case 0 en 4 hetzelfde resultaat hebben. Je kan dit ook eenmalig doen dmv deze code

    [COLOR= #0000BB]<?php[/COLOR]
    [URL="http://www.php.net/switch"]switch[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]4[/COLOR][COLOR= #007700]) {
    case[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700]:
    case[/COLOR] [COLOR= #0000BB]4[/COLOR][COLOR= #007700]:[/COLOR]
        [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Deze switch is 0 of 4[/COLOR][COLOR= #007700];[/COLOR]
        [URL="http://www.php.net/break"]break[/URL][COLOR= #007700];
    }[/COLOR]
    Om je vraag toch te beantwoorden...
    Je moet je database structuur aanpassen zodat die weet wat een hoofd en wat een submenu is. Je kan een aparte tabel aanmaken voor de hoofd- en submenus, of nog beter; je kan een column [c]parent[/c] toevoegen die 0 is bij een hoofdmenu, en indien het een submenu is kan je er het id van het hoofdmenu opslaan waartoe het submenu behoort.
    Je kan per menuitem nog een aparte query doen om te kijken of deze submenus heeft. Of nog beter: SQL Joins gebruiken, maar dan moet je toch al wel wat SQL kunnen.

    Dankjewel! Hier kan ik zeker iets mee!
    Dylan schreef:
    @hierboven ->query() is niet onveilig maar op de manier hoe hij het gebruikt wel.
    Hoe zou ik het veilig kunnen maken? smile
    0
    Berichten
    14.025
    Reputatie
    1
    Punten
    0,01
    Lid sinds
    Laatst gezien
    prepare
    0
    Berichten
    518
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Viezelolly schreef:
    Hoe zou ik het veilig kunnen maken? smile
    Kitnkiller schreef:
    Verder is het onveilig om de ->query functie te gebruiken. PDO is zo gemaakt dat je de [c]prepare[/c] en [c]execute[/c] functies kan gebruiken, die wel veilig zijn. Eventuele parameters ($i) kan je binden via de [c]bind[/c] functie.
    Hier een voorbeeldje

    [COLOR= #0000BB]<?php
            $query_sql[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]SELECT * FROM menu WHERE parent = 0[/COLOR][COLOR= #007700];[/COLOR]
            [COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db[/COLOR][COLOR= #007700]->[/COLOR]prepare[COLOR= #007700]([/COLOR][COLOR= #0000BB]$query_sql[/COLOR][COLOR= #007700]);[/COLOR]
            [COLOR= #0000BB]$menu[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700]->[/COLOR]fetchAll[COLOR= #007700]([/COLOR]PDO[COLOR= #007700]:[/COLOR][COLOR= #007700]:[/COLOR]FETCH_NUM[COLOR= #007700]);[/COLOR]
            [URL="http://www.php.net/var_dump"]var_dump[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$menu[/COLOR][COLOR= #007700]);[/COLOR]
    ?>


    $menu zal zo een array bevatten met alle menu items in. Elk menu item is een array met alle info uit de menu tabel, die je kan oproepen dmv het index nummer.

    [c]$menu[0][1][/c] zal de naam van van het 1e menuitem bevatten.
    [c]$menu[2][0][/c] zal het id van van het 2e menuitem bevatten.

    Je kan dus een foreach loop over $menu doen voor alle menuitems. Hier vind je wat meer info over PDO.
    0
    Berichten
    14.025
    Reputatie
    1
    Punten
    0,01
    Lid sinds
    Laatst gezien
    Kitnkiller schreef:
    Eerdere citaten tonen
    Viezelolly schreef:
    Hoe zou ik het veilig kunnen maken? smile
    Eerdere citaten tonen
    Kitnkiller schreef:
    Verder is het onveilig om de ->query functie te gebruiken. PDO is zo gemaakt dat je de [c]prepare[/c] en [c]execute[/c] functies kan gebruiken, die wel veilig zijn. Eventuele parameters ($i) kan je binden via de [c]bind[/c] functie.
    Hier een voorbeeldje

    [COLOR= #0000BB]<?php
            $query_sql[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]SELECT * FROM menu WHERE parent = 0[/COLOR][COLOR= #007700];[/COLOR]
            [COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db[/COLOR][COLOR= #007700]->[/COLOR]prepare[COLOR= #007700]([/COLOR][COLOR= #0000BB]$query_sql[/COLOR][COLOR= #007700]);[/COLOR]
            [COLOR= #0000BB]$menu[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700]->[/COLOR]fetchAll[COLOR= #007700]([/COLOR]PDO[COLOR= #007700]:[/COLOR][COLOR= #007700]:[/COLOR]FETCH_NUM[COLOR= #007700]);[/COLOR]
            [URL="http://www.php.net/var_dump"]var_dump[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$menu[/COLOR][COLOR= #007700]);[/COLOR]
    ?>


    $menu zal zo een array bevatten met alle menu items in. Elk menu item is een array met alle info uit de menu tabel, die je kan oproepen dmv het index nummer.

    [c]$menu[0][1][/c] zal de naam van van het 1e menuitem bevatten.
    [c]$menu[2][0][/c] zal het id van van het 2e menuitem bevatten.

    Je kan dus een foreach loop over $menu doen voor alle menuitems. Hier vind je wat meer info over PDO.
    In dat geval waarom niet gewoon query?
    0
    Berichten
    518
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Dylan schreef:
    Eerdere citaten tonen
    Kitnkiller schreef:
    Eerdere citaten tonen
    Viezelolly schreef:
    Hoe zou ik het veilig kunnen maken? smile
    Eerdere citaten tonen
    Kitnkiller schreef:
    Verder is het onveilig om de ->query functie te gebruiken. PDO is zo gemaakt dat je de [c]prepare[/c] en [c]execute[/c] functies kan gebruiken, die wel veilig zijn. Eventuele parameters ($i) kan je binden via de [c]bind[/c] functie.
    Hier een voorbeeldje

    [COLOR= #0000BB]<?php
            $query_sql[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]SELECT * FROM menu WHERE parent = 0[/COLOR][COLOR= #007700];[/COLOR]
            [COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$db[/COLOR][COLOR= #007700]->[/COLOR]prepare[COLOR= #007700]([/COLOR][COLOR= #0000BB]$query_sql[/COLOR][COLOR= #007700]);[/COLOR]
            [COLOR= #0000BB]$menu[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700]->[/COLOR]fetchAll[COLOR= #007700]([/COLOR]PDO[COLOR= #007700]:[/COLOR][COLOR= #007700]:[/COLOR]FETCH_NUM[COLOR= #007700]);[/COLOR]
            [URL="http://www.php.net/var_dump"]var_dump[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$menu[/COLOR][COLOR= #007700]);[/COLOR]
    ?>


    $menu zal zo een array bevatten met alle menu items in. Elk menu item is een array met alle info uit de menu tabel, die je kan oproepen dmv het index nummer.

    [c]$menu[0][1][/c] zal de naam van van het 1e menuitem bevatten.
    [c]$menu[2][0][/c] zal het id van van het 2e menuitem bevatten.

    Je kan dus een foreach loop over $menu doen voor alle menuitems. Hier vind je wat meer info over PDO.
    In dat geval waarom niet gewoon query?
    Je kunt er beter een gewoonte van maken om altijd prepare te gebruijken. Dit is netter en zo vergeet je zeker nooit prepare te gebruiken als het echt nodig is.
    0
    Berichten
    14.025
    Reputatie
    1
    Punten
    0,01
    Lid sinds
    Laatst gezien
    Je weet wat prepare doet?

    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query
    0
    Berichten
    518
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Dylan schreef:
    Je weet wat prepare doet?
    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query

    Ja, [c]prepare[/c] maakt een prepared statement aan waaraan je parameters kan binden zonder die te escapen. [c]Execute[/c] zal ook beter presteren als een query meerdere keren uitgevoerd wordt.
    0
    Berichten
    14.025
    Reputatie
    1
    Punten
    0,01
    Lid sinds
    Laatst gezien
    Kitnkiller schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Je weet wat prepare doet?
    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query

    Ja, [c]prepare[/c] maakt een prepared statement aan waaraan je parameters kan binden zonder die te escapen. [c]Execute[/c] zal ook beter presteren als een query meerdere keren uitgevoerd wordt.
    Ja waarom zou je dan als er geen parameters zijn prepare doen?
    0
    Berichten
    5.957
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Dylan schreef:
    Eerdere citaten tonen
    Kitnkiller schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Je weet wat prepare doet?
    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query

    Ja, [c]prepare[/c] maakt een prepared statement aan waaraan je parameters kan binden zonder die te escapen. [c]Execute[/c] zal ook beter presteren als een query meerdere keren uitgevoerd wordt.
    Ja waarom zou je dan als er geen parameters zijn prepare doen?
    Waarom zou je query gebruiken?
    0
    Berichten
    14.025
    Reputatie
    1
    Punten
    0,01
    Lid sinds
    Laatst gezien
    Alemaalte schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Eerdere citaten tonen
    Kitnkiller schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Je weet wat prepare doet?
    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query

    Ja, [c]prepare[/c] maakt een prepared statement aan waaraan je parameters kan binden zonder die te escapen. [c]Execute[/c] zal ook beter presteren als een query meerdere keren uitgevoerd wordt.
    Ja waarom zou je dan als er geen parameters zijn prepare doen?
    Waarom zou je query gebruiken?
    SELECT * FROM users <- query
    SELECT * FROM users WHERE id = ? <- prepare
    0
    Viezelolly

    Lid · Topicstarter

    Berichten
    294
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Dylan schreef:
    Eerdere citaten tonen
    Alemaalte schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Eerdere citaten tonen
    Kitnkiller schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Je weet wat prepare doet?
    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query

    Ja, [c]prepare[/c] maakt een prepared statement aan waaraan je parameters kan binden zonder die te escapen. [c]Execute[/c] zal ook beter presteren als een query meerdere keren uitgevoerd wordt.
    Ja waarom zou je dan als er geen parameters zijn prepare doen?
    Waarom zou je query gebruiken?
    SELECT * FROM users <- query
    SELECT * FROM users WHERE id = ? <- prepare
    Inmiddels gebruik ik prepare met execute. Ook het menu is gefixt, heb het gewoon door middel van CSS wat gefinetuned. Bedankt allemaal! smile
    0
    Berichten
    518
    Reputatie
    0
    Punten
    0,00
    Lid sinds
    Laatst gezien
    Dylan schreef:
    Eerdere citaten tonen
    Kitnkiller schreef:
    Eerdere citaten tonen
    Dylan schreef:
    Je weet wat prepare doet?
    toevoeging op 25 september 2015, 18:09:57:
    Ik gebruik prepare als de query userdata bevat, anders query

    Ja, [c]prepare[/c] maakt een prepared statement aan waaraan je parameters kan binden zonder die te escapen. [c]Execute[/c] zal ook beter presteren als een query meerdere keren uitgevoerd wordt.
    Ja waarom zou je dan als er geen parameters zijn prepare doen?
    Kitnkiller schreef:
    Je kunt er beter een gewoonte van maken om altijd prepare te gebruijken. Dit is netter en zo vergeet je zeker nooit prepare te gebruiken als het echt nodig is.
    0

    Jouw reactie

    Deel je idee, stel een vraag of help een ander verder.

    Editor laden…

    Praat mee met de One2xs-community.

    Inloggen om te reageren