Updaten van data in de database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johnny Test

Johnny Test

27/12/2014 15:01:53
Quote Anchor link
Ik ben een site aan het maken waar ik al een profielpagina heb voor aangemaakt. Hier kunnen leden hun informatie aanpassen, waarna ze op de knop "opslaan" moeten drukken. Deze knop brengt hun naar het volgende bestandje dat ik heb aangemaakt.
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
<?php
    session_start();
    ob_start();
?>


<?php
// Create connection
$con=mysqli_connect("localhost","root","","gameboek");


$gebruikersnaam = $_SESSION['gebruikersnaam'];
$leeftijd = mysqli_real_escape_string($con, $_POST['leeftijd']);
$stad = mysqli_real_escape_string($con, $_POST['stad']);
$favorietegamegenre = mysqli_real_escape_string($con, $_POST['favorietegamegenre']);
$favorietegame1 = mysqli_real_escape_string($con, $_POST['favorietegame1']);
$favorietegame2 = mysqli_real_escape_string($con, $_POST['favorietegame2']);
$favorietegame3 = mysqli_real_escape_string($con, $_POST['favorietegame3']);
$favorietegame4 = mysqli_real_escape_string($con, $_POST['favorietegame4']);
$email= mysqli_real_escape_string($con, $_POST['email']);
//$afbeelding = ?

 $result = mysqli_query($con,"SELECT * FROM gebruikers WHERE gebruikersnaam='" . $gebruikersnaam . "'");
 

mysqli_query($con, "UPDATE gebruikers SET stad = $stad WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET leeftijd = $leeftijd WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET favoriete_gamegenre = $favorietegamegenre WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET favoriete_game1 = $favorietegame1 WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET favoriete_game2 = $favorietegame2 WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET favoriete_game3 = $favorietegame3 WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET favoriete_game4 = $favorietegame4 WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
mysqli_query($con, "UPDATE gebruikers SET email = $email WHERE gebruikersnaam = '" . $gebruikersnaam . "'");

echo $leeftijd ;
echo $gebruikersnaam;
echo $stad;
echo $favorietegamegenre;
echo $favorietegame1;
echo $favorietegame2 ;
echo $favorietegame3 ;
echo $favorietegame4;


$_SESSION['leeftijd'] = $leeftijd;
$_SESSION['stad'] = $stad;
$_SESSION['email'] = $email;
$_SESSION['favoriete_gamegenre'] = $favorietegamegenre;
$_SESSION['favoriete_game1'] = $favorietegame1;
$_SESSION['favoriete_game2'] = $favorietegame2;
$_SESSION['favoriete_game3'] = $favorietegame3;
$_SESSION['favoriete_game4'] = $favorietegame4;


}

?>




Het probleem is dat het enkel lukt om cijfers up te daten. Wanneer ik bijvoorbeeld in het invoervakje "stad" "Brussel" invul, gebeurt er niets met de database. Maar wanneer ik "18" invul in het invoervakje, update stad in de database naar "18".
Eerst dacht ik dat dit aan de datatypes in mijn database lag, maar al mijn kolommen zijn varchars, enkel leeftijd is een int
Gewijzigd op 27/12/2014 15:03:48 door Johnny Test
 
PHP hulp

PHP hulp

29/04/2024 16:38:08
 
Eddy E

Eddy E

27/12/2014 15:11:11
Quote Anchor link
De oplossing is simpel:

Maak van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysqli_query($con, "UPDATE gebruikers SET favoriete_game4 = $favorietegame4 WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
?>


Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysqli_query($con, "UPDATE gebruikers SET favoriete_game4 = '$favorietegame4' WHERE gebruikersnaam = '" . $gebruikersnaam . "'");
?>


Verschil zit hem in de ' om $variabele heen.
Als die missen, mislukt je query, behalve bij cijfers. Want daarbij hoeven geen enkele haakjes (al is het een goede gewoonte dit wel te doen).
En dit geldt dan ook voor alle andere regels!
Gewijzigd op 27/12/2014 15:11:25 door Eddy E
 
Ivo P

Ivo P

27/12/2014 15:27:26
Quote Anchor link
Daarnaast mag je natuurlijk ook meerdere kolommen in 1 query aanpassen (met een komma):

UPDATE tabel
SET stad = 'brussel', email='[email protected]'
WHERE gebruikersnaam = 'jansen'


Opmerking:
Leefijd: beter sla je een geboortedatum op, dan is je data morgen ook nog actueel.

favoriete_game1, favoriete_game2, .....
wat nu als er een 5e bijkomt? Genummerde kolomnamen zijn een sterke aanwijzing dat je iets niet goed doet.
Beter maak je een apart lijstje met favo-games die gekoppeld zijn aan de gebruikers:


favogames
game varchar
gebruikersnaam varchar
volgorde int (dat zijn die 1 tm 4)

je ziet dan dat je ook 1 of 4 of 10 games kunt opgeven. (ook al zegt je opdrachtgever nu dat het er 4 zijn en altijd 4 blijven: het is altijd een heel dringende situatie als jij er dan op aangesproken wordt dat er een reclamecampagne start morgen en blijkt dat een top-10 niet opgeslagen kan worden.

"verandert nooit" moet je altijd begrijpen als "vooralsnog denk ik dat het zo blijft, maar het kan ieder moment alsnog veranderen"
 
Johnny Test

Johnny Test

27/12/2014 15:41:56
Quote Anchor link
Bedankt Eddy!

En ik weet dat ik meerdere kolommen in 1 query kan aanpassen Ivo. Maar ik had ze even uit elkaar gezet zodat het duidelijker was om er een fout in te vinden :)

Er kan geen 5de favoriete game bijkomen omdat er maar 4 invoervakjes voorzien zijn. Dit is uiteindelijk ook maar een klein deel van mijn project. Het kon even goed 1 favoriete game zijn. Ik probeer hier zo weinig mogelijk tijd in te steken zodat ik genoeg tijd heb om de belangrijke delen uit te voeren ;)
 
Ivo P

Ivo P

27/12/2014 16:53:41
Quote Anchor link
Quote:
Er kan geen 5de favoriete game bijkomen omdat er maar 4 invoervakjes voorzien zijn


tja, en er kan geen 5e invoervakje bijkomen, omdat...?

Maar goed, dat is dan iets om voor je volgende project in het actherhoofd te houden.

http://www.yapf.net/index.php/Database_ontwerp_101
 
Johnny Test

Johnny Test

27/12/2014 17:22:54
Quote Anchor link
Ivo P op 27/12/2014 16:53:41:
Quote:
Er kan geen 5de favoriete game bijkomen omdat er maar 4 invoervakjes voorzien zijn


tja, en er kan geen 5e invoervakje bijkomen, omdat...?

Maar goed, dat is dan iets om voor je volgende project in het actherhoofd te houden.

http://www.yapf.net/index.php/Database_ontwerp_101


Omdat dat niet de bedoeling is :) de meeste gamers hebben 1 favoriete game zoals je meestal 1 favoriete kleur hebt. 4 vakjes zal dan wel genoeg zijn denk ik.
 
- Ariën  -
Beheerder

- Ariën -

27/12/2014 17:57:33
Quote Anchor link
Het kan nooit kwaad om je applicatie alvast op de toekomst voor te bereiden ;-)
 
Ivo P

Ivo P

27/12/2014 18:10:52
Quote Anchor link
zelfs voor 'geslacht' heb je tegenwoordig bij facebook (of was het google+ ?) al meer dan 4 opties.

'X lijkt mij wel genoeg' mag nooit de doorslag geven
 
Johnny Test

Johnny Test

30/12/2014 16:19:09
Quote Anchor link
Mijn site gaat nu eenmaal niet over de soorten keuzes van geslacht, games, etc. die je kan kiezen. Voor geslacht heb je maar 2 opties nodig, waarom zou je dan de moeite doen om nog meer keuzes aan te maken? Dit zou ik enkel moeten doen voor bijvoorbeeld een datingsite. Zo'n kleine deeltjes van mijn site moet ik zo weinig mogelijk aandacht geven zodat ik meer tijd heb voor het onderwerp van mijn site en dus de echte functie ervan :)
Gewijzigd op 30/12/2014 16:20:29 door Johnny Test
 
Ivo P

Ivo P

30/12/2014 16:31:28
Quote Anchor link
je mist mijn punt denk ik.

Ik bedoel te zeggen, dat wat nu misschien in jouw ogen voor de handliggende feiten zijn, in de toekomst helemaal niet zo logisch meer blijkt.

Ik gaf het geslacht als voorbeeld omdat iedereen daar 2 roept, of misschien 3 als je de optie 'onbekend/zeg ik niet' mogelijk wilt maken.

Dat als tegenhanger van jouw "4", omdat 1 of 2 jou wel genoeg leek en 4 daarmee al direct een flinke marge gaf.

Maar straks komen er gebruikers van jouw site met de vraag, of ze niet een top-10 mogen invoeren.
Met deze opzet rest jou dan niets anders dan nog 6 kolommen toe te voegen en alle query's aan te passen.

Terwijl een opzet die genormaliseerd is, je zou kunnen volstaan met ergens het getalletje 4 naar 10 te verhogen waardoor er direct 10 invoervakjes zouden verschijnen en de rest vanzelf zou lopen.


Ik zie nu in je script vooral dingen over games staan, dus ik neem aan dat games ook inderdaad het onderwerp vormen van jouw site?
 
Johnny Test

Johnny Test

09/01/2015 11:46:53
Quote Anchor link
U begrijpt duidelijk mijn project niet helemaal, er is hier dan ook helemaal geen nood aan omdat de site enkel voor mijn gebruik is.
 
- Ariën  -
Beheerder

- Ariën -

09/01/2015 12:06:30
Quote Anchor link
Dan kan het alsnog geen kwaad om je voor te bereiden op de toekomst. Wie weet ga je de boel nog wel eens uitbreiden met meer keuzes, of andere mogelijkheden, zoals bijv. films.

Het is jouw keuze verder, plus dat het een mooi leermoment is voor de toekomst.
 



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.