Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Duplicate entry 'xxx' for key 1
Forum PHP.pl > Forum > Bazy danych > MySQL
yamamoto
Witam serdecznie,

Przy rejestracji na forum phpbb by Przemo (a właściwie stronie połączonej z tym forum) wyskakuje mi błąd następującej treści: Duplicate entry '328' for key 1. Nie mam zielonego pojęcia o co może chodzić, proszę o pomoc. Rejestracja dostępna pod adresem:
http://merengues.pl/register.php

Z góry dziękuję.
piaseq
Błąd ten oznacza najprawdopodobniej próbę wpisania już istniejącej wartości do kolumny będącej kluczem obcym. Bez wglądu w kod ciężko stwierdzić dlaczego występuje.
yamamoto
CODE
require_once('header.php');
require_once('module/register.inc.php');
require_once('module/functions.inc.php');

echo '';

naglowek('Rejestracja');

if($_GET['co']=='dodaj')
{
register_dodaj();
}

else
{
register();
}


echo '';

require_once('footer.php');
?>


Plik register.php.
piaseq
Cytat(yamamoto @ 1.02.2009, 13:50:28 ) *
Plik register.php.

Masz chociaż mgliste pojęcie o php? Treść tego pliku nie wnosi niczego do tematu. Pokaż treść pliku zawierającego funkcje register_dodaj() i register().
yamamoto
Spokojnie. ;]

  1. <?php
  2. function register()
  3. {
  4.  global $adres_strony, $mail_register_temat, $mail_register_tresc;
  5.  
  6.  if($_GET['action']=='dodaj')
  7.  {
  8.    
  9.    if(empty($_POST['login']))
  10.    {
  11.      komunikat_blad('Pole login pozostało puste');
  12.    }
  13.    
  14.    elseif(strlen($_POST['login'])<4)
  15.    {
  16.      komunikat_blad('Login musi mieć więcej niż trzy znaki');
  17.    }
  18.    
  19.    elseif(empty($_POST['email']))
  20.    {
  21.      komunikat_blad('Pole e-mail pozostało puste');
  22.    }
  23.    
  24.    elseif(!eregi('^[a-zA-z0-9_-.]+@[a-zA-z0-9-]+.[a-zA-z0-9-.]+$', $_POST['email']))
  25.    {
  26.      komunikat_blad('Adres e-mail jest niepoprawny');
  27.    }
  28.    
  29.    elseif(empty($_POST['haslo']))
  30.    {
  31.      komunikat_blad('Pole hasło pozostało puste');
  32.    }
  33.    
  34.    elseif(empty($_POST['rehaslo']))
  35.    {
  36.      komunikat_blad('Pole powtórz hasło pozostało puste');
  37.    }
  38.    
  39.    elseif($_POST['haslo'] != $_POST['rehaslo'])
  40.    {
  41.      komunikat_blad('Hasła nie są takie same');
  42.    }
  43.    
  44.    elseif(strlen($_POST['haslo'])<4)
  45.    {
  46.      komunikat_blad('Hasło musić mieć więcej niż 3 trzy znaki');
  47.    }
  48.    
  49.    elseif(empty($_POST['token']))
  50.    {
  51.      komunikat_blad('Pole kod z obrazka pozostało puste');
  52.    }
  53.  
  54.    elseif($_POST['token'] != $_SESSION['token'])
  55.    {
  56.      komunikat_blad('Źle przepisany kod z obrazka');
  57.    }
  58.  
  59.    
  60.    else
  61.    {
  62.      $rows_login = sql_rows("SELECT username FROM phpbb_users WHERE username='".$_POST['login']."'");
  63.      $rows_email = sql_rows("SELECT user_email FROM phpbb_users WHERE user_email='".$_POST['email']."'");
  64.      $rows_users = sql_rows("SELECT * FROM phpbb_users");
  65.      
  66.      if($rows_login>0)
  67.      {
  68.        komunikat_blad('Ten login jest już zajęty!');
  69.      }
  70.      
  71.      elseif($rows_email>0)
  72.      {
  73.        komunikat_blad('Ten e-mail jest już zajęty!');
  74.      }
  75.      
  76.      else
  77.      {
  78.        $login = addslashes($_POST['login']);
  79.        $email = addslashes($_POST['email']);
  80.        $haslo = addslashes($_POST['haslo']);
  81.        $user_id = $rows_users+1;
  82.        
  83.        $sql = "INSERT INTO phpbb_users SET  username='".$login."',
  84.                                             user_id='".$user_id."',
  85.                                             user_active='0',
  86.                                             user_password='".md5($haslo)."',
  87.                                             kod='".md5($login)."',
  88.                                             user_lang='polish',
  89.                                             user_regdate = '".time()."',
  90.                                             user_email='".$email."'";
  91.        if($query = mysql_query($sql) or die(mysql_error()))
  92.        {
  93.          @phpmailer($mail_register_temat, $mail_register_tresc, $email, $login);
  94.          komunikat_finish_action('Rejestracja została zakończona, pozostaje tylko teraz aktywować konto. Na podany e-mail zostały wysłane dalsze instrukcje.', 'register.php');
  95.        }
  96.      }
  97.    }
  98.  }
  99.  
  100.  elseif($_GET['action']=="activation")
  101.  {
  102.    $sql = "UPDATE phpbb_users SET user_active='1' WHERE kod='".$_GET['code']."'";
  103.        if($query = mysql_query($sql) or die(mysql_error()))
  104.        {
  105.          komunikat_finish_action('Konto zostało aktywowane!', 'index.php');
  106.        }
  107.  }
  108.  
  109.  include('module_theme/register.temp.php');
  110. }
  111.  
  112.  
  113.  
  114. ?>
piaseq
Bez struktury tabeli z bazy danych nie jestem na 100% pewny, ale myślę, że chodzi o zmienną $user_id. Określasz ją zliczając liczbę użytkowników z tabeli phpbb_users i dodając 1. Jest to błąd ponieważ zapytanie
  1. SELECT * FROM phpbb_users

zwraca liczbę użytkowników, a nie największe id. Widzę dwa wyjścia z tej sytuacji:
- sprawdź czy kolumna zawierająca id w bazie danych nie jest przypadkiem auto increment, wtedy przy odpowiedniej modyfikacji zapytania baza "sama ustali" jaki id należy wpisać
- możesz też zmienić zapytanie tak aby pobierało maksymalny numer id i dodawać do niego 1.

Taka mała uwaga, do kodu php używaj tagów [php] zamiast [code], łatwiej się czyta smile.gif
yamamoto
Kolumna nie ma auto_increment.

Cytat
- możesz też zmienić zapytanie tak aby pobierało maksymalny numer id i dodawać do niego 1.


W jaki sposób? winksmiley.jpg
piaseq
Cytat(yamamoto @ 1.02.2009, 14:12:31 ) *
W jaki sposób? winksmiley.jpg

Tak, aby pobierało maksymalne id.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.