naam by id systeem ding
ik ben dus nu bezig met die 'pokemon' site van mijn broertje, en ik kom er alleen nu niet meer uit!
Weet iemand waarom dit niet werkt? (het zet alleen een witte pagina op het scherm (error reporting staat aan)
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
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
<?php
if((isset($_GET['act']) && $_GET['act'] == "mijn")){
$i = 1;
$sql1 = "SELECT p_id FROM ".$_SESSION['user_id']."_pokemon WHERE id = '".$i."'";
$sql2 = "SELECT * FROM pokemon WHERE id = '".$idd."'";
while ($i <= 300) {
$res1 = mysql_query($sql1);
while ($row1 = mysql_fetch_array($res1)) {
$idd = $row1['p_id'];
if (mysql_num_rows($res1) == 0) {
exit();
}
$res = mysql_query($sql2);
$row = mysql_fecth_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">
<a href="index.php?add='.$row['id'].'"><img src="images/add.gif" border="0"></a>
</td>
</tr>';
}
$i++;
}
exit();
}
?>
if((isset($_GET['act']) && $_GET['act'] == "mijn")){
$i = 1;
$sql1 = "SELECT p_id FROM ".$_SESSION['user_id']."_pokemon WHERE id = '".$i."'";
$sql2 = "SELECT * FROM pokemon WHERE id = '".$idd."'";
while ($i <= 300) {
$res1 = mysql_query($sql1);
while ($row1 = mysql_fetch_array($res1)) {
$idd = $row1['p_id'];
if (mysql_num_rows($res1) == 0) {
exit();
}
$res = mysql_query($sql2);
$row = mysql_fecth_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">
<a href="index.php?add='.$row['id'].'"><img src="images/add.gif" border="0"></a>
</td>
</tr>';
}
$i++;
}
exit();
}
?>
MvG,
niek
als ik achter iedere query 'or die(mysql_error())' zet, dan werkt het nog steeds niet...
dan zie ik nog steeds een witte pagina, zonder sql fouten ofzo.
Dit is wat het script moet doen:
het haald een id uit ene tabel (p_id is het id) en zoekt dan in een andere tabel naar dat zelfde id (heet daar id) en echo't dan de gegevens:
id,naam,link,type
Gewijzigd op 01/01/1970 01:00:00 door niek s
Heb je wel een ?act=mijn achter je url staan?
(ik heb bij mijn vorige post er ff bijgezet wat het script moet doen :-p is wel zo handig :-P )
Quote:
$sql1 = "SELECT p_id FROM ".$_SESSION['user_id']."_pokemon WHERE id = '".$i."'";
Begrijp ik het goed dat iedere user (user_id) zijn eigen tabel heeft? Zo ja, dan heb je een ernstige fout in je databasemodel zitten. Ga je dan eens verdiepen in normalisatie.
ja iedere gebruiker heeft zijn eigen tabel.. maar daar gaat het nu niet om(was nie echt een andere oplossing, of het word nog ingewikkelder dan het nu al is, en ik denk dat het dan niet meer mijn niveau is, en ik wil het wel stap voor stap opbouwen)
Maak een koppeltabel. Één tabel waarin je alle pokemons plaats, en iedere pokemon heeft een id. Één tabel met daarin je gebruiker, en iedere gebruiker heeft een id. Vervolgens een kopeltabel met 2 foreign keys (eg, de verwijzingen dus).
daarin staan de pokemons van de gebruiker, met hun level, kracht enz.
In de gebruikerstabel horen dingen als emailadres en wachtwoorden enzo. In die kopeltabel past ook prima gegevens over hun level/kracht/etc.
hmm, maar er is geen mogelijkheid om het op deze manier nog te fixen? (want ik heb een systeem van pakweg 500 regels, en da is veel werk om allemaal weer aan te passen)
1 tabel users
1 tabel pokemons
1 tabel poke levels
1 tabel krachten
en dan 1 koppeltabel userid, pokeid, levelid en kracht id
zoals Arjan reeds gezegd had
Quote:
Dat is een klein systeempje waar je nu een kapitale fout in hebt zitten. Natuurlijk mag je verder bouwen op drijfzand, maar je weet nu al dat je vroeg of laat hopeloos in de problemen gaat komen. een systeem van pakweg 500 regels
De database is de kern van het systeem, als dan het datamodel niet goed is, heb je een probleem dat je z.s.m. moet oplossen. Verder bouwen is zinloos.
maar wat is dan het nadeel van deze manier?
http://www.phphulp.nl/php/tutorials/3/150/
Dan zul je zelf ontdekken wat er fout is aan je huidige model.
Ga maar eens aan de slag met dit artikel: Dan zul je zelf ontdekken wat er fout is aan je huidige model.
Maar is er geen mogelijkheid om het te fixen zoals het nu is? zonder dat ik dat moet doen? dan maak ik namelijk alls alles goed werkt wel ff een testsite, en daar normaliseer ik dan de hele boel, dan kan ik het dan in een keer omklappen... Ik heb nu namelijk niet meer zo heel veel tijd meer...
Begin eens om exit() er uit te gooien en dit te vervangen door een keurige foutmelding. Vervolgens ga je na iedere if ook een else neerzetten. Hier produceer je wat output, een echo, zodat je weet waar je in het script bent gebleven.
Maar ga gooi jouw database is vredesnaam z.s.m. weg en ga iets beters maken. Dit gaat je nog heel veel problemen opleveren.
En 500 regels code, dat is echt helemaal niets. Meestal bestaat alleen de foutafhandeling al uit meer regels... Een opmerking als
Quote:
geeft ook aan dat er nog hele stukken script ontbreken. Dit had namelijk niet eens mogen ontbreken! (of een variant hierop, maar in elk geval iets van foutafhandeling)als ik achter iedere query 'or die(mysql_error())' zet
Maar ik krijg niks op het scherm, ook niet een foutmelding, maar ook niet het script-deel dat hiervoor komt! (error_reporting staat aan (E_ALL))...
Normaal zou er nog een tabel boven moeten staan, maar dat doet ie nu ook niet, dat betekent dus dat er iets fout is met het script waardoor ie het niet kan runnen, het moet dit scriipt wel zijn, maar ik kmo er niet uit.
Ik ga het dusnu proberen te fixen, als het werkt, dan ga ik op localhost het 'normaliseren' en het dan in een klap uploaden zonder dat iemand er last van heeft gehad..
MvG,
Niekk
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
if (isset($_GET['pokemon'])) {
echo '<tr><td class="cellborder" align="center">';
$q1 = "SELECT pokemon FROM login WHERE id = '".$_SESSION['user_id']."'";
$r1 = mysql_query($q1) or die(mysql_error());
while ($row1 = mysql_fetch_array($r1)) {
$id = $row1['pokemon'];
}
$ids = explode(",",$id);
$q2 = "SELECT naam FROM pokemon WHERE id = '".$_GET['pokemon']."'";
$r2 = mysql_query($q2) or die(mysql_error());
while ($row2 = mysql_fetch_array($r2)) {
echo "<h2>".$row2['naam']."</h2>";
}
foreach($ids as $_GET['pokemon']) {
$q3 = "SELECT level FROM login WHERE id = '".$_SESSION['user_id']."'";
$r3 = mysql_query($q3) or die(mysql_error());
while ($row3 = mysql_fetch_array($r3)) {
echo "level";
}
}
echo '</td></tr>';
exit();
}
?>
if (isset($_GET['pokemon'])) {
echo '<tr><td class="cellborder" align="center">';
$q1 = "SELECT pokemon FROM login WHERE id = '".$_SESSION['user_id']."'";
$r1 = mysql_query($q1) or die(mysql_error());
while ($row1 = mysql_fetch_array($r1)) {
$id = $row1['pokemon'];
}
$ids = explode(",",$id);
$q2 = "SELECT naam FROM pokemon WHERE id = '".$_GET['pokemon']."'";
$r2 = mysql_query($q2) or die(mysql_error());
while ($row2 = mysql_fetch_array($r2)) {
echo "<h2>".$row2['naam']."</h2>";
}
foreach($ids as $_GET['pokemon']) {
$q3 = "SELECT level FROM login WHERE id = '".$_SESSION['user_id']."'";
$r3 = mysql_query($q3) or die(mysql_error());
while ($row3 = mysql_fetch_array($r3)) {
echo "level";
}
}
echo '</td></tr>';
exit();
}
?>
Dat is wat ik nu heb, in de tabel 'login' staan alle gebruikers, in de tabel 'pokemon' staan alle pokemons.
in de tabel login staan de pokemon van de gebruiker op deze manier opgeslagen, op id: 12,53,147 enz.
Maar ik heb daar ook een veld 'level' bv: 45,3,88
eerste level hoort bij eerste pokemon enz. maar ik kom er aleen nu niet meer uit, wat het script moet doen is dus de pokemon die met GET gegeven is (pagina.php?pokemon=12 bijvoorbeeld). die pokemon moet worden gezocht in de db, en dan ge-echo't worden met level.
Dit is dus wat ik tot nu toe heb, en ik kom er niet meer uit. (wat het nu o phet scherm zet is de naam van de pokemon, en daaronder (bij iedere pokemon!)
levellevel (2 keer dus...)
Gewijzigd op 01/01/1970 01:00:00 door niek s
Quote:
Ik krijg de indruk dat het allemaal iets te hoog gegrepen is. In 1 record mag slechts 1 gegeven staan. Daar kan dus nooit 12, 53 en 147 in staan. Dit hadden 3 records moeten zijn.in de tabel login staan de pokemon van de gebruiker op deze manier opgeslagen, op id: 12,53,147 enz.
Maar ik heb daar ook een veld 'level' bv: 45,3,88
Maar ik heb daar ook een veld 'level' bv: 45,3,88
Ik kan je dus niets anders aanraden dan de boel te vergeten en opnieuw te beginnen. Ga je eens verdiepen in normalisatie en hoe je databases moet gebruiken. Dat is niet eenvoudig, maar altijd nog eenvoudiger dan met allerlei lapmiddelen de boel die je nu hebt aan de praat krijgen. (en onderhouden...)
id | pokemon_id | user_id | level
?
:)