insert vraag
Ik heb een interview waarbij ik e.e.a. aanvink. Dat wordt netjes weg geschreven. Dit wil ik koppelen aan de laatste participant id uit de participant tabel en iedere regel hier onder moet gekoppeld worden aan de itemid. die staat in de items tabel.
SELECT * FROM Participant WHERE id=(SELECT max(id) FROM Participant)
SELECT items.ID, items.items FROM items WHERE items.role="DE" AND items.categorie="Communication" ORDER BY items.items;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
var_dump($_POST); //met $_POST wordt de array met de verschillende items getoond
foreach($_POST['items'] as $item) {
$query = "INSERT INTO interview (role, yes, no, question, comment, level, itemID, participantID)
VALUES ('DE', '".mysqli_real_escape_string($conn, $item['yes'])."',
'".mysqli_real_escape_string($conn, $item['no'])."',
'".mysqli_real_escape_string($conn, $item['question'])."',
'".mysqli_real_escape_string($conn, $item['comment'])."',
'".mysqli_real_escape_string($conn, $item['level'])."',
'11',
'22'
)";
mysqli_query($conn, $query);
echo "<br>Record toegevoegd! ($query)<hr>";
}
?>
var_dump($_POST); //met $_POST wordt de array met de verschillende items getoond
foreach($_POST['items'] as $item) {
$query = "INSERT INTO interview (role, yes, no, question, comment, level, itemID, participantID)
VALUES ('DE', '".mysqli_real_escape_string($conn, $item['yes'])."',
'".mysqli_real_escape_string($conn, $item['no'])."',
'".mysqli_real_escape_string($conn, $item['question'])."',
'".mysqli_real_escape_string($conn, $item['comment'])."',
'".mysqli_real_escape_string($conn, $item['level'])."',
'11',
'22'
)";
mysqli_query($conn, $query);
echo "<br>Record toegevoegd! ($query)<hr>";
}
?>
Toevoeging op 07/09/2017 13:15:10:
De pagina waarmee ik dit script benader, bevat al een link naar het items.ID
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$comment = "";
// connect to the database
$result = $conn->query('SELECT participant.ID, items.items, participant.yes, Participant.no, Participant.question, Participant.comment
FROM participant
RIGHT JOIN items ON participant.itemID=items.ID
WHERE items.role="DE" AND items.categorie="Communication"
ORDER BY items.items')
?>
<form method="post" action="../../include/func.participant.inc.php" onsubmit="refreshAndClose()">
<table>
<tr>
<!--<th></th>--><th>Items</th><th>Y</th><th>N</th><th>?</th><th>Comment</th><th>levels</th>
<?php
while ($row = mysqli_fetch_assoc($result)) {?>
</tr>
<tr>
<td>
<?php echo $row['items'] ?>
</td>
<td>
<input name="items[<?php echo $row['ID']; ?>][yes]" type="checkbox" value="yes" <?php if ($row['yes'] == "yes") echo "checked"; ?>/>
</td>
<td>
<input name="items[<?php echo $row['ID']; ?>][no]" type="checkbox" value="no" <?php if ($row['no'] == "yes") echo "checked"; ?>/>
</td>
<td>
<input name="items[<?php echo $row['ID']; ?>][question]" type="checkbox" value="question" <?php if ($row['question'] == "yes") echo "checked"; ?>/>
</td>
<td>
<textarea name="items[<?php echo $row['ID']; ?>][comment]" rows="1" cols="25" placeholder="comment"><?php echo $comment;?></textarea>
</td>
<td>
<select name="items[<?php echo $row['ID']; ?>][level]">
<option value="">Select...</option>
<option value="1">1. Starter</option>
<option value="2">2. Junior</option>
<option value="3">3. Intermediate</option>
<option value="4">4. Senior</option>
<option value="5">5. Expert</option>
<option value="6">6. Un Known</option>
<option value="7">7. Future</option>
<option value="8">8. Not relefant</option>
</select>
</td>
</tr>
<?php } ?>
</table>
<input type="submit" name="submit" value="Submit">
</form>
$comment = "";
// connect to the database
$result = $conn->query('SELECT participant.ID, items.items, participant.yes, Participant.no, Participant.question, Participant.comment
FROM participant
RIGHT JOIN items ON participant.itemID=items.ID
WHERE items.role="DE" AND items.categorie="Communication"
ORDER BY items.items')
?>
<form method="post" action="../../include/func.participant.inc.php" onsubmit="refreshAndClose()">
<table>
<tr>
<!--<th></th>--><th>Items</th><th>Y</th><th>N</th><th>?</th><th>Comment</th><th>levels</th>
<?php
while ($row = mysqli_fetch_assoc($result)) {?>
</tr>
<tr>
<td>
<?php echo $row['items'] ?>
</td>
<td>
<input name="items[<?php echo $row['ID']; ?>][yes]" type="checkbox" value="yes" <?php if ($row['yes'] == "yes") echo "checked"; ?>/>
</td>
<td>
<input name="items[<?php echo $row['ID']; ?>][no]" type="checkbox" value="no" <?php if ($row['no'] == "yes") echo "checked"; ?>/>
</td>
<td>
<input name="items[<?php echo $row['ID']; ?>][question]" type="checkbox" value="question" <?php if ($row['question'] == "yes") echo "checked"; ?>/>
</td>
<td>
<textarea name="items[<?php echo $row['ID']; ?>][comment]" rows="1" cols="25" placeholder="comment"><?php echo $comment;?></textarea>
</td>
<td>
<select name="items[<?php echo $row['ID']; ?>][level]">
<option value="">Select...</option>
<option value="1">1. Starter</option>
<option value="2">2. Junior</option>
<option value="3">3. Intermediate</option>
<option value="4">4. Senior</option>
<option value="5">5. Expert</option>
<option value="6">6. Un Known</option>
<option value="7">7. Future</option>
<option value="8">8. Not relefant</option>
</select>
</td>
</tr>
<?php } ?>
</table>
<input type="submit" name="submit" value="Submit">
</form>
Gewijzigd op 07/09/2017 14:29:54 door - Ariën -
Is dat wel handig? Wat nu als er per ongeluk nog een participant toegevoegd wordt en jij nog iets wilt koppelen aan de participant die nu net niet meer op de laatste maar op de een na laatste plaats staat?
Ik stel me zo voor dat een participant ook meer dan één interview zou kunnen hebben?
Dus waarom maak je geen pagina met een lijst van participanten met een snelkoppeling "interview toevoegen" waarbij je in de link het ID van die participant meegeeft?
zoiets dus:
participants.php
Code (php)
1
2
2
Jan de Groot<a href="add-interview.php?id=1">Interview toevoegen</a><br>
Piet Kleijn<a href="add-interview.php?id=2">Interview toevoegen</a><br>
Piet Kleijn<a href="add-interview.php?id=2">Interview toevoegen</a><br>
add-interview.php
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
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
<?php
// maak een variabele $id aan en voorzie van een standaard waarde
$id = 0;
// probeer een id uit de url te halen en als dat lukt overschrijf de standaardwaarde van $id
if(isset($_GET['id'])) {
$id = intval($_GET['id']);
}
// Haal de gegevens op van deze participant
$query = 'SELECT * FROM Participant WHERE id='. $id;
// etc
// als de query mislukt dan is er geen informatie gevonden op dit id
$result = $conn->query($query);
if($result === FALSE) {
echo 'Geen informatie gevonden op id ' . $id . '.';
exit;
}
$row = $result->fetch_assoc();
// hier beginnen met het tonen van de participant gegevens en het formulier om een interview toe te voegen
?>
<h1>Interview toevoegen voor <?php echo $row['no']; ?></h1>
<form action="" method="POST">
...
</form>
// maak een variabele $id aan en voorzie van een standaard waarde
$id = 0;
// probeer een id uit de url te halen en als dat lukt overschrijf de standaardwaarde van $id
if(isset($_GET['id'])) {
$id = intval($_GET['id']);
}
// Haal de gegevens op van deze participant
$query = 'SELECT * FROM Participant WHERE id='. $id;
// etc
// als de query mislukt dan is er geen informatie gevonden op dit id
$result = $conn->query($query);
if($result === FALSE) {
echo 'Geen informatie gevonden op id ' . $id . '.';
exit;
}
$row = $result->fetch_assoc();
// hier beginnen met het tonen van de participant gegevens en het formulier om een interview toe te voegen
?>
<h1>Interview toevoegen voor <?php echo $row['no']; ?></h1>
<form action="" method="POST">
...
</form>
Wat betreft de <select>:
Nu geef je iedere keuze een nummer (<option value="2">). Je formulier geeft dan het nummer terug dat in de value attribuut staat. Wij mensen zijn niet zo nummer georiënteerd dus je kan overwegen om die value attribuut weg te laten. dan komt gewoon de tekst terug bij het posten van je formulier (2. Junior).
Gewijzigd op 09/09/2017 13:12:13 door Frank Nietbelangrijk
Dank voor je reactie.
Slim.
Ik heb je pagina's in m'n interview pagina opgenomen. Je hebt me eigenlijk geholpen met m'n volgende stap. Je hebt het interview gehouden en wil er nog e.e.a. aan toevoegen n.a.v. het uitwerken van het interview. Dank daarvoor.
Alleen ik ben nog bezig met het eerste deel. Je hebt net de gegevens van de te interviewen persoon ingevuld en begint nu met het interview. Dan moet het ID van de geïnterviewde aan de in te vullen resultaten gekoppeld worden. En ook de onderwerpen moeten aan de in te vullen resultaten gekoppeld worden.
Ik heb een tabel met onderwerpen.
Ik heb een tabel voor de deelnemers
En ik heb een tabel voor de interview resultaten.
Ik wil dat in de laatste tabel het id van de actuele (of wel de laatste) deelnemer geplaatst wordt en het id van ieder onderwerp dat past bij de resultaten. En die moeten dus uit de betreffende tabellen gehaald worden.
Ik denk dat je op zoek bent naar $conn->insert_id
Voor de goede orde: Het koppelen waar jij over praat gebeurt pas echt zichtbaar bij het ophalen van gegevens met een zo genoemde JOIN. Het wegschrijven van data doe je altijd voor één tabel tegelijk en je levert gewoon de data aan voor iedere kolom van die tabel. Verder hou je rekening met de koppelingen bij het inrichten van je database door te normaliseren.
Jouw database indeling zou er ongeveer zo uit kunnen zien:
DEELNEMERS
- id (integer, autoincrement, primary key)
- naam (varchar 64)
- email (varchar 255)
...
ONDERWERPEN
- id (integer, autoincrement, primary key)
- titel (varchar 64)
- beschrijving (longtext)
...
INTERVIEWS
- id (integer, autoincrement, primary key)
- deelnemer_id (integer, foreign key) *
- onderwerp_id (integer, foreign key) *
VRAGEN
- id (integer, autoincrement, primary key)
- interview_id (integer, foreign key) *
- question (varchar 64)
- answer (longtext)
* dit zijn je koppelingen
Nu ga je eerst een deelnemer aanmaken en dan sla je de gegevens op in de tabel DEELNEMERS. De onderwerpen staan al in je database neem ik even aan. Vervolgens wil je een nieuw interview aanmaken. Om dit te kunnen doen moet je het deelnemer_id en het onderwerp_id weten of laat je deze door de gebruiker kiezen in een select. In ieder geval kun je het id van de zojuist opgeslagen deelnemer opvragen met $conn->insert_id. Dit doe je dan direct achter de INSERT query.
Vraag maar verder als er onduidelijkheden zijn.
een stukje uit add-participant.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// aanmaken nieuw record in DEELNEMERS
$sql = "INSERT INTO deelnemers (naam, email) VALUES ('John', '[email protected]')";
if ($conn->query($sql) === FALSE) {
echo "Error: " . $sql . "<br>" . $conn->error;
exit;
}
// REDIRECT NAAR add-interview.php MET HET ID VAN DE DEELNEMER
header('Location: add-interview.php?pid=' . $conn->insert_id); // pid = participant_id
$conn->close();
exit;
?>
// aanmaken nieuw record in DEELNEMERS
$sql = "INSERT INTO deelnemers (naam, email) VALUES ('John', '[email protected]')";
if ($conn->query($sql) === FALSE) {
echo "Error: " . $sql . "<br>" . $conn->error;
exit;
}
// REDIRECT NAAR add-interview.php MET HET ID VAN DE DEELNEMER
header('Location: add-interview.php?pid=' . $conn->insert_id); // pid = participant_id
$conn->close();
exit;
?>
Gewijzigd op 11/09/2017 09:37:45 door Frank Nietbelangrijk
Ik ga dit in m'n script verwerken. Dank je wel!
Arend-Pieter