Je eigen boek terug vinden - Vraagje
Ik heb een website, http://kennemercollegeboeken.hostzi.com/ . Nu wil ik dat je ipv dat je inlogt en op de Add book pagina (Hier kan je een boek toevoegen die wordt opgeslagen in een database en op een andere pagina wordt opgehaald), dat je je naam, achternaam en klas daar niet hoeft in te vullen, maar alleen bij regristratie. Ook wil ik een pagina maken waar leden kunnen zien welke boeken zij hebben toegevoegd.
Hoe het er nu uitziet: (ondanks dat op de pagina anders staat vermeld)
Regristratie:
-Gebruikersnaam
-Wachtwoord
Login:
-Gebruikersnaam
-Wachtwoord
Boek toevoegen:
-Naam
-Achternaam
-Klas
-Titel
-Schrijver
Hoe ik het graag zie:
Regristratie:
-Naam
-Achternaam
-Klas
-Gebruikersnaam
-Wachtwoord
Login:
-Gebruikersnaam
-Wachtwoord
Add Book:
-Titel
-Schrijver
Je moet meerdere boeken kunnen toevoegen, wat dus ook op de beheerderspagina zichtbaar moet zijn. En je moet op een pagina kunnen zien welke boeken je hebt toegevoegd.
Heeft iemand een linkje, of linkjes waar dit staat uitgelegd? Of kan iemand het mij hier, of op skype (frank.martens25) uitleggen? Ik beschik over een FTP server en Teamvieuwer.
Alvast Bedankt voor ieders reacie,
Frank
Wat je wil is zeker mogelijk.
Begin gewoon met de database aan te passen / uit te breiden.
Waarschijnlijk is er een tabel users. daar zal met name nog een kolom 'klas' aan de tabel toegevoegd moeten worden. Denk ook direct na over het einde schooljaar.. wie gaat er naar de volgende klas? wie niet? wellicht zul je hier ook een beheer tool voor maken.
één gebruiker kan meerdere boeken toevoegen. maar een boek kan maar aan één gebruiker toebedeeld zijn tegelijkertijd?
dan kun je het beste een tabel boeken aan de database toevoegen. daarin zou je kolommen kunnen maken als:
boek_id (primary key, autoincrement)
user_id
titel
...
Bedankt voor je reactie. De tabel is nu uitgebreid. Naam, Achternaam en Klas zijn toegevoegd. Één gebruiker kan meerdere boeken toevoegen. 2 mensen kunnen wel hetzelfde boek hebben.
Hoe je boek_id, user_id bedoeld etc begrijp ik niet helemaal... Kan je dat uitleggen? Of gaat het er gewoon om dat dat de tabelnamen zijn? Of juist de 'Fields' ?
ik weet niet hou jouw 'user' tabel heet.. ik hou het op users.
waarschijnlijk hebben alle users een uniek nummer. misschien leerlingnr of iets dergelijks? ik noem het user_id.
Dit unieke nummer mag maar één keer voorkomen. er mogen dus nooit geen dubbele user_id's zijn.
de tabel boeken met de volgende records:
book_id: INT + autoincrement + Primary key.
titel: VARCHAR(50)
(en verder wat je wil)
de koppeltabel user_book met de ALLEEN volgende records:
id: INT + autoincrement + Primary key.
user_id: INT + index
book_id: INT + index
Toevoeging op 09/06/2013 21:23:05:
later kun je dan users bij houden in de user tabel, boeken bijhouden in de tabel boeken.
in de koppel tabel houden we enkel bij wie welk boek heeft.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
koppel tabel:
--------------------------
id | user_id | book_id |
--------------------------
1 | 25 | 15 |
1 | 25 | 17 |
1 | 18 | 15 |
--------------------------
--------------------------
id | user_id | book_id |
--------------------------
1 | 25 | 15 |
1 | 25 | 17 |
1 | 18 | 15 |
--------------------------
user met user_id 25 heeft dus boek 15 en boek 17 in gebruik.
user met user_id 18 heeft (ook) boek 15 in gebruik.
`book_id` INT( 50 ) NOT NULL AUTO_INCREMENT ,
`Titel` VARCHAR( 50 ) NOT NULL ,
`Schrijver` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `book_id` )
) ENGINE = MYISAM
CREATE TABLE ``.`user_book` (
`id` INT NOT NULL AUTO_INCREMENT ,
`user_id` INT NOT NULL ,
`book_id` INT NOT NULL ,
PRIMARY KEY ( `id` ) ,
INDEX ( `user_id` , `book_id` )
) ENGINE = MYISAM
Bedankt, die zijn aangemaakt. Hoe gaat het nu verder? De tabel heet trouwens Members, maar dat maakt niet uit. Iedereen krijgt daar inderdaad een eigen ID.
Toevoeging op 09/06/2013 21:42:51:
Hoe werkt het nu verder met de formulieren en met het opvragen van boeken?
ja nu komt het echte werk.
je zou nu de pagina's waar de 'members' zich registreren kunnen uitbreiden zodat ze ook kunnen opgeven in welke klas ze zitten en wat hun naam en achter naam is. Dit zal waarschijnlijk betekenen dat het formulier aangepast moet worden en ook de PHP die het formulier verwerkt alsmede de database querie INSERT.
tevens moet de boeken tabel gevuld worden. dat zal misschien een beheerpagina worden.
daarnaast kun je een nieuwe pagina gaan maken waar men een overzicht krijgt van de boeken die ze hebben.
boeken voeg je gewoon toe aan de tabel boeken.
boeken die in gebruik zijn voeg je toe in de koppel-tabel. daarvoor heb je dan dus het juiste book_id nodig en de member_id.
Toevoeging op 09/06/2013 22:04:06:
heb je ervaring met formulieren?
Het opvragen van alle boeken:
een stapje verder:
naam van de gebruiker - boek
Parse error: syntax error, unexpected T_ELSE in /home/a4692586/public_html/toevoegen.php on line 39
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
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
<?php
//we zetten error report aan voor als er een foutje in de code zou zitten, deze kan als alles optimaal werkt uitgezet worden. Dit doe je door de 1 te veranderen in een 0.
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
//we includen het bestand config.php zodat we verbinding hebben met de database
$host = ""; // De host
$user = ""; // De MySQL gebruikersnaam
$pass = ""; // Het MySQL wachtwoord
$datb = ""; // De database
mysql_connect($host, $user, $pass) or die ("Er kan geen verbinding worden gemaakt");
mysql_select_db($datb) or die ("Er kan geen verbinding worden gemaakt met de database");
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //kijken of het formulier gepost is
$naam = mysql_real_escape_string($_POST['Tite;']);
$adres = mysql_real_escape_string($_POST['Schrijver']);
//velden controleren
$errors = array();
if(strlen($naam) < 2) {
array_push($errors, "Je hebt geen of een te korte naam ingevuld");
}
if(strlen($naam) > 30) {
array_push($errors, "Je hebt een te lange naam ingevuld");
}
//kijken of er een naam is ingevuld, zo nee onderbreek het proces, anders ga verder
if(count($errors) >0){
foreach($errors as $error){
echo $error;
}
}
else {
//alles mooi in de database zetten
mysql_query ("INSERT INTO boeken (Titel, Schrijver) VALUES ('". $naam ."', '".$adres."')") or die (mysql_error());
echo 'Je gegevens zijn opgeslagen in de database';
}
else {
// het formulier en we zijn klaar
<form action="toevoegen.php" method="post">
Titel:<input type="text" name="Titel" size="45">
Schrijver: <input type="text" name="Schrijver" size="60">
<input type="submit" value="verzenden" />
</form>
}
?>
//we zetten error report aan voor als er een foutje in de code zou zitten, deze kan als alles optimaal werkt uitgezet worden. Dit doe je door de 1 te veranderen in een 0.
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
//we includen het bestand config.php zodat we verbinding hebben met de database
$host = ""; // De host
$user = ""; // De MySQL gebruikersnaam
$pass = ""; // Het MySQL wachtwoord
$datb = ""; // De database
mysql_connect($host, $user, $pass) or die ("Er kan geen verbinding worden gemaakt");
mysql_select_db($datb) or die ("Er kan geen verbinding worden gemaakt met de database");
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //kijken of het formulier gepost is
$naam = mysql_real_escape_string($_POST['Tite;']);
$adres = mysql_real_escape_string($_POST['Schrijver']);
//velden controleren
$errors = array();
if(strlen($naam) < 2) {
array_push($errors, "Je hebt geen of een te korte naam ingevuld");
}
if(strlen($naam) > 30) {
array_push($errors, "Je hebt een te lange naam ingevuld");
}
//kijken of er een naam is ingevuld, zo nee onderbreek het proces, anders ga verder
if(count($errors) >0){
foreach($errors as $error){
echo $error;
}
}
else {
//alles mooi in de database zetten
mysql_query ("INSERT INTO boeken (Titel, Schrijver) VALUES ('". $naam ."', '".$adres."')") or die (mysql_error());
echo 'Je gegevens zijn opgeslagen in de database';
}
else {
// het formulier en we zijn klaar
<form action="toevoegen.php" method="post">
Titel:<input type="text" name="Titel" size="45">
Schrijver: <input type="text" name="Schrijver" size="60">
<input type="submit" value="verzenden" />
</form>
}
?>
Je sluit je if van regel 15 niet af, vandaar die error.
Ik heb even een nieuw topic in Beginnend PHP geopend wegens een andere fout;) Daarna kunnen we weer verder.
Ik heb het script moeten debuggen, wat eerijk gezegd snel is verlopen. Je kan nu een boek toevoegen op http://kennemercollegeboeken.hostzi.com/toevoegen.php . Hoe werkt het nu verder?
Alvast Bedankt,
Frank
Zou iemand (maakt niet uit wie) hier nog uitleg willen geven?
vertel eens wat de volgende stap is die je zou willen realiseren?
In de code hierboven staat wel een INSERT query in de tabel boeken, maar heb je ook een INSERT query voor members?
Zonder code/uitleg waar je op vastloopt wordt het lastig om je te helpen.
in je tabel boeken moet ook het member_id (unieke nummer van de gebruiker) worden toegevoegd. daarna is het simpel te koppelen met een JOIN.
Oke, en hoe werkt dit? Als je inlogt word er een sessie opgeslagen.
Een mogelijkheid: http://www.phptuts.nl/view/39/
dan krijg je de session variabelen te zien, 90% kans dat daar de member_id bij staat
Script staat erin, maar werkt bij mij niet...
Het valt mij in diverse topics op dat jij in koppeltabellen altijd een aparte id kolom hebt als primary key.
Dat is alleen maar extra ballast, de combinatie van (in dit geval) boek_id en member_id is een prima PK.
@Frank M
Je hebt die koppeltabel alleen nodig als meerdere gebruikers hetzelfde boek toe kunnen voegen, is dat niet zo kan je volstaan met een kolom member_id in de boeken tabel
Gewijzigd op 23/06/2013 19:09:55 door Ger van Steenderen