mysql error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Louis Deconinck

Louis Deconinck

13/04/2013 23:27:48
Quote Anchor link
Ik krijg deze error:

Duplicate entry '0' for key 'PRIMARY'

bij deze code, hoe los ik dit op?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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%\">");
 }
}

?>


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
 
PHP hulp

PHP hulp

26/09/2021 23:31:12
 
- Ariën -
Beheerder

- Ariën -

13/04/2013 23:49:40
Quote Anchor link
Laat je databasestructuur eens zien?
 
Louis Deconinck

Louis Deconinck

13/04/2013 23:56:07
Quote Anchor link
# Naam Type Collatie Attributen Leeg Standaardwaarde Extra
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
 
- SanThe -

- SanThe -

14/04/2013 00:14:17
Quote Anchor link
Ik zie het niet zo direct.
Maar de error zegt dat je een 0 (nul) wil zetten in het veld met de primary key (waarschijnlijk dus het auto increment veld).
 
Php knipper

php knipper

14/04/2013 01:29:45
Quote Anchor link
verander rij 8 eens naar

$inv23=mysql_query("SELECT * FROM klik WHERE afbid='".$kl."' and gebr = '".$_SESSION['uid']."'") or die(mysql_error());
 
Erwin H

Erwin H

14/04/2013 10:10:43
Quote Anchor link
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());

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
 
Willem vp

Willem vp

14/04/2013 10:52:15
Quote Anchor link
Sowieso zit er veel teveel PHP-code in. ;-) Nu zie ik een heleboel code in de trant van:
- 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.
 
Louis Deconinck

Louis Deconinck

14/04/2013 12:43:27
Quote Anchor link
Hallo iedereen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 :-)
 
- SanThe -

- SanThe -

14/04/2013 14:18:43
Quote Anchor link
En de oplossing is???

Ben ik ook wel nieuwsgierig naar.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.