SQL Functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

10/08/2013 18:12:32
Quote Anchor link
Momenteel ben ik bezig om waarden uit een andere tabel te verplaatsen én iets toe te voegen. In de tabel 'members' staan de volgende waardes: naam,achternaam,username,klas,wachtwoord,email
In de tabel 'boeken' staan de volgende waardes: naam,achternaam,username,klas,titel,schrijver

In het formulier vul je de titel en schrijver in:

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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"  
"http://www.w3.org/TR/html4/strict.dtd">  
<html lang="en">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>Boek toevoegen</title>  
</head>  
<body>  
<form method="post" action="insert.php">  
<input type="text" name="Schrijver" />  <br>
<input type="text" name="Titel" />  <br>
<input type="submit" value="Submit">  
</form>  
</body>  
</html>


Dit wordt er op de volgende manier in gestopt:

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
<?php  
$host
=""; //your host name  
$username=""; //your user name  
$password=""; // your password  
$db_name=""; // your database name  
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect"); //mysql connection  
mysql_select_db("$db_name")or die("cannot select DB"); //select your database  
$titel = $_POST['Titel'];  
$schrijver = $_POST['Schrijver'];    
if(empty($titel) || empty($schrijver)) die('Vul een Schrijver <strong>en</strong> Titel in op <a href="boektoevoegen.html">het formulier</a>.');
$query = "INSERT INTO Boeken (Titel,Schrijver) VALUES ('$name', '$email')";
mysql_query($query) or die('Query "' . $query . '" failed: ' . mysql_error());  
echo 'Boek toegevoegd';
?>
  


Nu wil ik dat ook de naam, achternaam, username en klas in de tabel boeken worden gezet. Ik werk met sessies, de gebruikersnaam valt op te vragen met $_SESSION['username']

Kan iemand mij opweg helpen of een link sturen hoe ik dit kan doen? Alleen de SQL functie helpt mij al opweg.
 
PHP hulp

PHP hulp

17/11/2024 16:36:04
 
Ramon van Dongen

Ramon van Dongen

10/08/2013 19:21:07
Quote Anchor link
Hallo Frank,

Ik zou sowieso een aantal dingen anders doen.

De twee regels met $titel = $_POST['Titel'] en $schrijver = $_POST['Schrijver']; zijn overbodig maar daarnaast ook onveilig omdat je later niet meer weet dat $titel en $schrijver uit $_POST data komen.

Daarnaast is het niet aan te raden om bij een empty $titel 'die' te gebruiken.
Als je het vertaalt naar het normale leven is het ook wat onaardig om te zeggen 'sterf' als iemand iets verkeerd doet.

Wil je de gegevens die je al in een andere SQL tabel hebt staan letterlijk kopieren naar deze boeken tabel? Misschien is het verstandiger om een relatie ertussen aan te geven en bij het ophalen van de gegeven deze relatie te JOINEN.
 
Obelix Idefix

Obelix Idefix

10/08/2013 19:31:19
Quote Anchor link
Frank Martens op 10/08/2013 18:12:32:
Momenteel ben ik bezig om waarden uit een andere tabel te verplaatsen én iets toe te voegen. In de tabel 'members' staan de volgende waardes: naam,achternaam,username,klas,wachtwoord,email
In de tabel 'boeken' staan de volgende waardes: naam,achternaam,username,klas,titel,schrijver

Wat wil precies? Dezelfde gegevens in 2 verschillende tabellen opslaan?!
Lijkt me niet goed.

Verder t.a.v. je code:
Controleer of een formulier verzonden is met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == "POST")

Controleer of variabelen bestaan: isset.
Controleer of ze niet leeg zijn.
Kopiëren van $_POST waarden is niet nodig (zoals Ramon ook uitlegt).
Variabelen buiten quotes.
Je query is 'lek' -> je gebruikt zonder beveiliging de invoer vanuit het formulier (kijk naar mysql_real_escape_string).
 

10/08/2013 21:14:22
Quote Anchor link
Dag Ramon,

Ramon van Dongen op 10/08/2013 19:21:07:
Hallo Frank,

Ik zou sowieso een aantal dingen anders doen.

De twee regels met $titel = $_POST['Titel'] en $schrijver = $_POST['Schrijver']; zijn overbodig maar daarnaast ook onveilig omdat je later niet meer weet dat $titel en $schrijver uit $_POST data komen.

Kan ik deze weglaten en gewoon in de SQL code $_POST['Schrijver'] plakken?
Ramon van Dongen op 10/08/2013 19:21:07:
Als je het vertaalt naar het normale leven is het ook wat onaardig om te zeggen 'sterf' als iemand iets verkeerd doet.

Je bedoelt dat ik hier een if / else optie moet gebruiken? Wat is het voordeel daarvan mbt een 'die' functie?
Ramon van Dongen op 10/08/2013 19:21:07:
Wil je de gegevens die je al in een andere SQL tabel hebt staan letterlijk kopieren naar deze boeken tabel? Misschien is het verstandiger om een relatie ertussen aan te geven en bij het ophalen van de gegeven deze relatie te JOINEN.

Ik wil de regristratiegegevens (members-tabel) letterlijk kopieëren naar die tabel, zodat een leraar op school deze kan zien.

Groet,
Frank

Obelix en Idefix op 10/08/2013 19:31:19:
Frank Martens op 10/08/2013 18:12:32:
Momenteel ben ik bezig om waarden uit een andere tabel te verplaatsen én iets toe te voegen. In de tabel 'members' staan de volgende waardes: naam,achternaam,username,klas,wachtwoord,email
In de tabel 'boeken' staan de volgende waardes: naam,achternaam,username,klas,titel,schrijver

Wat wil precies? Dezelfde gegevens in 2 verschillende tabellen opslaan?!
Lijkt me niet goed.

Deze gegevens wil ik inderdaad in 2 tabellen opslaan, maar de ene tabel is alleen zichtbaar voor mij, de andere voor een leraar.
Obelix en Idefix op 10/08/2013 19:31:19:
Verder t.a.v. je code:
Controleer of een formulier verzonden is met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == "POST")

Controleer of variabelen bestaan: isset.
Controleer of ze niet leeg zijn.
Kopiëren van $_POST waarden is niet nodig (zoals Ramon ook uitlegt).
Variabelen buiten quotes.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == "POST")

Zal ik gaan gebruiken, controleren of ze niet leeg zijn gebeurt al, zie 2e script.
Obelix en Idefix op 10/08/2013 19:31:19:
Je query is 'lek' -> je gebruikt zonder beveiliging de invoer vanuit het formulier (kijk naar mysql_real_escape_string).

Je hebt gelijk, hier heb ik niet aan gedacht.

Groet,
Frank
Gewijzigd op 10/08/2013 21:18:29 door
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/08/2013 08:34:28
Quote Anchor link
Frank Martens op 10/08/2013 21:14:22:
Ramon van Dongen op 10/08/2013 19:21:07:
Wil je de gegevens die je al in een andere SQL tabel hebt staan letterlijk kopieren naar deze boeken tabel? Misschien is het verstandiger om een relatie ertussen aan te geven en bij het ophalen van de gegeven deze relatie te JOINEN.

Ik wil de regristratiegegevens (members-tabel) letterlijk kopieëren naar die tabel, zodat een leraar op school deze kan zien.

Obelix en Idefix op 10/08/2013 19:31:19:
Wat wil precies? Dezelfde gegevens in 2 verschillende tabellen opslaan?!
Lijkt me niet goed.

Deze gegevens wil ik inderdaad in 2 tabellen opslaan, maar de ene tabel is alleen zichtbaar voor mij, de andere voor een leraar.

En dit heb je geregeld met priveleges op die tabellen?
En dan nog doe je het niet goed, want beter is om de members tabel op te splitsen in twee tabellen, één met de publieke gegevens en de andere met wachtwoord en email.
Gewijzigd op 11/08/2013 08:35:35 door Ger van Steenderen
 

11/08/2013 10:27:25
Quote Anchor link
Ik heb dit niet geregeld met privileges, maar de tabel 'Boeken' laat ik uitlezen op een beveiligde pagina. Ik ben de enige die de members tabel ziet, dus het lijkt mij niet nodig 2 tabellen te maken voor de members.
 
Obelix Idefix

Obelix Idefix

11/08/2013 10:37:19
Quote Anchor link
Maar dan zit je dus dat je telkens op 2 plaatsen dezelfde gegevens gaat bewaren.
Maakt kans op fouten groter en is bewerkelijker.
Gegevens leg je doorgaans maar op 1 plek vast in een database.
 

11/08/2013 10:48:30
Quote Anchor link
In de boeken tabel moet één persoon bijvoorbeeld 10 boeken toevoegen. Dat zijn 10 aparte Boek_ID's, en in de tabel members komen maar één keer de registratiegegevens. Daarom moeten de gegevens worden overgezet, naar de tabel boeken, zodat als de leraar in het zoek formulier 'Piet' intikt, alle boeken van 'Piet' komen te staan.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/08/2013 11:13:49
Quote Anchor link
Wat is er gebeurd met de data opzet uit een ander topic van jou?.
Want das namelijk de enige GOEDE methode!

Dus het correcte antwoord op jou vraag hoe gegevens over te zetten van de ene tabel naar de andere is:
Dat doe je niet want dat is niet nodig.
 

11/08/2013 13:19:13
Quote Anchor link
Aah, die was ik even vergeten. Nu heb ik die methode toegevoegd, alleen nu moet ik op een pagina uitlezen welke boeken bij welke gebruiker horen. Er wordt een username en book_id opgeslagen in de tabel. Hoe doe ik dat?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/08/2013 13:39:01
Quote Anchor link
Dus je hebt nu drie tabellen: members(user_id, user_name, ...), boeken(boek_id, titel, schrijver) en boeken_members(user_id, boek_id)?
Dan krijg je ongeveer deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    user_id,
    m.user_name,
    b.titel
FROM
    members AS m
LEFT JOIN
    boeken_members USING (user_id)
LEFT JOIN
    boeken AS b USING (boek_id)
 

11/08/2013 14:05:00
Quote Anchor link
3 tabellen inderdaad:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
----members----
|id |naam |achternaam|klas|username|password|email           |
|324|Frank|Martens   |H2C |donfrank|-       |[email protected]|
----Boeken----
|book_id|Titel  |Schrijver |
|45     |Kappen!|Carry Slee|
----user_book----
|id|user_id|book_id|
|1 |324    |45     |


Met de query zal ik even gaan puzzelen.

Toevoeging op 11/08/2013 22:49:26:

Ger, buiten dat er nog al wat mis is met het script (beveiliging, etc.), krijg ik het member_id er maar niet in. Kan jij mij daarbij helpen?

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
<?php
$host
=""; //yout host name  
$username="";  //yout user name  
$password="";      // your password  
$db_name="";  // your database name  
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect"); //mysql connection  
mysql_select_db("$db_name")or die("can not select DB"); //select your database    
$titel = $_POST['Titel'];  
$schrijver = $_POST['Schrijver'];
$user = $_SESSION['username'];
$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$query = mysql_query("SELECT id FROM members WHERE username = '".$_SESSION['username']."'");
$row = mysql_fetch_array($query);
$result = mysql_query("INSERT INTO Boeken (Titel,Schrijver)
VALUES ('$titel', '$schrijver')"
);
if ($result) {
$mb_result = mysql_query("INSERT INTO user_book (user_id, book_id)
VALUES ( '$row', LAST_INSERT_ID())"
);
    if ($mb_result)
 echo 'Boek ingevoegd';

    else echo mysql_error();
}

?>


Hij pakt $row niet op. Ik heb verschillende dingen geprobeerd, maar kom er niet uit. Ik ben er al de hele avond mee bezig... Kan jij mij verder helpen, of iemand anders?

Toevoeging op 11/08/2013 22:57:28:

Toch weer zo;n klein foutje... Sessionstart vergeten en $row moest $row['id'] zijn...
Gewijzigd op 11/08/2013 22:49:46 door
 



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.