Profiel systeem
Goed, stel je hebt een inlog systeem waarbij je in de database de volgende gegevens in een tabel opslaat: id, gebruikersnaam en e-mail. Vervolgens wil je de gebruikers een mogelijkheid geven om een profiel te creëren met bepaalde vaste waardes zoals: leeftijd, land van herkomst, hobby's etc. En daarnaast een vrij vlak waarbij iets kort kunnen neerzetten.
Mijn gedachten waren om een nieuwe tabel aan te maken waarin die waardes kunnen worden opgeslagen. Alleen hoe zorg je ervoor dat de juiste persoon ook de juiste waardes kan aanpassen. Omdat er in die nieuwe tabel geen id zit. Of is het verstandig om geen profiel tabel aan te maken, en gewoon nieuwe kolommen te creëren in de bestaande tabel? Lijkt mij op te duur wat onoverzichtelijk worden.
Alvast bedankt!
Je kunt je nieuwe tabel bijvoorbeeld een kolom geven met de user_id.
Je hebt dus een tabel user:
user_id
gebruikersnaam
Tabel personalia:
personalia_id
user_user_id
leeftijd
hobby
land
In de kolom user_user_id vul je vervolgens het user_id in uit de tabel 'user'. Deze tabellen kun je ook nog aan elkaar koppelen in een later stadium.
Ik zou zelf aanraden alles in 1 tabel te doen, is makkelijker en overzichtelijker
@SanThe wel als je de wijzigingen wenst bij te houden.
De gegevens welke altijd aanwezig zijn moeten inderdaad in de hoofdtabel. Echter leeftijd is voor mij geen goed veld. Geboortedatum is veel beter anders moet je dagelijks/wekelijks de gegevens aanpassen elke keer als er iemand verjaard.
Jan
Jan R op 21/11/2014 08:07:40:
Ik zou hobby's zeker in een afzonderlijke tabel stellen. via een 1 op veel relatie. Iemand kan toch ook geen of net veel hobby's hebben.
De gegevens welke altijd aanwezig zijn moeten inderdaad in de hoofdtabel. Echter leeftijd is voor mij geen goed veld. Geboortedatum is veel beter anders moet je dagelijks/wekelijks de gegevens aanpassen elke keer als er iemand verjaard.
Jan
De gegevens welke altijd aanwezig zijn moeten inderdaad in de hoofdtabel. Echter leeftijd is voor mij geen goed veld. Geboortedatum is veel beter anders moet je dagelijks/wekelijks de gegevens aanpassen elke keer als er iemand verjaard.
Jan
Dat ligt er een beetje aan. Je kunt ook genoegen nemen met een textarea en kolomtype longtext. Dat biedt genoeg mogelijkheden om je hobby's te kunnen omschrijven. Wil de TS later nog nog gebruikers op hobby's kunnen filteren dan is het onvoldoende en zou er beter een aparte tabel voor aangemaakt kunnen worden zoals Jan beschrijft. In dat geval is het dan ook beter om een keuzelijst met hobby's aan de gebruiker voor te schotelen zodat er in de database telkens exact dezelfde waardes komen te staan voor mensen die dezelfde hobby hebben. Pas dan ben je later goed in staat om records te filteren
Alex Dijk op 20/11/2014 11:29:05:
Vervolgens wil je de gebruikers een mogelijkheid geven om een profiel te creëren met bepaalde vaste waardes zoals: leeftijd, land van herkomst, hobby's
Je hebt het over 'vaste waardes'.
Hobby's kunnen wijzigen en leeftijd wijzigt sowieso elk jaar ;-)
Gewoon de geboortedatum opslaan en je kunt uitrekenen hoe oud ze zijn.
Maar hoe zorg je er dan voor hoe je die twee tabellen met elkaar kunt koppelen?
En is dan het beste om die waardes te creëren bij registratie? Of pas als die gene zijn of haar profiel gaat invullen?
Peter K op 20/11/2014 12:51:07:
Alex,
Je kunt je nieuwe tabel bijvoorbeeld een kolom geven met de user_id.
Je hebt dus een tabel user:
user_id
gebruikersnaam
email
Tabel personalia:
personalia_id
user_user_id
leeftijd
hobby
land
In de kolom user_user_id vul je vervolgens het user_id in uit de tabel 'user'. Deze tabellen kun je ook nog aan elkaar koppelen in een later stadium.
Je kunt je nieuwe tabel bijvoorbeeld een kolom geven met de user_id.
Je hebt dus een tabel user:
user_id
gebruikersnaam
Tabel personalia:
personalia_id
user_user_id
leeftijd
hobby
land
In de kolom user_user_id vul je vervolgens het user_id in uit de tabel 'user'. Deze tabellen kun je ook nog aan elkaar koppelen in een later stadium.
Op de manier zoals peter zei kun je ze koppelen
Hieronder een klein voorbeeldje
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
id, users.name, users.email hobbies.hobby
FROM
users
JOIN
hobbies
ON
users.id = hobbies.user_id
WHERE
hobbies.hobby = 'programmeren';
id, users.name, users.email hobbies.hobby
FROM
users
JOIN
hobbies
ON
users.id = hobbies.user_id
WHERE
hobbies.hobby = 'programmeren';
of met aliasses
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
u.id, u.name, u.email, h.hobby
FROM
users u
JOIN
hobbies h
ON
u.id = h.user_id
WHERE
h.hobby = 'programmeren';
u.id, u.name, u.email, h.hobby
FROM
users u
JOIN
hobbies h
ON
u.id = h.user_id
WHERE
h.hobby = 'programmeren';
Bij de registratie heb je een minimum aan gegevens nodig. De rest kun je direct vragen bij registratie maar je kunt de gebruiker hier ook in een later stadium om vragen. (Datingsites zijn er goed in om je met enkel een username, wachtwoord en emailadres binnen te halen waarna ze alsnog het hemd van je lijf gaan vragen om zodoende de drempel voor registratie zo laag mogelijk te houden).
Gewijzigd op 22/11/2014 15:36:41 door Frank Nietbelangrijk
Groet!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include_once 'core/db_connect.php';
include_once 'core/functions.php';
sec_session_start();
$sqlCommand = "SELECT * FROM gebruikers WHERE gebruikersnaam='" . $_SESSION['gebruikersnaam'] . "'";
$query = mysqli_query($mysqli, $sqlCommand) or die (mysqli_error($mysqli));
While ($row =mysqli_fetch_array($query)) {
$pid = $row["id"];
$gebruikersnaam = $row["gebruikersnaam"];
}
mysqli_free_result($query);
?>
include_once 'core/db_connect.php';
include_once 'core/functions.php';
sec_session_start();
$sqlCommand = "SELECT * FROM gebruikers WHERE gebruikersnaam='" . $_SESSION['gebruikersnaam'] . "'";
$query = mysqli_query($mysqli, $sqlCommand) or die (mysqli_error($mysqli));
While ($row =mysqli_fetch_array($query)) {
$pid = $row["id"];
$gebruikersnaam = $row["gebruikersnaam"];
}
mysqli_free_result($query);
?>
Code (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
<form method="post">
<Table name="tabel" width="685"border="1">
<tr>
<td width"185">Leeftijd:</td>
<td width"605"> <input name="leeftijd" id="leeftijd" Size="3" maxlength="2"></td>
</tr>
<tr>
<td width"185">Land:</td>
<td width"605">
<select name="land" id="land">
<OPTION VALUE="Nederland">
Nederland
</OPTION>
<OPTION VALUE="Belgi">
België
</OPTION>
</select>
</td>
</tr>
<tr>
<td COLSPAN="2"><textarea name="beschrijving" id="beschrijving" cols="80" rows="20"></textarea></td>
</tr>
<tr>
<td COLSPAN="2"align="center"> <input type="Submit" name"="submit" id="submit" value="Verander"><input name="pid" type="hidden" id="pid" value="<?php print $pid; ?>"/><input name="gebruikersnaam" type="hidden" id="gebruikersnaam" value="<?php print $gebruikersnaam; ?>"/></td>
</tr>
</Table>
</form>
<?php
if(isset($_POST['verander'])) {
$pid = $_POST["pid"];
$gebruikersnaam = $_POST["gebruikersnaam"];
$leeftijd = $_POST["leeftijd"];
$land = $_POST["land"];
$beschrijving = $_POST["beschrijving"];
$query = mysqli_query($mysqli,"INSERT INTO profiel( 'gebruikersnaam', 'userid', 'leeftijd', 'land', 'beschrijving') VALUES ('$gebruikersnaam', '$pid','$leeftijd','$land','$beschrijving')")or die(mysqli_error($mysqli));
echo("gelukt");
exit();
}
?>
<Table name="tabel" width="685"border="1">
<tr>
<td width"185">Leeftijd:</td>
<td width"605"> <input name="leeftijd" id="leeftijd" Size="3" maxlength="2"></td>
</tr>
<tr>
<td width"185">Land:</td>
<td width"605">
<select name="land" id="land">
<OPTION VALUE="Nederland">
Nederland
</OPTION>
<OPTION VALUE="Belgi">
België
</OPTION>
</select>
</td>
</tr>
<tr>
<td COLSPAN="2"><textarea name="beschrijving" id="beschrijving" cols="80" rows="20"></textarea></td>
</tr>
<tr>
<td COLSPAN="2"align="center"> <input type="Submit" name"="submit" id="submit" value="Verander"><input name="pid" type="hidden" id="pid" value="<?php print $pid; ?>"/><input name="gebruikersnaam" type="hidden" id="gebruikersnaam" value="<?php print $gebruikersnaam; ?>"/></td>
</tr>
</Table>
</form>
<?php
if(isset($_POST['verander'])) {
$pid = $_POST["pid"];
$gebruikersnaam = $_POST["gebruikersnaam"];
$leeftijd = $_POST["leeftijd"];
$land = $_POST["land"];
$beschrijving = $_POST["beschrijving"];
$query = mysqli_query($mysqli,"INSERT INTO profiel( 'gebruikersnaam', 'userid', 'leeftijd', 'land', 'beschrijving') VALUES ('$gebruikersnaam', '$pid','$leeftijd','$land','$beschrijving')")or die(mysqli_error($mysqli));
echo("gelukt");
exit();
}
?>
Welke melding zie je?
Table zou gewoon met kleine letters kunnen of allemaal met hoofdletters. er mist een spatie tussen width="685" en border="1".
Maak een afspraak met jezelf alle html elementen in kleine letters of in hoofdletters. Kleine letters hebben mijn persoonlijke voorkeur. In iedergeval doe je het nu telkens weer anders en dat komt wel erg rommelig over.
Zo maak je een <select> met daarin <OPTIONS>
Hier mist een = teken. Bovendien hoort deze informatie allemaal in CSS te staan.
Hier mist wederom een spatie.
Dan je query:
kolomnamen mogen niet tussen single quotes staan. Alleen waardes wel.
Code (php)
1
2
3
4
2
3
4
INSERT INTO profiel
(gebruikersnaam, userid, leeftijd, land, beschrijving)
VALUES
('$gebruikersnaam', '$pid', '$leeftijd', '$land', '$beschrijving')
(gebruikersnaam, userid, leeftijd, land, beschrijving)
VALUES
('$gebruikersnaam', '$pid', '$leeftijd', '$land', '$beschrijving')
Daarnaast mis ik je foutafhandeling. Hoe had je nu kunnen weten dat je query mislukt?
Door te testen wat mysql_query() teruggeeft.
Gewijzigd op 27/11/2014 20:33:09 door Frank Nietbelangrijk
Ik krijg dus geen melding... dus ik weet ook niet waar ik naar moet kijken.
http://php.net/manual/en/mysqli.query.php en dan bij het kopje Return Values:
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
Zie Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
Gewijzigd op 27/11/2014 20:33:47 door Frank Nietbelangrijk
Regel 4: Ken ik niet.
Regel 6: Query is lek. Gebruik mysqli_real_escape_string().
Regel 8: Leuk, maar je doet er niks mee.
Tweede script:
Regel 32-36: Waarom al die nieuwe $vars aanmaken, nergens voor nodig.
Regel 39: Query is lek. Gebruik mysqli_real_escape_string().
echo ook eens je $query.
Frank Nietbelangrijk op 27/11/2014 21:08:51:
echo ook eens je $query.
Dan krijg je een result ID, waar je geen fluit mee kan.
Laten we het maar even op de string houden ;-).