[php/mysql] niet unieke gegevens invoeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb hier een klein scriptje voor het invoeren van gegevens in db
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$aap = $_SERVER['REMOTE_ADDR'];
$aapje = date('d/m/Y -- G:i:s');
$username = "root";
$password = "blaat";
$hostname = "localhost";
$dbh = mysql_connect($hostname, $username, $password)
  or die("Kan de MySQL database niet bereiken.");
  print "De connectie naar de MySQL database is voltooid<br>";
  $selected = mysql_select_db("deev",$dbh)
    or die("Kan de juiste database niet vinden");
   // if (mysql_query("insert into ip values('$aap')")) {
if (mysql_query("insert into ip(adres, datum) values('$aap', '$aapje')")) {
 print "De data is succesvol in de database gestopt";
      }
      else {
          print "Er is een fout waargenomen tijdens het importeren van de gegevens";
          }
          mysql_close($dbh);

Als ik dit een keer uitvoer doet hij het gewoon perfect, maar zodra ik het voor de 2de keer uitvoeren geeft hij de fout weer "Er is een fout waargenomen. bla bla bal" .
Nu ligt dat er voglens mij aan dat 'adres' het eerste veld is , en dus automatisch de primary key heeft.
Die heb ik al verwijderd, maar toch doet hij het niet.
Mijn vraag is dus hoe ik nu de niet unieke gegevens in kan laten voeren (zoals het ip-adres wat meerdere keren voorkomt).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Een extra veld toevoegen dat een unieke primary key is? Een autoincement integer dus.

Trouwens:
PHP:
1
2
3
4
5
6
if (mysql_query("insert into ip(adres, datum) values('$aap', '$aapje')")) {
  print "De data is succesvol in de database gestopt";
}
else {
  print "Er is een fout waargenomen tijdens het importeren van de gegevens";
}

Maak daar eens van:
PHP:
1
2
3
4
5
6
if (mysql_query("insert into ip(adres, datum) values('$aap', '$aapje')")) {
  print "De data is succesvol in de database gestopt";
}
else {
  die(mysql_error());
}

[ Voor 12% gewijzigd door NMe op 15-08-2004 23:15 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
na de 'mysql_error()' in te voeren, blijk hij het ook al te doen.... :)
Vind ik overigens wel vreemd.

// maar dit script was wel overigens als oefen bedoeld, dus verder niet op de syntax oid letten

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
De syntax is niet zo'n probleem, je gebruikt vrij simpele constucties. Over het inspringen is wel iets te zeggen. Spring je code liever netjes in, zoals ik in mijn post gedaan heb. Leest veel makkelijker.


Maar dat die mysql_error() je probleem heeft opgelost, dat kan niet. :) Dat is namelijk alleen for debugging purposes, en moet de daadwerkelijke error afdrukken wanneer het fout gaat. Ik denk dat je dus inderdaad een aparte primary key moet maken als je verder duplicate entries wil maken van de waardes die je nu invoert. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Billie
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:27
code:
1
if (mysql_query("insert into ip(adres, datum) values('$aap', '$aapje')")) {


Doet ie daar niet letterlijk $aap en $aapje invoeren ipv de waardes? Of zeg ik nu iets erg doms? :X

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daarom vind ik het ook al raar.
Maar nu wil hij wel meerdere ip-adressen in de db gooien. :X

edit:

Nee, ik heb in de database gekeken en de ip-adressen en tijd word er netjes in opgeslagen

[ Voor 38% gewijzigd door Verwijderd op 15-08-2004 23:20 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Billie schreef op 15 augustus 2004 @ 23:18:
code:
1
if (mysql_query("insert into ip(adres, datum) values('$aap', '$aapje')")) {


Doet ie daar niet letterlijk $aap en $aapje invoeren ipv de waardes? Of zeg ik nu iets erg doms? :X
Welkom in de wereld van de onduidelijke manier van proggen, en helaas kan dit in PHP :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Billie schreef op 15 augustus 2004 @ 23:18:
code:
1
if (mysql_query("insert into ip(adres, datum) values('$aap', '$aapje')")) {


Doet ie daar niet letterlijk $aap en $aapje invoeren ipv de waardes? Of zeg ik nu iets erg doms? :X
Je zegt idd iets erg doms. ;) Tussen dubbele quotes (" dus) worden variabelen gewoon geparset.
PHP:
1
2
3
4
$blaat = "test<br />";
echo $blaat;
echo "$blaat";
echo '$blaat';

Dit zal de volgende output geven:
code:
1
2
3
test
test
$blaat


@TS: hoe zit je tabel in elkaar in de database?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[qoute]
Welkom in de wereld van de onduidelijke manier van proggen, en helaas kan dit in PHP
[/qoute]
Ik zei toch dat je niet op de syntax oid moest letten maja...

Ik heb een db gemaakt "deev" die een tabel "ip" heeft
In die tabel "ip" zitten twee kolommen, #1 = "adres" (deze met primaire sleutel) en #2 = "datum".
Het spreekt wel voor zich welke kolom wat inhoudt 8)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als "adres" de PK is, dan kun je nooit dubbele waarden ingevoerd hebben.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

Niet helemaal maar welke kolom types gebruikje voor datum? Als je gebruikt maakt van een varchar kolom heb je er weinig aan. Gebruik gewoon het datum veld. Daarnaast heeft php de mogelijkheid om een ip om te zetten in een longint (ip2long() & lon2ip()) Je kan dan sneller en beter zoeken in je database. MySQL heeft nog geen speciaal kolom type voor ipadressen. Ik meen dat Oracle en Postresql wel zo'n type hebben.

Back ontopic. Als je uit gaat van een tabel met de twee kolomen die jij geeft zou ik het volgende doen:
PHP:
1
2
$sql = "INSERT INTO ip
        SET ip = ".$ip.", datum = NOW();";

Dus als je adres een primary key is en je test dit iedere keer vanaf dezelfde client dan zal het ip adres hetzelfde zijn. Een primary key heeft dus als eigenschap dat het oa een unieke waarde is.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 16 augustus 2004 @ 00:01:
Ik zei toch dat je niet op de syntax oid moest letten maja...
offtopic:
waarom niet? daar leert iedereen toch van ;)

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 20:49

DizzyWeb

Ondertiteld

ripexx schreef op 16 augustus 2004 @ 00:16:
Niet helemaal maar welke kolom types gebruikje voor datum? Als je gebruikt maakt van een varchar kolom heb je er weinig aan. Gebruik gewoon het datum veld. Daarnaast heeft php de mogelijkheid om een ip om te zetten in een longint (ip2long() & lon2ip()) Je kan dan sneller en beter zoeken in je database. MySQL heeft nog geen speciaal kolom type voor ipadressen. Ik meen dat Oracle en Postresql wel zo'n type hebben.

Back ontopic. Als je uit gaat van een tabel met de twee kolomen die jij geeft zou ik het volgende doen:
PHP:
1
2
$sql = "INSERT INTO ip
        SET ip = ".$ip.", datum = NOW();";

Dus als je adres een primary key is en je test dit iedere keer vanaf dezelfde client dan zal het ip adres hetzelfde zijn. Een primary key heeft dus als eigenschap dat het oa een unieke waarde is.
je haalt nu INSERT en UPDATE syntax door elkaar, en een IP is geen integer, dus die moet tussen quotes...

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DizzyWeb schreef op 16 augustus 2004 @ 00:24:
[...]


je haalt nu INSERT en UPDATE syntax door elkaar, en een IP is geen integer, dus die moet tussen quotes...
http://us3.php.net/manual/en/function.ip2long.php :P

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

DizzyWeb schreef op 16 augustus 2004 @ 00:24:
[...]
je haalt nu INSERT en UPDATE syntax door elkaar, en een IP is geen integer, dus die moet tussen quotes...
Zoals ik in mijn post aan gaf zou ik het ten eerste doen door een ip te converteren naar een longint, dus geen single quotes nodig. Ten tweede werkt deze syntax in mysql net zo goed en je kan inserten op alleen de kolomen die jij wil en het is dan dus niet nodig om alle kolommen de defineren. Gemak dient de mens. ;)

Maar dit gaat geheel offtopic.

Zie ook Erkens :P

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 20:49

DizzyWeb

Ondertiteld

offtopic:
Ik ga er stiekem van uit dat ie toch dotted quads wil invoeren ;)

[ Voor 5% gewijzigd door DizzyWeb op 16-08-2004 00:37 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DizzyWeb schreef op 16 augustus 2004 @ 00:35:
[...]

offtopic:
Ik ga er stiekem van uit dat ie toch dotted quads wil invoeren ;)
offtopic:
klopt ook wel, zie code in de TS: $aap = $_SERVER['REMOTE_ADDR'];
alleen wilde ik even laten zien dat een IP gemakkelijk omgezet kan worden naar een long, wellicht dat iemand er ooit wat aan heeft :)

Acties:
  • 0 Henk 'm!

  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 26-08 09:08

Kippenijzer

McFallafel, nu met paardevlees

Erkens schreef op 16 augustus 2004 @ 09:32:
offtopic:
[..]wellicht dat iemand er ooit wat aan heeft :)
offtopic:
Jawel, maar een beetje laat :) Ik wist dus niet dat deze bestond, en heb zelf een functie geschreven die de 4 decimals in hex omzet, die 4*2 hex achter elkaar zet en als longint wegschrijft... Nu effe kijken of ik het makkelijk om kan zetten (of dat hij effectief al hetzelfde doet zelfs).
[edit]Ende lol, mijn functie doet idd hetzelfde, maar dan op een andere manier... Prima :) Maakt het coden met ip's makkelijker :P[/edit]

[ Voor 14% gewijzigd door Kippenijzer op 16-08-2004 09:49 ]

Pagina: 1