Opgehaalde data uit database in een andere tabel toevoegen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wilco Rakhorst

Wilco Rakhorst

26/11/2015 11:35:46
Quote Anchor link
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:

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
<?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>';
}


 ?>


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

PHP hulp

21/09/2021 20:34:58
 
L deB

L deB

26/11/2015 11:52:58
Quote Anchor link
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
Gewijzigd op 26/11/2015 11:55:30 door L deB
 
Jan de Laet

Jan de Laet

26/11/2015 12:27:28
Quote Anchor link
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.
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
<?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 ---
Gewijzigd op 26/11/2015 12:31:46 door Jan de Laet
 
Peter K

Peter K

26/11/2015 12:33:37
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<form method="POST">
<select name="test"><option value="1">opties<option></select>
</form>


De verwerking: (BASIS)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$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
 
Thomas van den Heuvel

Thomas van den Heuvel

26/11/2015 13:04:37
Quote Anchor link
@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?
 
Wilco Rakhorst

Wilco Rakhorst

26/11/2015 13:45:22
Quote Anchor link
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.

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


?>
 
Thomas van den Heuvel

Thomas van den Heuvel

26/11/2015 14:01:17
Quote Anchor link
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.
Gewijzigd op 26/11/2015 14:02:49 door Thomas van den Heuvel
 
Wilco Rakhorst

Wilco Rakhorst

26/11/2015 14:03:23
Quote Anchor link
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.
 



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.