naam by id systeem ding
dat komt beter in de buurt
het maakt voor mysql niet uit of er veel tabellen en veel records zijn
ok, dan doe ik het zo :-)
niek:
dus ik moet een soort tabel hebben met dit:
id | pokemon_id | user_id | level
?
id | pokemon_id | user_id | level
?
ja
en daar kun je alle andere gegevens over de pokemons plaatsen
Wanneer je begint te normaliseren, ga dan vooral NIET in tabellen denken. Welke tabellen je nodig hebt en hoe deze er uit komen te zien, dat blijkt pas aan het einde van het hele normalisatie-proces. Denken in tabellen leidt alleen maar af en vergroot de kans op fouten in het datamodel. En dat wil je juist voorkomen...
Tip: Gebruik straks de innoDB-database engine en niet de standaard MyIsam-engine. Dan kun je ook gebruik maken van foreign keys (FK). Hiermee wordt de database een stukje robuster. Het gebruik van FK's wordt ook in het artikel over normalisatie uitgelegd.
Maar ik zit nu alleen met dit probleem, en ik dacht. hoef ik niet echt een nieuw topic voor te openen...
Dit script moet alle rows uit pokemon halen die als id hetzelfde hebben als p_id in user_pokemon.. het enige probleem: 'het zet ALLE pokemon op het scherm :-('
weet iemand de oplossing? ( die while loop was meer een experimentje, maar het werkt niet helemaal blijkbaar :p)
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
if(isset($_GET['act']) && $_GET['act'] == "mijn") {
$res = mysql_query("SELECT p_id FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' ORDER BY id") or die(mysql_error());
$res2 = mysql_query("SELECT * FROM pokemon WHERE id = '".$roww['p_id']."'") or die(mysql_error());
while($roww = mysql_fetch_assoc($res) && $row = mysql_fetch_array($res2)){
echo '<tr>
<td class="rij">
'.$row['id'].'
</td>
<td class="rij">
<a href="'.$row['link'].'">'.$row['naam'].'</a>
</td>
<td class="rij">
'.$row['type'].'
</td>
<td align="center" valign="middle" class="rij">';
$sql2 = "SELECT * FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' AND p_id = '".$row['id']."'";
$res2 = mysql_query($sql2);
if (mysql_num_rows($res2) == 0) {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/kruis.gif" border="0"></a>';
} else {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/vinkje.gif" border="0"></a>';
}
echo '
</td>
</tr>';
}
}
?>
if(isset($_GET['act']) && $_GET['act'] == "mijn") {
$res = mysql_query("SELECT p_id FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' ORDER BY id") or die(mysql_error());
$res2 = mysql_query("SELECT * FROM pokemon WHERE id = '".$roww['p_id']."'") or die(mysql_error());
while($roww = mysql_fetch_assoc($res) && $row = mysql_fetch_array($res2)){
echo '<tr>
<td class="rij">
'.$row['id'].'
</td>
<td class="rij">
<a href="'.$row['link'].'">'.$row['naam'].'</a>
</td>
<td class="rij">
'.$row['type'].'
</td>
<td align="center" valign="middle" class="rij">';
$sql2 = "SELECT * FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' AND p_id = '".$row['id']."'";
$res2 = mysql_query($sql2);
if (mysql_num_rows($res2) == 0) {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/kruis.gif" border="0"></a>';
} else {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/vinkje.gif" border="0"></a>';
}
echo '
</td>
</tr>';
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$login_sql = 'SELECT veld FROM tabel';
$login_res = mysql_query($login_sql,$link);
$zoek_sql = 'SELECT veld FROM tabel WHERE veld LIKE waarde';
$zoek_res = mysql_query($zoek_sql,$link);
?>
$login_sql = 'SELECT veld FROM tabel';
$login_res = mysql_query($login_sql,$link);
$zoek_sql = 'SELECT veld FROM tabel WHERE veld LIKE waarde';
$zoek_res = mysql_query($zoek_sql,$link);
?>
etcetc
als jij nu 9 querys hebt lopen en ze heten allemaal $sql## , moet je eerst zoeken wat gebeurd daar eigenlijk, terwijl je dit met logische naamgeven ook logisch kan terugvinden
(ik weet het, het is raar, maar toch: ) ja dat doe ik ook meestal wel, maar pas als het HELE script klaar is, dan loop ik ALLE php zooi nog eens langs, en hernoem ik de query namen enz.
beetje dubbelop :) als je alles moet renamen vergeet je altijd wel iets, en zoek daan maar waar het zit dat je script niet werkt :)
Dan het probleem:
$res = mysql_query("SELECT p_id FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' ORDER BY id") or die(mysql_error());
$res2 = mysql_query("SELECT * FROM pokemon WHERE id = '".$roww['p_id']."'") or die(mysql_error());
Dit gaat niet werken, in $res2 roep je $roww['p_id'] aan die helemaal niet bestaat. Die wordt pas in de while-lus (op de volgende regel) aangemaakt.
(heb al verschillende dingen geprobeerd..)
Nog een voorbeeld van niet al te fraai programeren:
Waarom zowel mysql_fetch_assoc() als mysql_fetch_array() gebruiken? Wees concequent en maak duidelijke keuzes en hou je hieraan.
Hoe de boel aan de praat moet krijgen? Maak eerst eens een goed ontwerp en vraag je iedere keer af welke informatie je nodig hebt, waar je al over beschikt, etc. etc. Werk het eerst eens uit op papier en ga niet te snel programeren. Dat wordt geen succes, dat blijkt wel.
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
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
<?
$user_sql = 'SELECT username,id FROM users WHERE status = "1"';
$user_res = mysql_query($user_sql,$link);
if ($user_res && mysql_num_rows($user_res) >= 1)
{
while($user_row = mysql_fetch_array($user_res))
{
$poke_sql = 'SELECT pokemon,typ FROM tabel WHERE user = "'.$user_row['username'].'"';
$poke_res = mysql_query($poke_sql,$link);
if ($poke_res && mysql_num_rows($poke_res) >= 1)
{
while ($poke_row = mysql_fetch_array($poke_res))
{
echo 'User: '.$user_row['username'].' heeft pokémon: '.$poke_row['pokemon'].' van het type: '.$poke_row['typ'].'<br>';
}
} else {
echo 'User: '.$user_row['username'].' heeft geen pokémons!<br>';
}
}
} else {
echo 'Geen users gevonden!';
}
?>
$user_sql = 'SELECT username,id FROM users WHERE status = "1"';
$user_res = mysql_query($user_sql,$link);
if ($user_res && mysql_num_rows($user_res) >= 1)
{
while($user_row = mysql_fetch_array($user_res))
{
$poke_sql = 'SELECT pokemon,typ FROM tabel WHERE user = "'.$user_row['username'].'"';
$poke_res = mysql_query($poke_sql,$link);
if ($poke_res && mysql_num_rows($poke_res) >= 1)
{
while ($poke_row = mysql_fetch_array($poke_res))
{
echo 'User: '.$user_row['username'].' heeft pokémon: '.$poke_row['pokemon'].' van het type: '.$poke_row['typ'].'<br>';
}
} else {
echo 'User: '.$user_row['username'].' heeft geen pokémons!<br>';
}
}
} else {
echo 'Geen users gevonden!';
}
?>
dit kan ook in 1 query btw, maar zo het antwoord op je vraag, typos onder voorbehoud
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
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
<?php
if(isset($_GET['act']) && $_GET['act'] == "mijn") {
$user_sql = 'SELECT p_id FROM user_pokemon WHERE u_id = "'.$_SESSION['user_id'].'"';
$user_res = mysql_query($user_sql);
if ($user_res && mysql_num_rows($user_res) >= 1) {
while($user_row = mysql_fetch_array($user_res)) {
$poke_sql = 'SELECT * FROM pokemon WHERE id = "'.$user_row['p_id'].'"';
$poke_res = mysql_query($poke_sql);
if ($poke_res && mysql_num_rows($poke_res) >= 1) {
while ($poke_row = mysql_fetch_array($poke_res)) {
echo '<tr>
<td class="rij">
'.$row['id'].'
</td>
<td class="rij">
<a href="'.$row['link'].'">'.$row['naam'].'</a>
</td>
<td class="rij">
'.$row['type'].'
</td>
<td align="center" valign="middle" class="rij">';
$sql2 = "SELECT * FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' AND p_id = '".$row['id']."'";
$res2 = mysql_query($sql2);
if (mysql_num_rows($res2) == 0) {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/kruis.gif" border="0"></a>';
} else {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/vinkje.gif" border="0"></a>';
}
echo '
</td>
</tr>';
}
} else {
echo 'geen prokemons...';
}
}
} else {
echo 'Er is een fout... Je user kon niet gevonden worden!';
}
}
?>
if(isset($_GET['act']) && $_GET['act'] == "mijn") {
$user_sql = 'SELECT p_id FROM user_pokemon WHERE u_id = "'.$_SESSION['user_id'].'"';
$user_res = mysql_query($user_sql);
if ($user_res && mysql_num_rows($user_res) >= 1) {
while($user_row = mysql_fetch_array($user_res)) {
$poke_sql = 'SELECT * FROM pokemon WHERE id = "'.$user_row['p_id'].'"';
$poke_res = mysql_query($poke_sql);
if ($poke_res && mysql_num_rows($poke_res) >= 1) {
while ($poke_row = mysql_fetch_array($poke_res)) {
echo '<tr>
<td class="rij">
'.$row['id'].'
</td>
<td class="rij">
<a href="'.$row['link'].'">'.$row['naam'].'</a>
</td>
<td class="rij">
'.$row['type'].'
</td>
<td align="center" valign="middle" class="rij">';
$sql2 = "SELECT * FROM user_pokemon WHERE u_id = '".$_SESSION['user_id']."' AND p_id = '".$row['id']."'";
$res2 = mysql_query($sql2);
if (mysql_num_rows($res2) == 0) {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/kruis.gif" border="0"></a>';
} else {
echo '<a href="index.php?da='.$row['id'].'"><img src="images/vinkje.gif" border="0"></a>';
}
echo '
</td>
</tr>';
}
} else {
echo 'geen prokemons...';
}
}
} else {
echo 'Er is een fout... Je user kon niet gevonden worden!';
}
}
?>
maar wat het doet:
het laat 2 lege tabel_regels zien, en dan laat ie ALLE pokemons zien in de database, ook de pokemons die niet van mij zijn!?
echo '<tr>
<td class="rij">
'.$row['id'].
dat moet je wel even goed aanpassen!
edit: overal in je script!
Gewijzigd op 01/01/1970 01:00:00 door - wes -
wat stom van mij...
sorry..
ik ben scheel..