Je eigen boek terug vinden - Vraagje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: « vorige 1 2

01/07/2013 12:09:32
Quote Anchor link
Oke, script van het uitlezen van het member_id werkt niet. Wat er komt te staan:

Array
(
[login] => yes
)

Hier zit dus geen ID tussen...
 
PHP hulp

PHP hulp

17/11/2024 18:23:32
 

02/07/2013 15:01:38
Quote Anchor link
Ik zal even uitgebreid neerzetten wat er gebeurd.

Een `member` maakt een account aan -> `member` krijgt een mail -> Gegevens van `member` worden opgeslagen in de tabel `members`.
Een `member` logt in -> Controle naar de tabel (in de database) `members`. -> Controle gelukt -> Pagina waarop iemand een boek kan toevoegen
-> Controle mislukt -> Foutmelding
Een `member` voegt een boek toe -> Boek wordt opgeslagen in de tabel `boeken`.

Nu wil ik dus, dat het boek achter de naam van de persoon komt te staan. Wat doe ik nu fout/wat mis ik?
Gewijzigd op 02/07/2013 15:27:58 door
 

04/07/2013 11:07:06
Quote Anchor link
Wat ik dus bedoel, is dat er nu een account in de 'members' tabel komt te staan, en een boek in de 'boeken' tabel. Alleen de koppeltabel werkt nu dus nog niet. Waarom niet?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/07/2013 11:17:10
Quote Anchor link
Wat je eerst moet doen is de relatie bepalen tussen members en boeken.
Dus een member kan meerdere boeken toevoegen, dan is vraag of hetzelfde boek ook nog door andere members kan worden toegevoegd. Is dat niet zo heb je een één op meer relatie en kan je volstaan met een kolom member_id op te nemen in de boeken tabel.
Anders heb je een meer op meer relatie en heb je de koppeltabel nodig.
 

04/07/2013 11:19:28
Quote Anchor link
Dan gaat het hier om de meer op meer relatie. Meerdere mensen kunnen hetzelfde boek hebben. De koppeltabel heb ik, maar er wordt niks opgeslagen daarin...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/07/2013 11:37:30
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$result
= $db->query("INSERT INTO boeken (titel,schrijver)
    VALUES ('PHP Kookboek', 'Ward van der Put')"
);
if ($result) {
    $mb_result = $db->query("INSERT INTO members_boeken (member_id, boek_id)
        VALUES (1234, LAST_INSERT_ID())"
);
}

?>

Misschien wat kort door de bocht maar om je op weg te helpen
Gewijzigd op 04/07/2013 11:37:49 door Ger van Steenderen
 

04/07/2013 11:48:42
Quote Anchor link
Kom ik redelijk mee verder, ik heb hem (uiteraard) even aangepast naar mij eigen namen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$result
= $datb->query("INSERT INTO boeken (titel,schrijver)
    VALUES ('PHP Kookboek', 'Ward van der Put')"
);
if ($result) {
    $mb_result = $db->query("INSERT INTO user_book (user_id, boek_id)
        VALUES (1234, LAST_INSERT_ID())"
);
}

?>


Echter zit er een fout in

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    $mb_result = $db->query("INSERT INTO user_book (user_id, boek_id)


Zou je die regel kunnen uitleggen, waar die voor staat? Wellicht is een naam anders bij mij.
Gewijzigd op 04/07/2013 11:49:06 door
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/07/2013 12:04:24
Quote Anchor link
Op regel 2 heb je $datb->query en op regel 5 $db->query
In de eerste query voeg je het boek toe aan de tabel boeken. Er vanuit gaande de boek_id een auto increment kolom is, kan je de id van het laatst toevoegde boek in een volgende query opvragen met LAST_INSERT_ID()
Dit werkt natuurlijk alleen als je een member een nieuw boek heeft toegevoegd.
 

04/07/2013 12:10:16
Quote Anchor link
Oke, ondanks dat ik nu $datb neer heb gezet (scherp gezien), krijg ik de volgende foutmelding:

Parse error: syntax error, unexpected T_STRING in /home/a4692586/public_html/login_succes/add2.php on line 127


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
126: if ($result) {
127:    $mb_result = $datb->query("INSERT INTO user_book (user_id, boek_id)
128:        VALUES (1234, LAST_INSERT_ID())");
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/07/2013 13:01:05
Quote Anchor link
Hmz vreemd, ik zie er geen fout in.
Gebruik je PDO of MySqli?
 

04/07/2013 13:12:59
Quote Anchor link
MySql gebruik ik. Ik zal het hele script online zetten:

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?PHP
session_start();
if($_SESSION['login'] != 'yes') die('Je moet eerst inloggen! <a href="http://kennemercollegeboeken.hostzi.com/login.php">Log in</a>.<br> Nog geen account:  <a href="http://kennemercollegeboeken.hostzi.com/register.php"> Maak er een aan!</a>');
?>

<head><title>Kennemercollege Boeken</title></head>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="style.css" type="text/css" media="screen, projection" />
</head>
 
<body>
 
<div id="wrapper">
 
    <header id="header">
        <center><IMG src="Naamloos5.png" height="75" width="500"></center>
    </header><!-- #header-->
 
    <section id="middle">
 
        <div id="container">
            <div id="content">
 
<?php
session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!
// E-mailadres van de ontvanger

$mail_ontv = '[email protected]';
$onderwerp = 'Kennemercollegeboeken Boek toevoeging';
 
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // naam controle
    if (empty($_POST['Titel']))
        $naam_fout = 1;
    // e-mail controle
    if (function_exists('filter_var') && !filter_var($_POST['Schrijver'], FILTER_VALIDATE_EMAIL))
     #       $email_fout = 1;
    // antiflood controle

    if (!empty($_SESSION['antiflood']))
    {

        $seconde = 0; // 0 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
        $tijd = time() - $_SESSION['antiflood'];
        if($tijd < $seconde)
            $antiflood = 1;
    }
}

 
// Speciale checks voor naam en e-mailadres
// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn

if (($_SERVER['REQUEST_METHOD'] == 'POST' && (!empty($antiflood) || empty($_POST['Titel']) || !empty($naam_fout) || empty($_POST['Schrijver']) || !empty($email_fout) || empty($_POST['Titel']) || empty($_POST['Schrijver']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {

        if (!empty($naam_fout))
            echo '<p>Uw naam is niet ingevuld.</p>';
        elseif (!empty($email_fout))
            echo '<p>Uw e-mailadres is niet juist.</p>';
        elseif (!empty($antiflood))
            echo '<p>U mag slechts &eacute;&eacute;n bericht per ' . $seconde . ' seconde versturen.</p>';
        else
            echo '<p>U bent uw naam, e-mailadres of wachtwoord vergeten in te vullen.</p>';
    }

 
  // HTML e-mail formlier
  echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
  <p>
    <fieldset><legend>Boek toevoegen</legend>
      <label for="Titel">Titel:</label><br />
      <input type="text" id="Titel" name="Titel" value="'
. (isset($_POST['Titel']) ? htmlspecialchars($_POST['Titel']) : '') . '" /><br />
 
      <label for="Schrijver">Schrijver:</label><br />
      <input type="text" id="Schrijver" name="Schrijver" value="'
. (isset($_POST['Schrijver']) ? htmlspecialchars($_POST['Schrijver']) : '') . '" /><br />
 
      <input type="submit" name="submit" value=" Toevoegen! " />
</fieldset>
  </p>
  </form>'
;
}

 
 
// versturen naar
else
{      
  // set datum
  $datum = date('d/m/Y H:i(worry)');
 
  $inhoud_mail = "===================================================\n";
  $inhoud_mail .= "Regristratie Mail " . $_SERVER['HTTP_HOST'] . "\n";
  $inhoud_mail .= "===================================================\n\n";
 
  $inhoud_mail .= "Welkom op " . $_SERVER['HTTP_HOST'] . " . In deze e-mail vind je je account informatie. Bewaar deze goed, je krijgt deze één keer! \n";
  $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  $inhoud_mail .= "Achternaam: " . htmlspecialchars($_POST['achternaam']) . "\n";
  $inhoud_mail .= "Klas: " . htmlspecialchars($_POST['klas']) . "\n";
  $inhoud_mail .= "Gebruikersnaam: " . htmlspecialchars($_POST['username']) . "\n";
  $inhoud_mail .= "Wachtwoord: " . htmlspecialchars($_POST['password']) . "\n";
  $inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['email']) . "\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
 
  $inhoud_mail .= "Jouw Kennemercollegeboeken Team \n";
  $inhoud_mail .= "===================================================\n\n";
 
  // --------------------
  // spambot protectie
  // ------
  // van de tutorial: http://www.phphulp.nl/php/tutorial/beveiliging/spam-vrije-contact-formulieren/340/
  // ------

 
 
$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");
 
 
$result = $datb->query("INSERT INTO boeken (titel,schrijver)
    VALUES ('PHP Kookboek', 'Ward van der Put')"
);
if ($result) {
    $mb_result = $datb->query("INSERT INTO user_book (user_id, boek_id)
        VALUES (1234, LAST_INSERT_ID())"
);
}

echo "Boek succesvol toegevoegd";
 
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>';
 
  $headers = stripslashes($headers);
  $headers = str_replace('\n', '', $headers); // Verwijder \n
  $headers = str_replace('\r', '', $headers); // Verwijder \r
  $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
 
  $_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
  $_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
  $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
 
  if (mail($mail_ontv, $onderwerp, $inhoud_mail, $headers))
 
  {

      // zorg ervoor dat dezelfde persoon niet kan spammen
      $_SESSION['antiflood'] = time();
 
      echo '<h1>Boek succesvol toegevoegd</h1>
 
      <p><br>Je boek is toegevoegd aan de database.</p>'
;
  }

  else
  {
      echo '<h1>Boek toevoegen mislukt</h1>
 
      <p><b>Onze excuses. Probeer het later opnieuw.</b></p>'
;
  }
}

?>

 
</div><!-- #content-->
        </div><!-- #container-->
 
        <aside id="sideLeft">
                         <P STYLE="font-size: 12pt;"><h1>Home</h1>
                       <p> >><a href="http://kennemercollegeboeken.hostzi.com/login_succes/index.php">Beginpagina Ledenpaneel</a><<<br>
  <P STYLE="font-size: 12pt;"><h1>Account</h1>
            <a href="http://kennemercollegeboeken.hostzi.com/login_succes/add.php">Boek Toevoegen</a><br>
<a href="http://kennemercollegeboeken.hostzi.com/login_succes/news.php">Nieuws</a><br>
<a href="http://forum.kennemercollegeboeken.hostzi.com/phpBB3/">Forum</a><br>
<a href="http://kennemercollegeboeken.hostzi.com/login_succes/logout.php">Uitloggen</a><br></p>
                       <p style="font-size: 12pt;"><h1>Spelletjes</h1>
                     <a href="http://www.kennemercollegeboeken.hostzi.com/login_succes/game1.php">Bounce Game</a> <br>
<a href="http://www.kennemercollegeboeken.hostzi.com/login_succes/game2.php">Reactie Spel</a> <br>
<a href="http://www.kennemercollegeboeken.hostzi.com/login_succes/game3.php">Raad het nummer</a><br>
<a href="http://www.kennemercollegeboeken.hostzi.com/login_succes/game4.php">Zoek de Spion</a> <br></p>
        </aside><!-- #sideLeft -->
 
    </section><!-- #middle-->
 
</div><!-- #wrapper -->
 
<footer id="footer">
      Kennemercollege Boeken 2013. Site made by <b>Frank Martens</b>
</footer><!-- #footer -->
 
</body>
</html>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/07/2013 16:03:04
Quote Anchor link
Aha vandaar. Vervang $datb->query door mysql_query
 

04/07/2013 17:33:24
Quote Anchor link
Veranderd, maar daar ligt het niet aan... Het gaat eerder om de variabele $mb_result, die nergens in mijn script te vinden is.

Toevoeging op 04/07/2013 22:16:25:

Waarvoor staat die variabele eigenlijk? Wellicht kom ik dan verder.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/07/2013 11:06:58
Quote Anchor link
In die variabele sla je het resultaat van de query, wat in dit geval true of false is.
Daarom is het eigenlijk niet nodig, maar ik dacht dat het voor jou wat duidelijker zou zijn.

Ik denk ook niet dat de fout in dat stukje zit (weet het eigenlijk zeker), en ik raad je aan dat eens in een apart scriptje uit te testen.
 

05/07/2013 11:13:26
Quote Anchor link
Quote:
In die variabele sla je het resultaat van de query, wat in dit geval true of false is. Daarom is het eigenlijk niet nodig, maar ik dacht dat het voor jou wat duidelijker zou zijn.[/QUOTE]

Dat betekend dat je het dus ook weg kan laten?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/07/2013 11:29:56
Quote Anchor link
In principe kan dat, alleen ben je dan wel elke controle kwijt. Maar het kan ook op een andere manier:
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
<?php
$result
= mysql_query("INSERT INTO boeken (titel,schrijver)
    VALUES ('PHP Kookboek', 'Ward van der Put')"
);
if ($result) {
    $mb_result = mysql_query("INSERT INTO user_books (member_id, boek_id)
        VALUES (1234, LAST_INSERT_ID())"
);
    if ($mb_result) echo 'Boek ingevoegd';
    else echo mysql_error();
}

else echo mysql_error();
// of
if (mysql_query("INSERT INTO boeken (titel,schrijver)
    VALUES ('PHP Kookboek', 'Ward van der Put')"
)) {
    if (mysql_query("INSERT INTO user_books (member_id, boek_id)
        VALUES (1234, LAST_INSERT_ID())"
)) {
        echo 'Boek ingevoegd';
    }

    else echo mysql_error();
}

else echo mysql_error();
?>
 

05/07/2013 11:45:18
Quote Anchor link
Oke, het 2e script werkt zonder problemen, ik heb die aangepast naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if (mysql_query("INSERT INTO Boeken (Titel,Schrijver)
    VALUES ('PHP Kookboek', 'Ward van der Put')")) {
    if (mysql_query("INSERT INTO user_book (user_id, book_id)
        VALUES (1234, LAST_INSERT_ID())")) {
        echo 'Boek ingevoegd';
    }
    else echo mysql_error();
}
else echo mysql_error();


Nu zijn er nog 3 dingen, voor de rest werkt alles perfect, en kan ik dit project afronden.

1) Na het toevoegen komt in de 'Boeken' tabel te staan: 24 PHP Kookboek Ward van der Put
Dit moet worden veranderd naar de ingevoerde waarde
2) Bij het opslaan van de ID's, wordt het member ID als 1234 opgeslagen. Er staat dan nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
--------------------    
|id|user_id|book_id|
|1 |1234   |24     |
--------------------

Hierbij klopt het book_id, maar het member ID niet.

3) De leden + boeken moeten worden uitgelezen. Dat gaat met select, maar (waarschijnlijk) gaat dat mij zonder hulp lukken.

Alvast bedankt voor de antwoorden op punt 1 en 2,

Frank
Gewijzigd op 05/07/2013 11:47:02 door
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/07/2013 12:08:32
Quote Anchor link
Frank:
Nu zijn er nog 3 dingen, voor de rest werkt alles perfect, en kan ik dit project afronden.

1) Na het toevoegen komt in de 'Boeken' tabel te staan: 24 PHP Kookboek Ward van der Put
Dit moet worden veranderd naar de ingevoerde waarde

Bedoel je dat het boek_id geen auto_increment kolom is? Dan moet je die kolom en waarde meenemen in de INSERT. En dan moet je in de tweede insert LAST_INSERT_ID() ook vervangen door de opgegeven waarde.
Quote:
2) Bij het opslaan van de ID's, wordt het member ID als 1234 opgeslagen. Er staat dan nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
--------------------    
|id|user_id|book_id|
|1 |1234   |24     |
--------------------

Hierbij klopt het book_id, maar het member ID niet.

Ik had dat dan ook hard gecodeerd, dat moet je dus vervangen met wat je in de sessie hebt staan.
Overigens heeft een koppeltabel geen eigen AI PK nodig, die staat daar niets te doen. Je maakt van de user_id en de book_id gezamenlijk de PK, heb je gelijk een unique index.
Gewijzigd op 05/07/2013 12:09:38 door Ger van Steenderen
 

05/07/2013 12:18:02
Quote Anchor link
Ger van Steenderen op 05/07/2013 12:08:32:
Bedoel je dat het boek_id geen auto_increment kolom is? Dan moet je die kolom en waarde meenemen in de INSERT. En dan moet je in de tweede insert LAST_INSERT_ID() ook vervangen door de opgegeven waarde.

boek_id is een auto_increment, maar als je een boek toevoegt met 'Carry slee' en als titel 'Kappen!', dan komt er in de tabel boeken te staan:

24 PHP Kookboek Ward van der Put
Quote:
Ik had dat dan ook hard gecodeerd, dat moet je dus vervangen met wat je in de sessie hebt staan.
Overigens heeft een koppeltabel geen eigen AI PK nodig, die staat daar niets te doen. Je maakt van de user_id en de book_id gezamenlijk de PK, heb je gelijk een unique index.

Deze sessie is nog niet aangemaakt, en wordt ook niet opgeslagen. Alleen de gebruikersnaam wordt momenteel in een sessie opgeslagen, en of je ingelogd bent of niet. Hoe maak ik de sessie met 'member_id' aan?
Gewijzigd op 05/07/2013 12:18:17 door
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/07/2013 12:31:07
Quote Anchor link
Hetzelfde als je voor de gebruikersnaam doet bv met $_SESSION['member_id'].

Nogmaals, ik heb als voorbeeld de dingen gewoon hard gecodeerd, ik neem aan dat je de titel en de schrijver uit een formulier krijgt dus moet je die waardes daardoor vervangen, en niet vergeten te escapen.
 

Pagina: « vorige 1 2



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.