MySQL-fout: Dubbele ingang voor...
CyberKieken - 10/04/2005 15:34 (laatste wijziging 10/04/2005 15:34)
HTML interesse
Ik ben bezig een soort leden-systeem te maken, en na aanmelding worden de gebruikersgegevens opgeslagen in een MySQL-database.
Tot zover alles normaal, maar ik krijg altijd een fout bij het invoegen van de gegevens in de database. Dus laat ik mijn script voor het testen eens de query echoën en dan krijg ik de volgende query:
INSERT INTO `leden` ( `id` , `username` , `lvl` , `voornaam` , `achternaam` , `email` , `teamnaam` , `team_id` , `aanmelding` , `paswoord` , `land` , `cont` , `ip` )
VALUES (
'', 'sio', '0', 'sio', 'vanwzl', 'sio@wzl.com', 'staafies', '5893156', 'now()', '4fa52a3a7701ec02d06310098', '106', '0', '127.0.0.1'
)
INSERT INTO `leden` ( `id` , `username` , `lvl` , `voornaam` , `achternaam` , `email` , `teamnaam` , `team_id` , `aanmelding` , `paswoord` , `land` , `cont` , `ip` )
VALUES (
'' , 'sio' , '0' , 'sio' , 'vanwzl' , 'sio@wzl.com' , 'staafies' , '5893156' , 'now()' , '4fa52a3a7701ec02d06310098' , '106' , '0' , '127.0.0.1'
)
Niet letten op de gegevens, die zijn maar testdata ;) dit lijkt me toch een deftige query, maar MySQL retourneert ook bij het invoeren via phpMyAdmin een fout:Citaat:
#1062 - Dubbele ingang '32767' voor zoeksleutel 2
Notice: Undefined offset: 1 in c:program fileseasyphp1-8phpmyadminlibrariescommon.lib.php on line 681
Notice: Undefined offset: 1 in c:program fileseasyphp1-8phpmyadminlibrariescommon.lib.php on line 685
Warning: mysql_result(): Unable to jump to row -1 on MySQL result index 61 in c:program fileseasyphp1-8phpmyadminlibrariescommon.lib.php on line 685
de velden id, team_id en username moeten uniek zijn (id is auto_increment), maar aangezien er maar 2 users in de db zitten kan ik gemakkelijk zien dat er geen overlappingen zijn...
Heeft er misschien iemand een idee wat ik fout doe en hoe ik het kan oplossen?
(die php-errors lijken me ook maar een vage bedoening daartussen, zou het daaraan kunnen liggen?)
16 antwoorden
Gesponsorde links
zwobbel - 10/04/2005 15:39
PHP gevorderde
Probeer het zo is ne keer.
<?
mysql_query("INSERT INTO `leden` ( `id` , `username` , `lvl` , `voornaam` , `achternaam` , `email` , `teamnaam` , `team_id` , `aanmelding` , `paswoord` , `land` , `cont` , `ip` )
VALUES (
'', 'sio', '0', 'sio', 'vanwzl', 'sio@wzl.com', 'staafies', '5893156', 'now()', '4fa52a3a7701ec02d06310098', '106', '0', '127.0.0.1'
) ");
?>
<?
mysql_query ( "INSERT INTO `leden` ( `id` , `username` , `lvl` , `voornaam` , `achternaam` , `email` , `teamnaam` , `team_id` , `aanmelding` , `paswoord` , `land` , `cont` , `ip` ) VALUES (
'', 'sio', '0', 'sio', 'vanwzl', 'sio@wzl.com', 'staafies', '5893156', 'now()', '4fa52a3a7701ec02d06310098', '106', '0', '127.0.0.1'
) " ) ;
?>
CyberKieken - 10/04/2005 15:42 (laatste wijziging 10/04/2005 15:45)
HTML interesse
nope, helpt niet
komen geen waarden bij in de db, en hij retourneert weer die error:
Dubbele ingang '32767' voor zoeksleutel 2
Dubbele ingang '32767' voor zoeksleutel 2
Franko - 10/04/2005 15:43 (laatste wijziging 10/04/2005 15:44)
Nieuw lid
$sql= "INSERT INTO leden ( id , username , lvl , voornaam , achternaam , email , teamnaam , team_id , aanmelding , paswoord , land , cont , ip )
VALUES ('', 'sio', '0', 'sio', 'vanwzl', 'sio@wzl.com', 'staafies', '5893156', 'now()', '4fa52a3a7701ec02d06310098', '106', '0', '127.0.0.1'
)";
mysql_query($sql);
CyberKieken - 10/04/2005 15:46 (laatste wijziging 10/04/2005 15:47)
HTML interesse
@Franko: is dat niet dezelfde query als Zwobbel gaf?
anyway, kzal hem eens testen edit: geeft ook die error
@Sasuke: ja, ik heb met hetzelfde script 2 gebruikers kunnen toevoegen en ik kan via een 'admin'-pagina de gebruikers verwijderen e.d.
Franko - 10/04/2005 15:52 (laatste wijziging 10/04/2005 15:55)
Nieuw lid
hoe ziet je structuur van je DB eruit,
Als ik alleen naar het voorbeeldje kijk zie ik dat sio er dubbel instaat,
wellicht mogen username en voornaam niet hetzelfde zijn??
En laat common.lib.php eens zien, want daar zitten blijkbaar ook fouten in!
CyberKieken - 10/04/2005 15:54 (laatste wijziging 29/05/2010 15:25)
HTML interesse
als ik phpMyAdmin de tabel laat exporteren krijg ik dit: (leek me de makkelijkste methode om de structuur voor te stellen)
CREATE TABLE `leden` (
`id` smallint(6) NOT NULL auto_increment,
`username` varchar(25) NOT NULL default '',
`lvl` tinyint(4) NOT NULL default '0',
`voornaam` varchar(25) NOT NULL default '',
`achternaam` varchar(25) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
`teamnaam` varchar(50) NOT NULL default '',
`team_id` smallint(6) NOT NULL default '0',
`aanmelding` mediumint(9) NOT NULL default '0',
`paswoord` varchar(25) NOT NULL default '',
`land` tinyint(4) NOT NULL default '0',
`cont` tinyint(4) NOT NULL default '0',
`ip` tinytext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `team_id` (`team_id`),
UNIQUE KEY `username` (`username`)
)
INSERT INTO `leden` VALUES (1, 'CyberKieken', 101, 'voornaam', 'achternaam', '********@******.**', 'Pigs In The Ocean', 32767, 8388607, '9179586eea6aadda675942c27', 44, 1, '127.0.0.1');
INSERT INTO `leden` VALUES (2, 'Nookie', 101, 'Nook', 'ie', 'nookie@wzl.com', 'Nookiedog', 23658, 8388607, 'adc7bf17404763ecac52e3306', 44, 1, '127.0.0.1');
CREATE TABLE `leden` (
`id` smallint( 6 ) NOT NULL auto_increment,
`username` varchar( 25 ) NOT NULL default '' ,
`lvl` tinyint( 4 ) NOT NULL default '0' ,
`voornaam` varchar( 25 ) NOT NULL default '' ,
`achternaam` varchar( 25 ) NOT NULL default '' ,
`email` varchar( 50 ) NOT NULL default '' ,
`teamnaam` varchar( 50 ) NOT NULL default '' ,
`team_id` smallint( 6 ) NOT NULL default '0' ,
`aanmelding` mediumint( 9 ) NOT NULL default '0' ,
`paswoord` varchar( 25 ) NOT NULL default '' ,
`land` tinyint( 4 ) NOT NULL default '0' ,
`cont` tinyint( 4 ) NOT NULL default '0' ,
`ip` tinytext NOT NULL ,
UNIQUE
KEY `team_id`
( `team_id`
) , UNIQUE
KEY `username`
( `username`
) )
INSERT INTO `leden` VALUES ( 1 , 'CyberKieken' , 101 , 'voornaam' , 'achternaam' , '********@******.**' , 'Pigs In The Ocean' , 32767 , 8388607 , '9179586eea6aadda675942c27' , 44 , 1 , '127.0.0.1' ) ;
INSERT INTO `leden` VALUES ( 2 , 'Nookie' , 101 , 'Nook' , 'ie' , 'nookie@wzl.com' , 'Nookiedog' , 23658 , 8388607 , 'adc7bf17404763ecac52e3306' , 44 , 1 , '127.0.0.1' ) ;
edit: ligt ook niet aan de gelijke username en voornaam, als ik het met andere waarden probeer wilt hij ook niet
CyberKieken - 10/04/2005 16:01 (laatste wijziging 10/04/2005 16:02)
HTML interesse
Common.lib leek me een beetje groot om hier te posten, staat on-line op http://obf.cyberkieken.be/common.lib.phps
de lijnen met fouten zijn de volgende:
<?php
if (substr($error_message, 1, 4) == '1062') { /*lijn 675*/
// TODO: do not assume that the error message is in English
// and do not use mysql_result()
// explode the entry and the column
$arr_mysql_val_key = explode('entry \'',$tmp_mysql_error);
$arr_mysql_val_key = explode('\' for key',$arr_mysql_val_key[1]); /*lijn 681*/
// get the duplicate value
$string_duplicate_val = trim(strtolower($arr_mysql_val_key[0]));
// get the field name ...
$string_duplicate_key = mysql_result(mysql_query("SHOW FIELDS FROM " . $table), ($arr_mysql_val_key[1]-1), 0); /*lijn 685*/
$duplicate_sql_query = "SELECT * FROM " . $table . " WHERE " . $string_duplicate_key . " LIKE '" . $string_duplicate_val . "'";
echo ' <form method="post" action="read_dump.php" style="padding: 0px; margin: 0px">' ."\n"
. ' <input type="hidden" name="sql_query" value="' . $duplicate_sql_query . '" />' . "\n"
. ' ' . PMA_generate_common_hidden_inputs($db, $table) . "\n"
. ' <input type="submit" name="submit" value="' . $GLOBALS['strBrowse'] . '" />' . "\n"
. ' </form>' . "\n";
}
?>
<?php
if ( substr ( $error_message , 1 , 4 ) == '1062' ) { /*lijn 675*/ // TODO: do not assume that the error message is in English
// and do not use mysql_result()
// explode the entry and the column
$arr_mysql_val_key = explode ( 'entry \' ',$tmp_mysql_error); $arr_mysql_val_key = explode(' \' for key' , $arr_mysql_val_key [ 1 ] ) ; /*lijn 681*/
// get the duplicate value
// get the field name ...
$string_duplicate_key = mysql_result ( mysql_query ( "SHOW FIELDS FROM " . $table ) , ( $arr_mysql_val_key [ 1 ] - 1 ) , 0 ) ; /*lijn 685*/ $duplicate_sql_query = "SELECT * FROM " . $table . " WHERE " . $string_duplicate_key . " LIKE '" . $string_duplicate_val . "'" ;
echo ' <form method="post" action="read_dump.php" style="padding: 0px; margin: 0px">' . "\n " . ' <input type="hidden" name="sql_query" value="' . $duplicate_sql_query . '" />' . "\n "
. ' ' . PMA_generate_common_hidden_inputs( $db , $table ) . "\n "
. ' <input type="submit" name="submit" value="' . $GLOBALS [ 'strBrowse' ] . '" />' . "\n "
. ' </form>' . "\n " ;
}
?>
Franko - 10/04/2005 16:06
Nieuw lid
$arr_mysql_val_key = explode('\' for key',$arr_mysql_val_key[1]); /*lijn 681*/
moet denk ik zijn:
$arr_mysql_val_key = explode('\' for key,$arr_mysql_val_key[1]); /*lijn 681*/
CyberKieken - 10/04/2005 16:08
HTML interesse
dan sluit je je aanhalingsteken (' ) toch niet ?
Franko - 10/04/2005 16:08
Nieuw lid
er klopt iets niet met die ' Je hebt er 3 staan ipv een even aantal
ook in regel 680.
CyberKieken - 10/04/2005 16:09
HTML interesse
die worden toch ge-escaped... en dan is het wel een even aantal...
Franko - 10/04/2005 16:16
Nieuw lid
je hebt gelijk. sorry
verander ' eens in "
vinTage - 29/05/2010 15:33
Nieuw lid
WTF @ kieken, na 5 jaar werkt het nog steeds niet ofwa ?????
Gesponsorde links
Dit onderwerp is gesloten .