• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Column 'id' cannot be null

Object Storage Arubacloud
0 głosów
467 wizyt
pytanie zadane 16 marca 2020 w SQL, bazy danych przez PatryQHyper Nowicjusz (170 p.)
otwarte ponownie 17 maja 2020 przez PatryQHyper

Witam

Ostatnio piszę w PHP system ItemShopu do Minecrafta, ale mam jeden problem. Kiedy dodaje usługę poprzez formularz nic się nie wyświetla, a gdy dodam przez bazę w "SQL" pisze #1048 - Column 'id' cannot be null.

Jak można to naprawić?

 

<?php

	session_start();
	
	if (!isset($_SESSION['zalogowany']))
	{
		header('Location: index.php');
		exit();
	}
	
?>
<?php ini_set('display_errors', 0);
    $nazwa = $_POST["nazwa"];
    $opis = $_POST["opis"];
    $smstaknie = $_POST["smstaknie"];
    $grafika = $_POST["grafika"];
    $smsnumer = $_POST["smsnumer"];
    $smskod = $_POST["smskod"];
    $bruttosms = $_POST["bruttosms"];
    $nettosms = $_POST["nettosms"];
    include_once('../dbconnect.php');
      $conn = new mysqli($servername, $username, $password, $dbname);
      $sql = "SELECT * FROM `pathyper_services`";
            $result = $conn->query($sql);
            if ($conn->connect_errno!=0)
            {
                die('Nie można połączyć się z bazą. Czy poprawnie wpisałeś/aś dane do bazy danych w dbconnect.php?');
            }
            else {
            mysqli_set_charset($conn,"utf8");
            $sql = "SELECT * FROM `pathyper_services`";
            $result = $conn->query($sql);
            if (@$result->num_rows > 0) {
                while($row = $result->fetch_assoc()) { 
                    $conn->query("INSERT INTO `pathyper_services` (`id`, `shopid`, `servicename`, `servicedesc`, `serviceurl`, `sms`, `sms_number`, `sms_code`, `sms_id`, `sms_netto`, `sms_brutto`, `paypal`, `paypal_price`, `paysafecard`, `paysafecard_price`, `przelew`, `przelew_cena`, `przelew_link`) VALUES (NULL, '1', '$nazwa', '$opis', '$grafika', '$smstaknie', '$smsnumer', '$smskod', '', '$nettosms', '$bruttosms', 'NIE', '', 'NIE', '', 'NIE', '', '')");
                    //header('Location: admin_success.php?action=service_add');
                }
            } else {
                mysqli_set_charset($conn,"utf8");
                $conn->query("INSERT INTO `pathyper_services` (`id`, `shopid`, `servicename`, `servicedesc`, `serviceurl`, `sms`, `sms_number`, `sms_code`, `sms_id`, `sms_netto`, `sms_brutto`, `paypal`, `paypal_price`, `paysafecard`, `paysafecard_price`, `przelew`, `przelew_cena`, `przelew_link`) VALUES (NULL, '1', '$nazwa', '$opis', '$grafika', '$smstaknie', '$smsnumer', '$smskod', '', '$nettosms', '$bruttosms', 'NIE', '', 'NIE', '', 'NIE', '', '')");
                //header('Location: admin_success.php?action=service_add');
            }
        }
    ?>

 

komentarz 16 marca 2020 przez adrian17 Ekspert (345,220 p.)
A... dlaczego próbujesz wstawić NULLa do kolumny z IDkiem? Bo to wygląda bardzo dziwnie.
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
Chce, aby automatycznie numerowało się id.
komentarz 16 marca 2020 przez adrian17 Ekspert (345,220 p.)
Czy kolumna jest autoincrement? To w ogóle jej nie wymieniaj w INSERT'cie, wartość ustawi się sama.
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)

Problem jest taki, że nie moge dodać jej autoincrement, i to mnie dziwi.
 

$conn->query("CREATE TABLE `$dbname`.`pathyper_services` ( `id`  INT NOT NULL , `shopid` INT NOT NULL , `servicename` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `servicedesc` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `serviceurl` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `sms` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `sms_number` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `sms_code` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `sms_id` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `sms_netto` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `sms_brutto` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `paypal` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `paypal_price` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `paysafecard` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `paysafecard_price` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `przelew` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `przelew_cena` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `przelew_link` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ) ENGINE = InnoDB ;");

co tutaj mam zmienić, bo baza się tworzy

komentarz 16 marca 2020 przez adrian17 Ekspert (345,220 p.)
A pokaż linię z autoincrementem którą próbujesz wykonać - no i błąd jaki wtedy się pojawia.
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
$conn->query("ALTER TABLE `pathyper_servers` ADD `id` AUTO_INCREMENT");

problem jest taki, że nic się nie wyświetla. wszystko przechodzi dalej a jeśli chce dodać to co na początku to nic się nie tworzy :/

komentarz 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Jak zmieniłeś pole na autoincrement, to jaką dokładnie komendą insertujesz nowe dane do zmienionej tabeli?
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)

$conn->query("INSERT INTO `pathyper_services` (`shopid`, `servicename`, `servicedesc`, `serviceurl`, `sms`, `sms_number`, `sms_code`, `sms_id`, `sms_netto`, `sms_brutto`, `paypal`, `paypal_price`, `paysafecard`, `paysafecard_price`, `przelew`, `przelew_cena`, `przelew_link`) VALUES ('', '1', '$nazwa', '$opis', '$grafika', '$smstaknie', '$smsnumer', '$smskod', '', '$nettosms', '$bruttosms', 'NIE', '', 'NIE', '', 'NIE', '', '')");

to powyżej w ogóle nie działa

to niżej dodawało, ale ID było 0 w paru przypadkach

$conn->query("INSERT INTO `pathyper_services` (`id`, `shopid`, `servicename`, `servicedesc`, `serviceurl`, `sms`, `sms_number`, `sms_code`, `sms_id`, `sms_netto`, `sms_brutto`, `paypal`, `paypal_price`, `paysafecard`, `paysafecard_price`, `przelew`, `przelew_cena`, `przelew_link`) VALUES ('', '1', '$nazwa', '$opis', '$grafika', '$smstaknie', '$smsnumer', '$smskod', '', '$nettosms', '$bruttosms', 'NIE', '', 'NIE', '', 'NIE', '', '')");

tu id zawsze jest 0

komentarz 16 marca 2020 przez adrian17 Ekspert (345,220 p.)

to powyżej w ogóle nie działa

Tak, bo na oko masz więcej values niż kolumn...

tu id zawsze jest 0

Tak, bo podajesz puste id.

Powtórzę: w ogóle tej kolumny ani żadnej wartości nie wpisuj w insercie.

komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
To jak mam zrobić, aby móc dodawać do bazy?
komentarz 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
$conn->query("INSERT INTO `pathyper_services` (`shopid`, `servicename`, `servicedesc`, `serviceurl`, `sms`, `sms_number`, `sms_code`, `sms_id`, `sms_netto`, `sms_brutto`, `paypal`, `paypal_price`, `paysafecard`, `paysafecard_price`, `przelew`, `przelew_cena`, `przelew_link`) VALUES ( '1', '$nazwa', '$opis', '$grafika', '$smstaknie', '$smsnumer', '$smskod', '', '$nettosms', '$bruttosms', 'NIE', '', 'NIE', '', 'NIE', '', '')");

Daj takie coś, jeśli będzie błąd napisz jaki

komentarz 16 marca 2020 przez adrian17 Ekspert (345,220 p.)
Um... właśnie powiedziałem.

Kolumna w tabeli musi być autoincrement. Jak jest, to po prostu nie wpisuj tej kolumny w INSERT'cie.
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
Nic mi się nie utworzyło i nic mi nie napisało :/
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)

Wpisałem w PHPMyAdmin i wyskoczyło mi 
#1062 - Duplicate entry '0' for key 'PRIMARY'

komentarz 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Jeju... na bank Ci się to nie wykona ponieważ masz wiecej zadekalowanych kolumn niż wartości...

INSERT INTO `pathyper_services` 

(`shopid`, `servicename`, ...) - Twoje kolumny, które musisz uzupełnić w value

VALUES

( '1', '$nazwa', ...) - Twoje wartości dla pojedyńczej kolumny - musi być taka sama liczba argumentów jak w nawiasach wyżej.


Jeśli nie chcesz podawać jakieś wartości to po prostu nie podajejesz jej nazwy w pierwszych nawiasach i analogicznie nie podajesz jej wartości w drugich nawiasach. 

 

 

Nie zadziała Ci coś takiego

INSERT INTO `pathyper_services`

(`shopid`, `servicename`)

VALUES

('','nazwa')

lub

INSERT INTO `pathyper_services`

(`shopid`, `servicename`)

VALUES

('1')

lub

INSERT INTO `pathyper_services`

(`shopid`, `servicename`)

VALUES

('1', 'Nazwa', 'jakas 3 wartosc')

 

komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
Z tym, że ja wszędzie potrzebuje wartości mam 18 wartości, do których muszę coś wrzucić
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
https://prnt.sc/rh2w28

Tutaj jest link do screena bazy. Tworzy się tylko jedna usługa, nic więcej nie chce
komentarz 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

@PatryQHyper, no to jeśli chcesz wszędzie mieć wartości to wypisz swoje wartości w pierwszych nawiasach a nie jak na przykładzie wyżej je pomijasz...

komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
Wpadłem na dość idiotyczne rozwiązanie. Użytkownik sam sobie wpisuje ID
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)

Dziękuję za poświęcony czas nad moim problemem. smiley

komentarz 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
To że użytkownik sam sobie wpisuje id nie jest rzowiązaniem a przyczyną kolejnych problemów :)
1
komentarz 16 marca 2020 przez adrian17 Ekspert (345,220 p.)
To nie jest rozwiązanie tylko ominięcie tego, że jakąś prostą głupotę masz gdzieś w SQLach, tylko sam nie możesz tego z nami dobrze skomunikować :(

1 odpowiedź

0 głosów
odpowiedź 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
wybrane 16 marca 2020 przez PatryQHyper
 
Najlepsza
"INSERT INTO `pathyper_services` (`id`, `shopid`, `servicename`, `servicedesc`, `serviceurl`, `sms`, `sms_number`, `sms_code`, `sms_id`, `sms_netto`, `sms_brutto`, `paypal`, `paypal_price`, `paysafecard`, `paysafecard_price`, `przelew`, `przelew_cena`, `przelew_link`) VALUES (NULL, '1', '$nazwa', '$opis', '$grafika', '$smstaknie', '$smsnumer', '$smskod', '', '$nettosms', '$bruttosms', 'NIE', '', 'NIE', '', 'NIE', '', '')"

Robisz inserta w którym podjesz, wartość ID = null. Zapewne w twojej strukturze bazy ID musi posiadać jakąś wartość (dobrze by było jakby było też unikalne). Po prostu wstaw tutaj jakiś id i będzie działać.

komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
Tylko chodzi mi o to, że jeśli ID zawsze będzie 1 to nie będzie można dodawać więcej usług
komentarz 16 marca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
To zmień strukturę bazy - pole ID daj autoincrement.

Następnie w insercie nie podawaj właściwości 'id'
komentarz 16 marca 2020 przez PatryQHyper Nowicjusz (170 p.)
W bazie ciągle mam id 0, a pole ID usunąłem. Potrzebuje żeby były różne ID, bo potem będzie link pay.php?id=<id usługi>

Podobne pytania

0 głosów
1 odpowiedź 466 wizyt
0 głosów
1 odpowiedź 612 wizyt
+1 głos
2 odpowiedzi 162 wizyt
pytanie zadane 13 listopada 2020 w SQL, bazy danych przez okti00 Obywatel (1,300 p.)

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...