mysql error
Duplicate entry '0' for key 'PRIMARY'
bij deze code, hoe los ik dit op?
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
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
<?php
session_start();
include("functions.php");
connect();
include("safe.php");
if(isset($_GET[kl])) {
$kl=protect($_GET['kl']);
$inv23=mysql_query("SELECT * FROM klik WHERE afbid='$kl' and '".$_SESSION['uid']."'=gebr") or die(mysql_error());
if (mysql_num_rows($inv23) > 0) {
echo ('Je hebt deze banner al geklikt in de laatste 24 uur, probeer een andere banner om kans te maken op de prijs.');
}
else {
$inv29=mysql_query("SELECT * FROM admin") or die(mysql_error());
$row29 = mysql_fetch_array($inv29);
$totkliks=$row29['kliks']+1;
$inv30=mysql_query("UPDATE admin SET kliks='$totkliks'") or die(mysql_error());
$inv1=mysql_query("SELECT * FROM klikenwin WHERE id='$kl'") or die(mysql_error());
$row1 = mysql_fetch_array($inv1);
$gehad=$row1['kliks']+1;
$inv2=mysql_query("UPDATE klikenwin SET kliks='$gehad' WHERE id='$kl'") or die(mysql_error());
$tijd=time();
$inv9=mysql_query("INSERT INTO klik (afbid, gebr, tijd) VALUES ('$kl', '".$_SESSION['uid']."', '$tijd')") or die(mysql_error());
$boodschap="U heeft helaas niet gewonnen, klik op een andere banner om nogmaals kans te maken.";
if ($totkliks==$row29['aantalkliks']) {
$boodschap="Proficiat, u hebt gewonnen! De prijs werd aan uw saldo toegevoegd.";
$inv17=mysql_query("UPDATE admin SET kliks=0") or die(mysql_error());
$inv3=mysql_query("SELECT * FROM cred WHERE id='".$gebr['id']."'") or die(mysql_error());
$row3=mysql_fetch_array($inv3);
$verd=$row3['saldo']+$row29['beloning'];
$klikopbr=$row3['klikenwin']+$row29['beloning'];
$tot=$row3['totaal']+$row29['beloning'];
$inv4=mysql_query("UPDATE cred SET saldo='$verd', totaal='$tot', klikenwin='$klikopbr' WHERE id='".$gebr['id']."'") or die(mysql_error());
$inv11=mysql_query("SELECT * FROM gebr WHERE id='".$gebr['id']."'") or die(mysql_error());
$row11=mysql_fetch_array($inv11);
$inv17=mysql_query("INSERT INTO winnaars (datum, naam) VALUES ('$tijd', '".$row11['voornaam']."')") or die(mysql_error());
$inv12=mysql_query("SELECT * FROM cred WHERE id='".$row11['ref1']."'") or die(mysql_error());
$row12=mysql_fetch_array($inv12);
$refsaldo1=$row12['saldo']+$row29['beloning']/10;
$refopbr1=$row12['refopbrengst']+$row29['beloning']/10;
$reftot1=$row12['totaal']+$row29['beloning']/10;
$inv13=mysql_query("SELECT * FROM gebr WHERE id='".$gebr['id']."'") or die(mysql_error());
$row13=mysql_fetch_array($inv11);
$inv14=mysql_query("SELECT * FROM cred WHERE id='".$row13['ref2']."'") or die(mysql_error());
$row14=mysql_fetch_array($inv14);
$refsaldo2=$row14['saldo']+$row29['beloning']/20;
$refopbr2=$row14['refopbrengst']+$row29['beloning']/20;
$reftot2=$row14['totaal']+$row29['beloning']/20;
$inv15=mysql_query("UPDATE cred SET saldo='$refsaldo1', totaal='$reftot1', refopbrengst='$refopbr1' WHERE id='".$row11['ref1']."'") or die(mysql_error());
$inv16=mysql_query("UPDATE cred SET saldo='$refsaldo2', totaal='$reftot2', refopbrengst='$refopbr2' WHERE id='".$row13['ref2']."'") or die(mysql_error());
}
$url=$row1['url'];
echo ("<center>$boodschap</center><br/><iframe src=\"$url\" seamless height=\"100%\" width=\"100%\">");
}
}
?>
session_start();
include("functions.php");
connect();
include("safe.php");
if(isset($_GET[kl])) {
$kl=protect($_GET['kl']);
$inv23=mysql_query("SELECT * FROM klik WHERE afbid='$kl' and '".$_SESSION['uid']."'=gebr") or die(mysql_error());
if (mysql_num_rows($inv23) > 0) {
echo ('Je hebt deze banner al geklikt in de laatste 24 uur, probeer een andere banner om kans te maken op de prijs.');
}
else {
$inv29=mysql_query("SELECT * FROM admin") or die(mysql_error());
$row29 = mysql_fetch_array($inv29);
$totkliks=$row29['kliks']+1;
$inv30=mysql_query("UPDATE admin SET kliks='$totkliks'") or die(mysql_error());
$inv1=mysql_query("SELECT * FROM klikenwin WHERE id='$kl'") or die(mysql_error());
$row1 = mysql_fetch_array($inv1);
$gehad=$row1['kliks']+1;
$inv2=mysql_query("UPDATE klikenwin SET kliks='$gehad' WHERE id='$kl'") or die(mysql_error());
$tijd=time();
$inv9=mysql_query("INSERT INTO klik (afbid, gebr, tijd) VALUES ('$kl', '".$_SESSION['uid']."', '$tijd')") or die(mysql_error());
$boodschap="U heeft helaas niet gewonnen, klik op een andere banner om nogmaals kans te maken.";
if ($totkliks==$row29['aantalkliks']) {
$boodschap="Proficiat, u hebt gewonnen! De prijs werd aan uw saldo toegevoegd.";
$inv17=mysql_query("UPDATE admin SET kliks=0") or die(mysql_error());
$inv3=mysql_query("SELECT * FROM cred WHERE id='".$gebr['id']."'") or die(mysql_error());
$row3=mysql_fetch_array($inv3);
$verd=$row3['saldo']+$row29['beloning'];
$klikopbr=$row3['klikenwin']+$row29['beloning'];
$tot=$row3['totaal']+$row29['beloning'];
$inv4=mysql_query("UPDATE cred SET saldo='$verd', totaal='$tot', klikenwin='$klikopbr' WHERE id='".$gebr['id']."'") or die(mysql_error());
$inv11=mysql_query("SELECT * FROM gebr WHERE id='".$gebr['id']."'") or die(mysql_error());
$row11=mysql_fetch_array($inv11);
$inv17=mysql_query("INSERT INTO winnaars (datum, naam) VALUES ('$tijd', '".$row11['voornaam']."')") or die(mysql_error());
$inv12=mysql_query("SELECT * FROM cred WHERE id='".$row11['ref1']."'") or die(mysql_error());
$row12=mysql_fetch_array($inv12);
$refsaldo1=$row12['saldo']+$row29['beloning']/10;
$refopbr1=$row12['refopbrengst']+$row29['beloning']/10;
$reftot1=$row12['totaal']+$row29['beloning']/10;
$inv13=mysql_query("SELECT * FROM gebr WHERE id='".$gebr['id']."'") or die(mysql_error());
$row13=mysql_fetch_array($inv11);
$inv14=mysql_query("SELECT * FROM cred WHERE id='".$row13['ref2']."'") or die(mysql_error());
$row14=mysql_fetch_array($inv14);
$refsaldo2=$row14['saldo']+$row29['beloning']/20;
$refopbr2=$row14['refopbrengst']+$row29['beloning']/20;
$reftot2=$row14['totaal']+$row29['beloning']/20;
$inv15=mysql_query("UPDATE cred SET saldo='$refsaldo1', totaal='$reftot1', refopbrengst='$refopbr1' WHERE id='".$row11['ref1']."'") or die(mysql_error());
$inv16=mysql_query("UPDATE cred SET saldo='$refsaldo2', totaal='$reftot2', refopbrengst='$refopbr2' WHERE id='".$row13['ref2']."'") or die(mysql_error());
}
$url=$row1['url'];
echo ("<center>$boodschap</center><br/><iframe src=\"$url\" seamless height=\"100%\" width=\"100%\">");
}
}
?>
Toevoeging op 13/04/2013 23:42:44:
Wat wil die error eigenlijk zeggen?
Gewijzigd op 13/04/2013 23:46:00 door Louis Deconinck
Laat je databasestructuur eens zien?
1 id int(11) Nee Geen AUTO_INCREMENT
2 afbeelding varchar(1000) latin1_swedish_ci Nee Geen
3 url varchar(1000) latin1_swedish_ci Nee Geen
4 kliks int(11) Nee Geen
Maar de error zegt dat je een 0 (nul) wil zetten in het veld met de primary key (waarschijnlijk dus het auto increment veld).
$inv23=mysql_query("SELECT * FROM klik WHERE afbid='".$kl."' and gebr = '".$_SESSION['uid']."'") or die(mysql_error());
Php knipper op 14/04/2013 01:29:45:
verander rij 8 eens naar
$inv23=mysql_query("SELECT * FROM klik WHERE afbid='".$kl."' and gebr = '".$_SESSION['uid']."'") or die(mysql_error());
$inv23=mysql_query("SELECT * FROM klik WHERE afbid='".$kl."' and gebr = '".$_SESSION['uid']."'") or die(mysql_error());
De fout gaat over een dubbele key, dat wil dus zeggen een insert of update die een veld een waarde geeft die al bestaat. Het veranderen van een select statement zal daar niets bij helpen.
- SanThe - op 14/04/2013 00:14:17:
Maar de error zegt dat je een 0 (nul) wil zetten in het veld met de primary key (waarschijnlijk dus het auto increment veld).
Als je een 0 invoert met een insert in een autoincrement veld dan wordt dat door MySQL gezien als een ontbrekende waarde en wordt er dus gewoon een nieuwe waarde aangemaakt volgens de huidige stand van de teller. Alleen via een update kan je een nul invoeren in een autoincrement veld.
- SanThe - op 14/04/2013 00:14:17:
Ik zie het niet zo direct.
En daar zit inderdaad het echte probleem. Omdat dit zo'n wirwar van insert en update statements is, is het ook niet te zien. Door het ontbreken van een goede foutafhandeling is niet eens te zien in WELKE query het mis gaat. Zoeken naar en speld in de hooiberg dus. Daarnaast is de database structuur die de TS liet zien natuurlijk volkomen ontoereikend. Ik zie minimaal 6 tabellen waarin wordt geinsert of geupdate en er wordt dan 1 tabel getoond. Verder gaat het hier over een index die een probleem geeft, de TS laat ook nog eens niet zien welke indexen erop staan.
Advies aan TS: bouw goede foutafhandeling in en kom dan terug. Zo is het niet op te lossen.
Gewijzigd op 14/04/2013 10:12:16 door Erwin H
- ophalen van gegevens uit database
- simpele berekening uitvoeren
- resultaat terugstoppen in database
Die berekeningen kun je veel beter door de database laten uitvoeren. In regel 41-44 zie ik zelfs een join die in PHP wordt uitgevoerd. Huiver!
Zoals Erwin ook al zei: dit is erg rommelige code. Onbegonnen werk om te gaan foutzoeken. Het zou me niet eens verbazen als de fout het gevolg blijkt te zijn van bijvoorbeeld een (onterecht geplaatste) primary key op admin.kliks of zo.
Misschien even voor de duidelijkheid, dit is een klik en win script, het houdt dus in dat de gebruiker, een aantal banners ziet en deze kan klikken, elke 100e keer dat er op een banner wordt geklikt krijgt de gebruiker een prijs. Dit is de code waar de banners staan:
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
session_start();
include("header.php");
if (!isset($_SESSION['uid'])) {
output("Je moet ingelogd zijn om deze pagina te kunnen bekijken");
}
else {
?>
<script type="text/javascript">
function refresh (timeoutPeriod){
refresh = setTimeout(function(){window.location.reload(true);},timeoutPeriod);
}
</script>
<?php
$inv1=mysql_query("SELECT * from admin") or die(mysql_error());
$row1=mysql_fetch_array($inv1);
$inv2=mysql_query("SELECT * from klikenwin") or die(mysql_error());
$inv6=mysql_query("SELECT * from winnaars") or die(mysql_error());
$htijd=time();
$inv3=mysql_query("SELECT * FROM klik") or die(mysql_error());
while($row3 = mysql_fetch_array($inv3)) {
$tijd=$row3['tijd'];
$afbid=$row3['afbid'];
if ($htijd-$tijd>86400) {
$inv4=mysql_query("DELETE from klik WHERE afbid='$afbid'") or die(mysql_error());
}
}
$inv4=mysql_query("SELECT * FROM cred WHERE id='".$gebr['id']."'") or die(mysql_error());
$row4=mysql_fetch_array($inv4);
?>
<center><h2>Klik en win</h2>
<div id="quote">Door op deze banners te klikken kunt u dutchleaders winnen. Bij elke <?php echo $row1['aantalkliks'] ?> klikken is er een winnaar, als jij dit bent ontvang je <?php echo $row1['beloning'] ?> dutchleaders in je account <br>Als je een winnaar bent stuur dan even een email met je accountnaam van dutchleader en je dutchleaders worden binnen 48 uur toegevoegd .</div>
<br/><div id="quote"><center>Dutchleaders: <b><?php echo $row4['saldo'] ?></b></center></div>
<br/>
<?php
while($row2 = mysql_fetch_array($inv2)){
$inv5=mysql_query("SELECT * FROM klik WHERE afbid='".$row2['id']."' AND gebr='".$_SESSION['uid']."'") or die(mysql_error());
if (mysql_num_rows($inv5) == 0) {
$afbeelding=$row2['afbeelding'];
$afbid=$row2['id'];
?>
<a href="klik.php?kl=<?php echo $afbid ?>" onclick="refresh(1000) " target="_blank" rel="nofollow"><img src="<?php echo $afbeelding ?>" width="600" /></a>
<?php
}
}
?>
<br/>
<h2>Winnaars</h2>
<div id="quote"><table><tr><td width="25%">Datum</td><td width="25%">Naam</td></tr>
<?php
$counter1=0;
while($row6 = mysql_fetch_array($inv6) and $counter1<10){
$counter1++;
$inv5=mysql_query("SELECT * FROM klik WHERE afbid='".$row2['id']."' AND gebr='".$_SESSION['uid']."'") or die(mysql_error());
if (mysql_num_rows($inv5) == 0) {
$datumu=$row6['datum'];
$naam=$row6['naam'];
setlocale(LC_TIME, 'NL_nl');
setlocale(LC_ALL, 'nl_NL');
$datum=strftime('%e %B %Y',$datumu);
?>
<tr><td><?php echo $datum ?></td><td><?php echo $naam ?></td></tr>
<?php
}
}
?>
</table></div></center>
<?php
}
include("footer.php");
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
session_start();
include("header.php");
if (!isset($_SESSION['uid'])) {
output("Je moet ingelogd zijn om deze pagina te kunnen bekijken");
}
else {
?>
<script type="text/javascript">
function refresh (timeoutPeriod){
refresh = setTimeout(function(){window.location.reload(true);},timeoutPeriod);
}
</script>
<?php
$inv1=mysql_query("SELECT * from admin") or die(mysql_error());
$row1=mysql_fetch_array($inv1);
$inv2=mysql_query("SELECT * from klikenwin") or die(mysql_error());
$inv6=mysql_query("SELECT * from winnaars") or die(mysql_error());
$htijd=time();
$inv3=mysql_query("SELECT * FROM klik") or die(mysql_error());
while($row3 = mysql_fetch_array($inv3)) {
$tijd=$row3['tijd'];
$afbid=$row3['afbid'];
if ($htijd-$tijd>86400) {
$inv4=mysql_query("DELETE from klik WHERE afbid='$afbid'") or die(mysql_error());
}
}
$inv4=mysql_query("SELECT * FROM cred WHERE id='".$gebr['id']."'") or die(mysql_error());
$row4=mysql_fetch_array($inv4);
?>
<center><h2>Klik en win</h2>
<div id="quote">Door op deze banners te klikken kunt u dutchleaders winnen. Bij elke <?php echo $row1['aantalkliks'] ?> klikken is er een winnaar, als jij dit bent ontvang je <?php echo $row1['beloning'] ?> dutchleaders in je account <br>Als je een winnaar bent stuur dan even een email met je accountnaam van dutchleader en je dutchleaders worden binnen 48 uur toegevoegd .</div>
<br/><div id="quote"><center>Dutchleaders: <b><?php echo $row4['saldo'] ?></b></center></div>
<br/>
<?php
while($row2 = mysql_fetch_array($inv2)){
$inv5=mysql_query("SELECT * FROM klik WHERE afbid='".$row2['id']."' AND gebr='".$_SESSION['uid']."'") or die(mysql_error());
if (mysql_num_rows($inv5) == 0) {
$afbeelding=$row2['afbeelding'];
$afbid=$row2['id'];
?>
<a href="klik.php?kl=<?php echo $afbid ?>" onclick="refresh(1000) " target="_blank" rel="nofollow"><img src="<?php echo $afbeelding ?>" width="600" /></a>
<?php
}
}
?>
<br/>
<h2>Winnaars</h2>
<div id="quote"><table><tr><td width="25%">Datum</td><td width="25%">Naam</td></tr>
<?php
$counter1=0;
while($row6 = mysql_fetch_array($inv6) and $counter1<10){
$counter1++;
$inv5=mysql_query("SELECT * FROM klik WHERE afbid='".$row2['id']."' AND gebr='".$_SESSION['uid']."'") or die(mysql_error());
if (mysql_num_rows($inv5) == 0) {
$datumu=$row6['datum'];
$naam=$row6['naam'];
setlocale(LC_TIME, 'NL_nl');
setlocale(LC_ALL, 'nl_NL');
$datum=strftime('%e %B %Y',$datumu);
?>
<tr><td><?php echo $datum ?></td><td><?php echo $naam ?></td></tr>
<?php
}
}
?>
</table></div></center>
<?php
}
include("footer.php");
?>
en de code die ik in mijn eerste bericht liet zien is de code van klik.php
Zlef ben ik nog niet zo bedreven met mysql en php, hoe maak ik zo'n foutenafhandeling? Hoe laat ik de indexen zien van mijn tabel? En hoe kan ik berkeningen laten uitvoeren door de database?
Alvast bedankt voor alle moeite
Louis
Toevoeging op 14/04/2013 12:46:47:
Volgens mij zit het probleem inderdaad in mijn database instellingen, wan top een andere website waar ik exact dezelfde code gebruikte werkt alles naar behoren.
Toevoeging op 14/04/2013 12:53:28:
Het probleem is opgelost :-)
Ben ik ook wel nieuwsgierig naar.