uit datbase checked of niet
Ik heb een script waarmee ik via een checkboxen endergelijke dingen de database zet. Nou wil ik het er ook weer uit halen, een bewerk scriptje dus. Ik ben er net achter gekomen dat je een checkbox kunt checken door dit erin te zetten: CHECKED.
Nou dacht ik, dat is dan redelijk simpel om via de database dat te doen, maar helaas. Het lukte me niet :(
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
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
<?php
include('../connect.php');
$query = "SELECT * FROM portfolio_gemaakt WHERE portfolio_id= 38";
if(!$res = mysql_query($query))
{
trigger_error(mysql_error().'<br />In query: '.$query);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Item is niet gevonden in database';
}
else
{
if(techniek_id == 1){
echo 'ja, hij moet aangevinkt zijn';
}
else {
echo 'nope, niet aangevinkt';
}
}
?>
include('../connect.php');
$query = "SELECT * FROM portfolio_gemaakt WHERE portfolio_id= 38";
if(!$res = mysql_query($query))
{
trigger_error(mysql_error().'<br />In query: '.$query);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Item is niet gevonden in database';
}
else
{
if(techniek_id == 1){
echo 'ja, hij moet aangevinkt zijn';
}
else {
echo 'nope, niet aangevinkt';
}
}
?>
Zoiets had ik in gedachten, techniek_id is een tabelnaam.
En ik heb maar even een zinnetje erneer gezet ipv dit:
<input type="checkbox" name="techniek[]" value="1" CHECKED />
Maar dit werkt niet echt, weet iemand hoe ik dit wel goed kan doe of zit ik gewoon helemaal in de verkeerde richting om mijn doel te berijken?
en je fetcht nergens je resultaat van je query, je kan dus nog niet je datag ebruiken wat je nu wel op een verkeerde manier probeert te doen.
Ik heb die handleiding even bekeken, maar helaas staat er wat ik wil niet echt in. Ik heb ook op google nog gezocht, helaas geen resultaten geboekt daardoor. Maar voordat ik verder ga, is dit wel de slimste manier om dit te doen wat ik wil ? Zo nee, wat is dan een slimmere manier?
Je vergeet het resultaat van de query te fetchen...
Maar dit zal dus wel betekenen dat dit de beste manier is om mijn doel te berijken :P ?
Fetchen heeft niets met een while te maken. Een while gebruik je alleen als je meerdere records verwacht op te halen.
query opstellen ($sql = " ...")
query uitvoeren ($res = mysq_query($sql))
controleren of het gelukt is
zodra het gelukt is fetchen ($row = mysql_fetch_assoc($res))
daarna gaan vergelijken.
Ik mis dus wat logica in jou script hier
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
include('../connect.php');
$query = "SELECT * FROM portfolio_gemaakt WHERE portfolio_id= 38";
if(!$res = mysql_query($query))
{
trigger_error(mysql_error().'<br />In query: '.$query);
}
else
{
if($row = mysql_fetch_assoc($res)){
if(techniek_id == 1){
echo 'ja, hij moet aangevinkt zijn';
}
else {
echo 'nope, niet aangevinkt';
}
}
}
?>
include('../connect.php');
$query = "SELECT * FROM portfolio_gemaakt WHERE portfolio_id= 38";
if(!$res = mysql_query($query))
{
trigger_error(mysql_error().'<br />In query: '.$query);
}
else
{
if($row = mysql_fetch_assoc($res)){
if(techniek_id == 1){
echo 'ja, hij moet aangevinkt zijn';
}
else {
echo 'nope, niet aangevinkt';
}
}
}
?>
Ik kreeg eerst deze error:
Dus hij kent techniek_id niet, dus dat heb ik opgelost door dit ervan te maken:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php // kleurtjes
// code ..
$techniek = $row[2];
if($techniek == 4){ // nummer 4 omdat dit nummer daar ook echt in staat
//code ..
?>
// code ..
$techniek = $row[2];
if($techniek == 4){ // nummer 4 omdat dit nummer daar ook echt in staat
//code ..
?>
En nu krijg ik de error:
Er is dus iets mis met:
$techniek = $row[2];
Maar ik weet niet hoe ik dit moet oplossen ...
Script wat ik nu heb:
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
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
error_reporting(E_ALL);
ini_set("display_errors", 1);
include('../connect.php');
$query = "SELECT * FROM portfolio_gemaakt WHERE portfolio_id= 38";
if(!$res = mysql_query($query))
{
trigger_error(mysql_error().'<br />In query: '.$query);
}
else
{
if($row = mysql_fetch_assoc($res)){
$techniek = $row[2];
if($techniek == 7){
echo 'ja, hij moet aangevinkt zijn';
}
else {
echo 'nope, niet aangevinkt';
}
}
}
?>
error_reporting(E_ALL);
ini_set("display_errors", 1);
include('../connect.php');
$query = "SELECT * FROM portfolio_gemaakt WHERE portfolio_id= 38";
if(!$res = mysql_query($query))
{
trigger_error(mysql_error().'<br />In query: '.$query);
}
else
{
if($row = mysql_fetch_assoc($res)){
$techniek = $row[2];
if($techniek == 7){
echo 'ja, hij moet aangevinkt zijn';
}
else {
echo 'nope, niet aangevinkt';
}
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door J A
De naam techniek_id is wat vreemd, zeker met een hardcoded 1 in je php-code. De 1 kan zo maar een 278494 of 1744595 zijn, dat kun je onmogelijk weten in je php-code. Hier zit dus een grote fout in de logica, jouw php-code mag niet afhankelijk zijn dynamische data in je database. (enkele uitzondering daargelaten)
$row['techniek_id'] zal jouw huidige probleem waarschijnlijk oplossen, het verbetert echter helemaal niks aan de logica.
$techniek = $row[2];
if($techniek == 7){
vervangen door
if($row['techniek_id'] == 7){
Quote:
Wanneer je techniek_id wilt ophalen, waarom vraag je dan alles op in de query? Dat maakt de boel onnodig langzaam.
Veranderd, het is nu:
Oftewel, het kan dus niet werken, omdat die nummers overal voor kunnen staan. Het werkt dus helaas ook niet :(
Maar het moet wel een nummer zijn, want het is een koppeltabel tussen 2 andere tabellen. Waarbij hij de id's dus bij elkaar haald.
Zo ziet de tabel eruit, id heeft er niets mee te maken! de rest wel.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
id | portfolio_id | techniek_id
--------------------------------
118 | 38 | 1
119 | 38 | 2
120 | 38 | 3
121 | 38 | 4
122 | 38 | 5
123 | 38 | 6
--------------------------------
118 | 38 | 1
119 | 38 | 2
120 | 38 | 3
121 | 38 | 4
122 | 38 | 5
123 | 38 | 6
Edit:
@Santhe, ik heb het veranderd, maar als het nummer 1 daar voorkomt, dan geeft hij aan dat het er niet in zit. Terwijl dat er toch zeker wel inzit.
Gewijzigd op 01/01/1970 01:00:00 door J A
Wat is nu je doel? Ik krijg de indruk dat je 1 query nodig hebt die een JOIN legt tussen zowel de tabel portfolio als de tabel techniek om zo te bepalen wat is aangevinkt en wat niet. Wanneer dat het geval is, kunnen jouw vergelijkingen in PHP zo richting schroothoop, de oplossing moet je zoeken in SQL.
Je haalt maar 1 resultaat op en dat zal waarschijnlijk het eerste record zijn. Ik snap ook je hele bedoeling niet.
In de tabel staat portfolio_id en techniek_id. Dit is een koppeltabel tussen 2 andere tabellen die ik nodig had bij het toevoegen script. Om het goed te laten werken, omdat het om checkboxen gaat. Nu wil ik dus het bewerk script maken. Ik wil dus als ik naar de bewerk pagina ga voor een portfolio item. Dat de goede checkboxen zijn aangevinkt die al aangevinkt zijn tijdens het toevoegen.
Dus als ik het portfolio item id 38 wil veranderen. Moet hij dus kijken in de tabel die ik heb laten zien (genaamd: portfolio_gemaakt) op het portfolio_id 38. Daarnaast staat techniek_id, elk nummer heeft in een andere tabel zijn eigen eigenschap. (1 = PSD, 2 = HTML, 3 = CSS enz.)
Dus hij moet kijken bij portfolio_id 38 en kijken welke techniek_id's daarbij horen. Die techniek_id's komen dan weer overeen de value van het formpje:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<input type="checkbox" name="techniek[]" value="1" /> PSD <br />
<input type="checkbox" name="techniek[]" value="2" /> HTML <br />
<input type="checkbox" name="techniek[]" value="3" /> CSS <br />
<input type="checkbox" name="techniek[]" value="4" /> JavaScript <br />
<input type="checkbox" name="techniek[]" value="5" /> Flash <br />
<input type="checkbox" name="techniek[]" value="6" /> PHP
<input type="checkbox" name="techniek[]" value="2" /> HTML <br />
<input type="checkbox" name="techniek[]" value="3" /> CSS <br />
<input type="checkbox" name="techniek[]" value="4" /> JavaScript <br />
<input type="checkbox" name="techniek[]" value="5" /> Flash <br />
<input type="checkbox" name="techniek[]" value="6" /> PHP
Dus:
Bijv.: Bij toevoegen vink ik alleen de 1e aan, PSD. Die komt in de database bij portfolio_gemaakt als:
Code (php)
1
2
3
2
3
id = kan alles zijn
portfolio_id = komt overeen met het id van de tabel portfolio
techniek_id = komt overeen met het id van de tabel techniek
portfolio_id = komt overeen met het id van de tabel portfolio
techniek_id = komt overeen met het id van de tabel techniek
Dan wil ik het bewerken met een scriptje. Dan krijg ik dus weer dat formpje met die checkboxen. Nou moet dus de 1e (PSD) aangevinkt zijn!
Ik hoop nu dat jullie het snappen wat ik wil :)
Bij het samenstellen van de select-box (de options) zul je dus of het id van het record in de value moeten zetten, of gewoon de tekst (bv. PSD). Dan kun je later ook eenvoudig een vergelijking maken.
Hmm.. dat lijkt mij niet handig, omdat dan de rest van de scripts niet meer werken. Is er nog een andere optie om dit goed te doen?
Hoezo niet handig? Dat is juist handig! Als je een nieuwe techniek toevoegt aan de database komt hij op die manier direct in je keuzelijst te staan, je hoeft de PHP code dus niet meer aan te passen. Je bent toch bezig met het bouwen van een dynamische website?
Jordi schreef op 19.02.2008 19:44:
Niet handig? Of blijkt nu dat er ontwerpfouten in je systeem zitten? Hoe denk jij een nieuwe optie toe te voegen aan de database? Dat gaat je niet lukken zonder ook jouw php-code aan te passen. Dat is toch niet echt wat men verstaat onder een dynamische website, of wel dan?Hmm.. dat lijkt mij niet handig, omdat dan de rest van de scripts niet meer werken. Is er nog een andere optie om dit goed te doen?