MySQL, dodawanie rekordów, działało i przestało działać

Witam!

Bawiłem się tym

http://webmade.org/porady/sesje-php-sys … owania.php

ale niestety w pewnym momencie strona przestała działać, nie uważam ażebym coś “popsuł”.

Oto widok tabelki w mysql:

CREATE TABLE IF NOT EXISTS `users` (

  `user_id` int(11) NOT NULL auto_increment,

  `user_login` varchar(30) default NULL,

  `user_haslo` varchar(30) default NULL,

  `i` varchar(30) default NULL,

  `n` varchar(30) default NULL,

  `e` varchar(30) default NULL,

  `t` varchar(30) default NULL,

  `d` varchar(30) default NULL,

  `g` varchar(30) default NULL,

  PRIMARY KEY (`user_id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

a to kod:

<?php

if($_POST["send"]==1){	//sprawdzanie czy formularz został wysłany

	if(!empty($_POST["login"]) && !empty($_POST["haslo"])){	//oraz czy uzupełniono wszystkie dane

		if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($_POST["login"]."'"))))ShowForm("Użytkownik o podanym loginie już istnieje!!!"); // sprawdzanie czy użytkownik o podanej nazwie już istnieje

		else{


			mysql_query("insert into 'users' values(NULL, '".htmlspecialchars($_POST["login"])."', '".htmlspecialchars($_POST["haslo"])."')"); // zapisywanie rekordu do bazy



			echo "Wszystko OK!";

			}

	}

	else ShowForm("Nie uzupełniono wszystkich pól!!!");

}

else ShowForm();

mysql_close(); //zamykanie połączenia z bazą

?>

I teraz tak, z powyższą rozbudowaną tabelką mi nie działa (a powinno wpisywać login, hasło i ID), a działa natomiast z oryginalną to jest np.

CREATE TABLE `users` (

`user_id` INT NOT NULL AUTO_INCREMENT ,

`user_login` VARCHAR( 30 ),

`user_haslo` VARCHAR( 30 ),

PRIMARY KEY ( `user_id` ) 

);

Co ciekawe nie wyświetla mi się żaden błąd, tylko kwerenda się wykonuje, a w bazie nic nie ma :frowning:

Nie rozumiem o co tutaj chodzi. Przecież wszystkie pola nie muszą być uzupełniane.

Dodane 10.12.2010 (Pt) 6:40

Chyba jednak musi być tyle wpisów ile jest kolumn… bo teraz udało mi się odaplić.

Z tego co zauważyłem problem może dotyczyć użycia zapytanie sql ponieważ zapytanie typu INSERT ma dwa rodzaje:

INSERT INTO table VALUES (val1, val2, val3)

i w tym wypadku val1 idzie do kolumny pierwszej, val2 do drugiej itd dalej - muszą być wartości dla wszystkich kolumn.

Drugi przypadek:

INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)

i w tym przypadku wybieramy które kolumny są uzupełniane a które nie.

Mam nadzieje że wyjaśniłem sytuacje. A tutaj link do pewniejszego źródła:

http://www.w3schools.com/sql/sql_insert.asp

Hm, dzięki. Czyli w moim przypadku muszę uzupełnić wszystkie kolumny?

W twoim przypadku zamiast zapytania

mysql_query("insert into 'users' values(NULL, '".htmlspecialchars($_POST["login"])."', '".htmlspecialchars($_POST["haslo"])."')"); // zapisywanie rekordu do bazy

powinieneś napisać zapytanie

mysql_query("insert into 'users' ('user_login', 'user_haslo') values( '".htmlspecialchars($_POST["login"])."', '".htmlspecialchars($_POST["haslo"])."')"); // zapisywanie rekordu do bazy

i to zapytanie będzie działać dla podstawowej tabeli i dla tej rozszrzonej.

Rozumiem, a moje zapytanie jest nie poprawne? jeżeli w tej chwili uzupełniam wszystkie kolumny?