Opgehaalde data uit database in een andere tabel toevoegen.
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.
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
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
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
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?
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
)
;
?>
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
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.