Niet echt hulp, maar eerder een dank naar iedereen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arno van Zanten

Arno van Zanten

29/04/2023 13:22:34
Quote Anchor link
Ik wil Arien toch bedanken voor de "Cool Down", dit gaf mij toch de tijd om een probleem op te lossen.
Ik was bezig met een script om te filteren wat aan en uit stond, dat is uit eindelijk gelukt.
Ik zal hier onder posten hoe ik het opgelost heb.
Mede dank van een goede vriend, die mij op de goede weg heeft gebracht met een klein stukje code.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$services = array_values($dbase1a);
$checked = array_values($_POST['services']);
$diff = array_diff($services, $checked);

De rest liet hij mezelf helemaal uitzoeken. Dus ik moest ik alsnog zelf denken ;)
Uiteindelijk na veel proberen, testen en uitzoeken, heb ik het opgelost.
Wat heb ik gedaan? Nou laat ik het zo vertellen, dat er veel dagen en uren in hebben gezeten, na zijn oplossing, duurde het ongeveer 1 dag meer, maar dit is wat ik ervan gemaakt heb.
Ik post het hele script hier, mocht je het kunnen gebruiken of er iets van kunnen gebruiken, "Be my guest".
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
        // Reqiuered data (DON`T REMOVE THIS!!!) //
        $sql1        = 'SELECT * FROM Services';
        $result1    = mysqli_query($connect, $sql1);        
        $data1        = mysqli_fetch_all($result1, MYSQLI_ASSOC);
        
        $sql2        = 'SELECT * FROM UserServices WHERE User_ID = '.$_SESSION['ID'].'';
        $result2    = mysqli_query($connect, $sql2);
        $data2        = mysqli_fetch_all($result2, MYSQLI_ASSOC);
        
        $sql3        = 'SELECT * FROM Girls WHERE ID = '.$_SESSION['ID'].'';
        $result3    = mysqli_query($connect, $sql3);
        $data3        = mysqli_fetch_all($result3, MYSQLI_ASSOC);
        
        $dbase1        = array_column($data1 , 'ID' , 'Services');
        $dbase1a    = array_column($data1 , 'Services' , 'ID');
        $dbase2        = array_column($data2 , 'User_ID' , 'Services_ID');
        $dbase3        = array_column($data3 , 'Nickname' , 'ID');
        
        // Insert or Updating your services //
    if($_GET['menu'] == 'services' && $_GET['action'] == 'postservices') {
        if(isset($_POST['submit'])) {
            if(empty($_POST['services'])) {
                $query ='DELETE FROM UserServices WHERE User_ID = "'.$_SESSION['ID'].'"';
                $result = mysqli_query($connect, $query);
                echo "<div class='returnbox2'>All Services = Now set OFF!</div>";
                echo "<div class='returnbox3'><a href='index.php?menu=myservices'>Go back</a></div>";
            }

            
            // Put ON or OFF from the posted request //            
                $services = array_values($dbase1a);
                if(!empty($_POST['services'])) {
                    $checked = array_values($_POST['services']);
                    $diff = array_diff($services, $checked);
                echo "<div class='returnbox1'>Wich services you put ON</div><div class='box-grid-on'>";
                // Checked values to put ON //
                        foreach($services as $num => $name) {
                            foreach($checked as $checknum => $checkname) {
                                if($name == $checkname) {
                                    $query = 'SELECT * FROM Services WHERE Services = "'.$name.'"';
                                    $result = mysqli_query($connect, $query);
                                    while ($row = mysqli_fetch_object($result)) {
                                        $checking = $row->ID;
                                        $query1 = 'SELECT * FROM UserServices WHERE Services_ID ="'.$checking.'"';
                                        $result1 = mysqli_query($connect, $query1);
                                        $row1 = mysqli_num_rows($result1);
                                        
                                            $query2 = 'INSERT IGNORE INTO UserServices (User_ID, Services_ID) VALUES ('.$_SESSION['ID'].', '.$checking.')';
                                            $result2 = mysqli_query($connect, $query2);
                                            echo "<div class='box-item'>".$checkname." = ON</div>";
                                    }
                                }
                            }
                        }

                    echo "</div>";
                    echo "<div class='returnbox2'>Wich services you put OFF</div>";
                    echo "<div class='box-grid-off'>";
                // Unchecked values to put OFF //
                    foreach($services as $num => $name) {
                        foreach($diff as $diffnum => $diffname) {                    
                            if($name == $diffname) {
                                $query = 'SELECT * FROM Services WHERE Services = "'.$name.'"';
                                $result = mysqli_query($connect, $query);
                                while ($row = mysqli_fetch_object($result)) {
                                    $checking = $row->ID;
                                    $query1 = 'SELECT * FROM UserServices WHERE Services_ID ="'.$checking.'"';
                                    $result1 = mysqli_query($connect, $query1);
                                    $row1 = mysqli_num_rows($result1);
                                    if(!$row1 == 0) {
                                        $query2 ='DELETE IGNORE FROM UserServices WHERE Services_ID = "'.$checking.'" AND User_ID = "'.$_SESSION['ID'].'"';
                                        $result2 = mysqli_query($connect, $query2);
                                        echo "<div class='box-item'>".$diffname." = OFF</div>";
                                    }
else {
                                        echo "<div class='box-item'>".$diffname." = OFF</div>";
                                    }
                                }
                            }
                        }
                    }

                    echo "</div>";
                    echo "<div class='returnbox3'><a href='index.php?menu=myservices'>Go back</a></div>";
                }
        }
        
    }
else {
        // Form Services page, select what you want to put ON or OFF //
        echo "<form action='index.php?menu=services&action=postservices' method='POST'>
                <div class='services-grid'>"
;
        $test = 1;
        foreach($dbase1 as $Service => $User){
            if(isset($dbase3[$_SESSION['ID']])) {
                if(isset($dbase2[$test])){
                    echo "<div class='services-item'><input type='checkbox' name='services[]' id='".$User."' value='".$Service."' checked>".$Service."</div>";
                }
else{
                    echo "<div class='services-item'><input type='checkbox' name='services[]' id='".$User."' value='".$Service."'>".$Service."</div>";
                }
            }
else {
                echo "Session not found <br/>";
            }

            $test++;
        }

        $test = 0;
        echo "<div id='button-b'><a href='index.php?menu=myservices'>Return</a></div><div id='button-a'><input type='submit' name='submit' value='Save options'></div>";
        echo "</div></form>";
    }

?>
Gewijzigd op 29/04/2023 14:53:46 door Arno van Zanten
 
PHP hulp

PHP hulp

28/03/2024 10:20:31
 
Willem vp

Willem vp

29/04/2023 17:24:53
Quote Anchor link
Hier nog wat ongevraagd commentaaar. :-) Ik heb je vorige draadjes niet heel erg intensief gevolgd, dus het kan zijn dat ik dingen zeg die al door iemand anders zijn aangehaald.

Op regel 40 en 62 doe je een 'select * from Services'. Die gegevens heb je echter ook al in $data1 staan, dus je zou nog wat kunnen optimaliseren door de gegevens in $data1 te gebruiken in plaats van een (dure) database-query uit te voeren.

Iets soortgelijks zie ik ook op regel 44 en 66 bij de tabel UserServices, maar daar kun je niet zomaar $data2 gaan gebruiken, aangezien je ook insert/delete-statements op die UserServices uitvoert die niet gesynchroniseerd worden met $data2.

Over optimaliseren gesproken: $data2 en $data3 worden alleen gebruikt in het else-blok, dus het is eigenlijk een beetje zonde om die queries al uit te voeren vóór het if-statement.

Dat select-statement op regel 44 kan sowieso helemaaal weg, want je doet niets met de opgevraagde gegevens. Zo te zien aan de indentatie stond er nog een if-statement achter waarin je mogelijk wel iets met $row1 deed, maar met de huidige code geeft het alleen maar gehamer op de database.

Op regel 40 (en ook op andere plaatsen) doe je een "select *" terwijl je daarna alleen maar $row->ID of zo gebruikt. Ik zou dan "select ID" gebruiken om niet onnodig gegevens uit de database op te halen.

Een ander detail dat me opviel (en ik zie het overigens vaker, ook in professionele code) is dat je dubbele aanhalingstekens gebruikt bij SQL-strings. MySQL doet daar (helaas) niet zo moeilijk over, maar volgens de SQL-standaard mag je daarvoor alleen enkele aanhalingstekens gebruiken. Als je ooit eens een andere database-server moet gebruiken (of een MySQL die in een stricte ANSI-mode staat) dan gaat dat problemen geven, dus ik zou je aanraden het meteen goed aan te leren.
 
Arno van Zanten

Arno van Zanten

29/04/2023 19:30:37
Quote Anchor link
@Willem vp
Dank voor de tips.
Zal er rekening mee houden.
 
- Ariën  -
Beheerder

- Ariën -

29/04/2023 20:13:00
Quote Anchor link
Verder zorgt een query in een while/foreach loop voor een opeenstapeling van SQL-opdrachten, waardoor je applicatie op hun gegeven moment steeds trager zal worden.

Vermijd dit door JOINS te gebruiken. Queries moet je spaarzaam gebruiken.
 
Arno van Zanten

Arno van Zanten

29/04/2023 20:18:21
Quote Anchor link
@Arien,

Ik zal hier zeker zorg voor gaan dragen.
Eerst ben ik bezig met een 'RUWE' schets zeg maar, eerst bouwen en later verbeteren.
Ik weet, waarom niet meteen?
Kost tijd en de site moet klaar.
Als de site up en running is, ga ik meteen erna aan de slag om fouten eruit te halen en verbeteringen toe te passen.
Maar voor nu, even snel snel en daarna de scherpe kantjes eraf halen en tunen de handel.

Ik neem de punten zeker in mij op.

En Arien, je ziet maar weer he... Pitbull ;)
 
Ozzie PHP

Ozzie PHP

29/04/2023 20:39:33
Quote Anchor link
Quote:
Eerst ben ik bezig met een 'RUWE' schets zeg maar, eerst bouwen en later verbeteren.
Ik weet, waarom niet meteen?
Kost tijd en de site moet klaar.
Als de site up en running is, ga ik meteen erna aan de slag om fouten eruit te halen en verbeteringen toe te passen.

Dit horen we hier vaker. In de praktijk komt hier niks van terecht. Als het eenmaal 'werkt' ben je blij dat het werkt en ga je niks meer aanpassen. En als je toch iets wil gaan aanpassen, is er de nodige tijd verstreken en weet je niet meer waarom je bepaalde dingen gedaan hebt en ben je dingen vergeten.

Je moet het helemaal zelf weten, maar als tip zou ik je mee willen geven om het gelijk zo goed mogelijk te doen. Queries uitvoeren in een loop is bijv. niet wenselijk zoals Ariën al zei.

Als je kijkt naar jouw code-structuur met al die geneste foreach loops, while loops, if-statements, while-statements en geneste queries, dan weet je eigenlijk al dat de code een beetje 'stinkt'. Jij ziet dat niet, omdat je ervaring mist, maar de mensen hier die dit al veel langer doen zien dat wel.

Ik zou sowieso je code proberen op te delen in kleinere blokjes en je best doen om beter te documenteren. Ik kan je nu al vertellen dat als jij je code over 3 maanden terugkijkt, dat je geen duidelijk idee meer hebt van wat je precies hebt gedaan.

Ik weet nu al dat jouw antwoord gaat zijn "ja maar ... geen tijd ... moet snel klaar". Want dat is een terugkerend patroon dat ik bij jou heb ontdekt. Alles moet zo snel mogelijk af en je programmeert vanuit een soort paniekmodus. Ik zeg je nu al dat dat niet de beste, en voor jezelf zeker niet de meest prettige, werkwijze is. Want vroeg of laat ga je weer vastlopen. Mijn advies zou zijn om een versnelling terug te schakelen. En koop ook eens een Nederlands PHP-boek zoals ik je al eerder aanraadde. Dan krijg je wat meer basiskennis en inzicht. Programmeren is een vak. Je zult er dus tijd in moeten investeren. Ik kan ook vast wel een paar banden met stangen aan elkaar lassen, maar dat wil niet zeggen dat ik dan een fatsoenlijke auto heb gebouwd.
 
- Ariën  -
Beheerder

- Ariën -

29/04/2023 23:12:17
Quote Anchor link
Arno van Zanten op 29/04/2023 20:18:21:
Kost tijd en de site moet klaar.

Dan heb je een grote fout in je planning gemaakt: Een te strakke deadline zonder enige buffer.
En gezien je bewust was dat je kennis mist schiet je jezelf dus in je voet.

Met jouw opzet heb je per record die je hebt al extra queries die je draait. Per record en per bezoeker worden het er steeds meer. En wie weet is de grens opeens zo bereikt waarna je hosting gaat klagen, en je site (automatisch) offline gaat gooien, omdat je teveel capaciteit en resources van de databaseserver vraagt.

AUW!


Quote:
Als de site up en running is, ga ik meteen erna aan de slag om fouten eruit te halen en verbeteringen toe te passen.

Dus, dan kan je weer flink gaan slopen en breken in je code, waarbij al je werk ervoor dus voor niks was. Zonde!

Beste advies bij grote projecten: Maak losse testscripts, en test het in stukken uit.
Misschien een idee om functie-georienteerd te werken, of als je programmeren goed beheerst jezelf te verdiepen in classes, methods en objects.

Quote:
En Arien, je ziet maar weer he... Pitbull ;)

En je weet: Haastige spoed is zelden goed ;-)
Gewijzigd op 29/04/2023 23:16:48 door - Ariën -
 
Arno van Zanten

Arno van Zanten

30/04/2023 01:31:54
Quote Anchor link
- Ariën - op 29/04/2023 23:12:17:
Arno van Zanten op 29/04/2023 20:18:21:
Kost tijd en de site moet klaar.

Dan heb je een grote fout in je planning gemaakt: Een te strakke deadline zonder enige buffer.
En gezien je bewust was dat je kennis mist schiet je jezelf dus in je voet.

Met jouw opzet heb je per record die je hebt al extra queries die je draait. Per record en per bezoeker worden het er steeds meer. En wie weet is de grens opeens zo bereikt waarna je hosting gaat klagen, en je site (automatisch) offline gaat gooien, omdat je teveel capaciteit en resources van de databaseserver vraagt.

AUW!

Dit is niet voor de bezoeker, dit zijn user pages waar ze hun voorkeuren en instellingen kunnen doen.
De main page komt nog.
- Ariën - op 29/04/2023 23:12:17:

Quote:
Als de site up en running is, ga ik meteen erna aan de slag om fouten eruit te halen en verbeteringen toe te passen.

Dus, dan kan je weer flink gaan slopen en breken in je code, waarbij al je werk ervoor dus voor niks was. Zonde!

Nee, dan ga ik meteen beginnen aan een verse page, wel met bepaalde stukken uit de oude page.
Bepaalde forms etc...
- Ariën - op 29/04/2023 23:12:17:
Beste advies bij grote projecten: Maak losse testscripts, en test het in stukken uit.
Misschien een idee om functie-georienteerd te werken, of als je programmeren goed beheerst jezelf te verdiepen in classes, methods en objects.

Quote:
En Arien, je ziet maar weer he... Pitbull ;)

En je weet: Haastige spoed is zelden goed ;-)


En verder, ja ik weet...
maar ik leer steeds bij en ik moet zeggen dat ik tijdens het coderen, mijn eigen fouten zie en probeer die meteen op te lossen.
Ook is mijn css niet standaard en die moet ik ook hier en daar verbeteren.
Ook moet ik leren dat <form> voor een <div> element gaat en dat als je met <legend> werkt, dat je ook een <fieldset> nodig hebt.
Maar ik heb de vernieuwingen al in gedachte, qua layout, structuur en opties.
Maar eerst maak ik alles in mijn hoofd voor ik echt ga beginnen.
Meestal begin ik met een layout etc.

Maar ik moet toegeven, door al het het gepuzzel en testen en hulp van ook een goede vriend, die niet veel tijd heeft, dat ik al deels op de goede weg ben.
Ook door jullie tips en adviezen, ben ik heel wat verder.
Wat ik moet gaan leren is eerst hoe function werkt, want bepaalde dingen heb ik vaker nodig dan 1 keer.
Ook wil ik weten hoe je dat uit een mysql kunt halen zonder een loop, want dat ben ik nog aan het uitzoeken.
Ook op PHP.net kijk ik veel rond en soms snap ik bepaalde dingen wel en sommige dingen niet.
Maar door te testen en te proberen, kom ik al een stuk verder.

Dus daarom ben ik Arien wel dankbaar voor de cool down van 1 week, heeft mij wel aan het denken gezet.
Nu is het aan mij om ook daad werkelijk alles goed te leren programmeren en zoals die vriend van mij aangaf, ook de database goed te leren gebruiken.
En ja ik maak soms teveel misbruik van loops en queries, maar dat zijn tussen oplossingen en zeker kan dat beter.

Maar goed, om even al bij al te eindigen:
Jongens,
Heel erg fijn dat jullie ondanks alles mij tips, adviezen en raad geven.
Ik neem dit zeker mee voor nieuwe projecten, ik kan alleen niet elke keer een aanpassing gaan tonen enzo, ook dat stoort.

Toch ben ik heel erg blij met dit forum, want het is de bedoeling dat we elkaar helpen. Toch?
 
Ozzie PHP

Ozzie PHP

30/04/2023 04:11:13
Quote Anchor link
Met alle respect ...

>> Wat ik moet gaan leren is eerst hoe function werkt, want bepaalde dingen heb ik vaker nodig dan 1 keer.
>> Ook wil ik weten hoe je dat uit een mysql kunt halen zonder een loop, want dat ben ik nog aan het uitzoeken.
>> En ja ik maak soms teveel misbruik van loops en queries, maar dat zijn tussen oplossingen en zeker kan dat beter.

Ik bedoel het echt niet lullig, maar er ontbreekt nog een enorme bak kennis bij je. Zolang je dat niet van ons wil aannemen ... en nog veel belangrijker ... er iets mee gaat doen, heeft dit alles weinig zin.

We willen je best helpen, maar als je zelf niet de tijd hebt of moeite wil doen om EERST te gaan leren en over een paar weken terug te komen met specifieke vragen, heeft dit alles wat mij betreft weinig zin. Ja, we zitten hier om elkaar te helpen, maar dat komt dan wel van 2 kanten. Het betekent dat je zelf zult moeten investeren, en dat zie ik bij jou (nog) niet. Je probeert het allemaal goed te praten wat je doet, maar er is geen vooruitgang te bespeuren. En dat is ook niet vreemd, want je bent niet bereid om eens een boek te pakken en wat bij te leren. Je blijft aanklooien en dus kom je op deze manier geen stap verder. Geen leuke boodschap misschien, maar wel iets wat je onder ogen zult moeten zien en erkennen, als je tenminste van plan bent om verder te komen. Als dit een, al dan niet commercieel, hobbyproject is wat snel af moet en daarna ga je niks meer met PHP doen, is het ook prima uiteraard. Maar dan denk ik dat je beter af bent door iemand in te huren. Je bent nu een soort van taart aan het bakken, terwijl je niet weet welke ingrediënten erin moeten en hoe je die moet bereiden. Je roert een beetje in de beslagkom en je hoopt dat er iets uitkomt dat te eten is. Beter kun je naar de bakker gaan en een taart kopen, of je gaan verdiepen (door boeken te lezen en eerst ervaring op te doen door kleine baksels te maken) hoe je een taart maakt. Nu ben je gewoon een doorgedraaide kok die de keuken onveilig maakt.

Afbeelding
Gewijzigd op 30/04/2023 04:24:45 door Ozzie PHP
 
Willem vp

Willem vp

30/04/2023 11:33:09
Quote Anchor link
Ik krijg ineens een beeld van dit forum met Gordon Ramsay als moderator...
 
Ad Fundum

Ad Fundum

01/05/2023 07:50:45
Quote Anchor link
Mensen vertellen graag over wat hun bezig houdt.
Vooral wanneer anderen een leergierige en pro actieve houding laten zien.

Wat we niet moeten vergeten is de uitslag van deze poll:
https://www.phphulp.nl/php/poll/hoelang-programmeer-je-al/64

Er zit een gapend gat tussen een oude kliek en een paar nieuwelingen.
Laten we die uitdaging met mildheid en plezier overbruggen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
            __
           (  )
            ||
            ||
        ___|""|__.._
       /____________\
jrei   \____________/~~~.

ASCII art door Jens Reissenweber
(als alternatief voor het linken van plaatjes)
 
Ozzie PHP

Ozzie PHP

01/05/2023 12:42:55
Quote Anchor link
Heel veel mensen hier zijn bereid om anderen te helpen. Ook als ze nog maar net bezig zijn met programmeren. Echter, er wordt dan wel verwacht dat de 'hulpbehoevende' openstaat voor advies. Als er structureel, na vele herhalingen, niks wordt gedaan met dat advies, dan zorgt dat ervoor dat 'de oude kliek' minder zin heeft om de 'hulpbehoevende' nog langer te helpen.

Zoals je zelf al aangeeft wil je iemand die leergierig is en daadwerkelijk iets met je advies doet, graag helpen. Maar als dat keer op keer niet gebeurt, dan verdwijnt de animo om diegene nog langer te helpen. Zo werkt het althans bij mij. Ik wil graag mensen vooruit helpen, maar als ik tegen een muur sta te praten waar geen beweging in zit, dan houdt het op enig moment op.
 
- Ariën  -
Beheerder

- Ariën -

01/05/2023 12:48:19
Quote Anchor link
Om die reden heb ik in overleg met de crew Arno vorige week een weekje time-out gegeven.
Gewijzigd op 01/05/2023 12:48:52 door - Ariën -
 



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.