Opgehaalde data uit database in een andere tabel toevoegen.
Ik heb via een query data opgehaald en getoond in een dropbox
Nu wil ik eigenlijk de gekozen waarde opslaan in een andere tabel.
Ik heb geen idee hoe ik dat moet aanvliegen.
De code om de data te tonen is het volgende:
Dit zorgt er voor dat ik op de betreffende pagina een lijst met namen te zien krijg waar ik uit kan kiezen.
Nu wil ik de gekozen persoon toevoegen aan een andere tabel dan waaruit ik de data heb opgehaald.
Nu wil ik eigenlijk de gekozen waarde opslaan in een andere tabel.
Ik heb geen idee hoe ik dat moet aanvliegen.
De code om de data te tonen is het volgende:
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
require_once 'db_config.php'; //verbinding maken
mysql_select_db('XXX') or die (mysql_error()); //errorhandling
$query = "SELECT `CompleteName` FROM `Contenders` ORDER BY `CompleteName` ASC ";
$result = mysql_query($query);
$options = "";
while ($row=mysql_fetch_array($result))
{
$Completename=$row['CompleteName'];
$options .= '<option value="'.$Completename.'">'.$Completename.'</option>';
}
?>
require_once 'db_config.php'; //verbinding maken
mysql_select_db('XXX') or die (mysql_error()); //errorhandling
$query = "SELECT `CompleteName` FROM `Contenders` ORDER BY `CompleteName` ASC ";
$result = mysql_query($query);
$options = "";
while ($row=mysql_fetch_array($result))
{
$Completename=$row['CompleteName'];
$options .= '<option value="'.$Completename.'">'.$Completename.'</option>';
}
?>
Dit zorgt er voor dat ik op de betreffende pagina een lijst met namen te zien krijg waar ik uit kan kiezen.
Nu wil ik de gekozen persoon toevoegen aan een andere tabel dan waaruit ik de data heb opgehaald.
Misschien dat er veel betere manieren zijn dan die ik heb geprobeerd maar kan het toch melden:
Ik heb een variabele op 0 gezet:
$aantal = 0;
Daarna:
while ($obj = $results->fetch_object()) {
$aantal++;
Vervolgens als id:
id='productprijs".$aantal."'
En dan pak ik daarna dat unieke id weer op na de post
Want ik heb dan productprijs1 of productprijs9 of wat dan ook wat gekozen is. En dat kan ik daarna weer omzetten aan de hand van dat cijfer. (via query: WHERE id = 9 bijvoorbeeld en dan heb ik alle informatie over die productprijs)
Maar goed kan me voorstellen dat dit niet de beste manier is (misschien ook wel een bagger manier, ik weet het niet), maar werkt voor mijn gehobby in ieder geval
Ik heb een variabele op 0 gezet:
$aantal = 0;
Daarna:
while ($obj = $results->fetch_object()) {
$aantal++;
Vervolgens als id:
id='productprijs".$aantal."'
En dan pak ik daarna dat unieke id weer op na de post
Want ik heb dan productprijs1 of productprijs9 of wat dan ook wat gekozen is. En dat kan ik daarna weer omzetten aan de hand van dat cijfer. (via query: WHERE id = 9 bijvoorbeeld en dan heb ik alle informatie over die productprijs)
Maar goed kan me voorstellen dat dit niet de beste manier is (misschien ook wel een bagger manier, ik weet het niet), maar werkt voor mijn gehobby in ieder geval
Gewijzigd op 26/11/2015 11:55:30 door L deB
Je stuurt je formulier ergens heen voor de afwikkeling van de SUMBIT.
Daar controleer je of de waardes goed zijn (dus bijvoorbeeld of er wel een naam gekozen is en of de naam niet al voorkomt in de andere tabel) en als er geen fouten zijn voer je daar de INSERT sql uit en gaat daarna naar een gewenste pagina.
Anders toon je de fouten en laat je het formulier weer zien.
Daar controleer je of de waardes goed zijn (dus bijvoorbeeld of er wel een naam gekozen is en of de naam niet al voorkomt in de andere tabel) en als er geen fouten zijn voer je daar de INSERT sql uit en gaat daarna naar een gewenste pagina.
Anders toon je de fouten en laat je het formulier weer zien.
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
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
<?php
// We gaan de errors in een array bijhouden
$aErrors = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Er zijn gegevens verstuurd naar deze pagina!
$veld = 'GekozenNaam';
$input = $_POST[$veld];
if ( empty($input) ) {
$aErrors[$veld] = $veld . ' is verplicht';
}
if ( count($aErrors) == 0 ) {
// We hebben alle gegevens en geen fouten
// Gegevens verwerken mbv insert!
// ga naar nieuwe pagina
}
}
?>
<form name="formulier" method="post">
<?php
// show the errors
if ( isset($aErrors) and count($aErrors) > 0 ) {
echo '<ul class="frmerrorlist">';
foreach ( $aErrors as $error ) {
echo '<li>' . $error . '</li>';
}
echo '</ul>';
echo '<br>' . PHP_EOL;
}
?>
--- hier je stukje uit je eigen post om de lijst met namen te tonen ---
// We gaan de errors in een array bijhouden
$aErrors = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Er zijn gegevens verstuurd naar deze pagina!
$veld = 'GekozenNaam';
$input = $_POST[$veld];
if ( empty($input) ) {
$aErrors[$veld] = $veld . ' is verplicht';
}
if ( count($aErrors) == 0 ) {
// We hebben alle gegevens en geen fouten
// Gegevens verwerken mbv insert!
// ga naar nieuwe pagina
}
}
?>
<form name="formulier" method="post">
<?php
// show the errors
if ( isset($aErrors) and count($aErrors) > 0 ) {
echo '<ul class="frmerrorlist">';
foreach ( $aErrors as $error ) {
echo '<li>' . $error . '</li>';
}
echo '</ul>';
echo '<br>' . PHP_EOL;
}
?>
--- hier je stukje uit je eigen post om de lijst met namen te tonen ---
Gewijzigd op 26/11/2015 12:31:46 door Jan de Laet
Wat heb je nu staan als client side? Waarschijnlijk heb je al een formulier?
Als ik het goed begrijp wil je:
1. Data ophalen uit tabel1 als opties voor één select
2. Deze select weergeven op het scherm en middels een post weer verwerken naar de server
3. Op de server de waarde van de select opslaan in tabel2
Je formulier zal iets in deze richting zijn:
De verwerking: (BASIS)
Let op dit is echt de basis, er moet natuurlijk een foutafhandeling etc etc. bij komen.
Als ik het goed begrijp wil je:
1. Data ophalen uit tabel1 als opties voor één select
2. Deze select weergeven op het scherm en middels een post weer verwerken naar de server
3. Op de server de waarde van de select opslaan in tabel2
Je formulier zal iets in deze richting zijn:
Code (php)
1
2
3
2
3
<form method="POST">
<select name="test"><option value="1">opties<option></select>
</form>
<select name="test"><option value="1">opties<option></select>
</form>
De verwerking: (BASIS)
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$waarde_ingevuld = $_POST['test'];
$invoeren = mysql_query("INSERT INTO `tabel2` (`naam_veld`) VALUES ('$waarde_ingevuld')");
?>
$waarde_ingevuld = $_POST['test'];
$invoeren = mysql_query("INSERT INTO `tabel2` (`naam_veld`) VALUES ('$waarde_ingevuld')");
?>
Let op dit is echt de basis, er moet natuurlijk een foutafhandeling etc etc. bij komen.
Gewijzigd op 26/11/2015 12:33:51 door Peter K
@Wilco, ik hoop dat jouw Contenders tabel ook een primary key heeft? Wanneer je relaties gaat leggen tussen tabellen (en je dus echt een relationele database aan het bouwen/vullen/gebruiken bent) is het verstandig om tussen tabellen te communiceren middels (foreign) keys. Dit is de meest efficiënte manier om tabellen aan elkaar te knopen, ook voor als je deze data weer uit wilt lezen.
Dit zorgt ook (mits je database correct is opgezet) voor referentiële integriteit, oftewel, een zekere waarborging voor het consistent houden van de data in de tabellen. Je kunt dan bijvoorbeeld niet zomaar records verwijderen als hier nog verwijzingen naar bestaan, dit houdt je data dus "gezond".
Je bent al een heel eind op weg, alleen zou ik als option value dus het Contender-id gebruiken. Ik weet niet precies wat voor functie deze doel-tabel vervult?
Dit zorgt ook (mits je database correct is opgezet) voor referentiële integriteit, oftewel, een zekere waarborging voor het consistent houden van de data in de tabellen. Je kunt dan bijvoorbeeld niet zomaar records verwijderen als hier nog verwijzingen naar bestaan, dit houdt je data dus "gezond".
Je bent al een heel eind op weg, alleen zou ik als option value dus het Contender-id gebruiken. Ik weet niet precies wat voor functie deze doel-tabel vervult?
Iedereen (alvast) super bedankt voor het meedenken en reageren. Ik denk dat ik met de antwoorden al weer een heel stuk op weg ben geholpen.
Ik maak inderdaad gebruik van ID's en Primary Keys. Om er voor te zorgen dat iemand wel of niet getoond wordt heb ik het veld 'Blocked' opgenomen in de tabel.
Bij het opgeven van de proefavond haal ik de gegevens over uit de tabel Contenders. De gekozen waarde mag dan weer terug in het veld Participant.
Onderstaand even de opzet van deze 2 tabellen voor de leesbaarheid onder PHP code gezet.
Ik maak inderdaad gebruik van ID's en Primary Keys. Om er voor te zorgen dat iemand wel of niet getoond wordt heb ik het veld 'Blocked' opgenomen in de tabel.
Bij het opgeven van de proefavond haal ik de gegevens over uit de tabel Contenders. De gekozen waarde mag dan weer terug in het veld Participant.
Onderstaand even de opzet van deze 2 tabellen voor de leesbaarheid onder PHP code gezet.
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
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
<?php
CREATE TABLE `Contenders`
(
`ContactId` INT NOT NULL AUTO_INCREMENT , PRIMARY KEY (`ContactId`) ,
`FirstName` CHAR(50),
`Surname` CHAR(50),
`Insertion` CHAR(8),
`CompleteName` CHAR(75),
`BBQ` CHAR(20),
`Blocked` BIT
)
;
/*
Tabel om aan te geven wanneer de proefavond plaats vindt.
*/
CREATE TABLE `TastingEvent`
(
`TastingId` INT NOT NULL AUTO_INCREMENT , PRIMARY KEY (`TastingId`) ,
`RumName` CHAR(50) NOT NULL,
`Age` INT,
`Datum` DATE NOT NULL,
`StartTime` TIME NOT NULL,
`Organizor` CHAR(75),
`Participant` CHAR(75),
`BBQ` CHAR(20),
`Blocked` BIT
)
;
?>
CREATE TABLE `Contenders`
(
`ContactId` INT NOT NULL AUTO_INCREMENT , PRIMARY KEY (`ContactId`) ,
`FirstName` CHAR(50),
`Surname` CHAR(50),
`Insertion` CHAR(8),
`CompleteName` CHAR(75),
`BBQ` CHAR(20),
`Blocked` BIT
)
;
/*
Tabel om aan te geven wanneer de proefavond plaats vindt.
*/
CREATE TABLE `TastingEvent`
(
`TastingId` INT NOT NULL AUTO_INCREMENT , PRIMARY KEY (`TastingId`) ,
`RumName` CHAR(50) NOT NULL,
`Age` INT,
`Datum` DATE NOT NULL,
`StartTime` TIME NOT NULL,
`Organizor` CHAR(75),
`Participant` CHAR(75),
`BBQ` CHAR(20),
`Blocked` BIT
)
;
?>
Hm, maar als een "Contender" te allen tijde maar aan maximaal één "TastingEvent" kan deelnemen, dan zou je toch ook een veld tasting_event_id in je "Contenders" tabel kunnen aanleggen, als deze niet NULL is dan weet je dat deze deelneemt, wat het veld "Blocked" dan overbodig maakt? Vice versa zou je in "TastingEvent" het participant_id op eenzelfde wijze kunnen bijhouden, dit vervangt dan daar de kolommen "Participant" alsmede "Blocked". Je hebt dan in feite een soort van dubbelgelinkt verband gemaakt.
EDIT: of je maakt een koppeltabel met restricties: maximaal 1 unieke contender en maximaal 1 unieke tastingevent.
EDIT: of je maakt een koppeltabel met restricties: maximaal 1 unieke contender en maximaal 1 unieke tastingevent.
Gewijzigd op 26/11/2015 14:02:49 door Thomas van den Heuvel
Bedankt Thomas.
Ik ga even kijken hoe ik dat netjes kan uitwerken en hoogstwaarschijnlijk meenemen. Aangezien ik toch nog in de Alpha fase van mijn hobby projectje zit kan ik dit soort zaken makkelijk(er) meenemen.
Ik ga even kijken hoe ik dat netjes kan uitwerken en hoogstwaarschijnlijk meenemen. Aangezien ik toch nog in de Alpha fase van mijn hobby projectje zit kan ik dit soort zaken makkelijk(er) meenemen.




