Hoi,

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
-Email

Login:

-Gebruikersnaam
-Wachtwoord

Boek toevoegen:

-Naam
-Achternaam
-Klas
-Titel
-Schrijver

Hoe ik het graag zie:

Regristratie:

-Naam
-Achternaam
-Klas
-Gebruikersnaam
-Wachtwoord
-Email

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
MySql gebruik ik. Ik zal het hele script online zetten:


<?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>
Aha vandaar. Vervang $datb->query door mysql_query
Veranderd, maar daar ligt het niet aan... Het gaat eerder om de variabele $mb_result, die nergens in mijn script te vinden is.

[size=xsmall]Toevoeging op 04/07/2013 22:16:25:[/size]

Waarvoor staat die variabele eigenlijk? Wellicht kom ik dan verder.
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.
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.


Dat betekend dat je het dus ook weg kan laten?
In principe kan dat, alleen ben je dan wel elke controle kwijt. Maar het kan ook op een andere manier:

<?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();
?>

Oke, het 2e script werkt zonder problemen, ik heb die aangepast naar:


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:

--------------------	
|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
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.

2) Bij het opslaan van de ID's, wordt het member ID als 1234 opgeslagen. Er staat dan nu:

--------------------	
|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.



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

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?
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.

Reageren