PHP + MySql // nie dodaje rekordów

0

Witam!
Piszę sobie panel administracyjny do swojej strony, i napotkałem na problem. Wcześniej wszystko działa, a teraz, gdy chcę dodać przez panel nowego członka do tabeli members, to polecenie mysql+query niestety zwraca błąd, dałem go w warunku if, wykonuje się else, więc coś musi być nie tak, niestety ja się tego błędu nie dopatrzyłem.

oto ta część kodu, wartości zmeinnych name, join, course, cdate wysyłane są z poprzedniego formularza:

 

                                $name = $_POST['name'];
				$join = $_POST['join'];
				$course = $_POST['course'];
				$cdate = $_POST['cdate'];

				if(mysql_query("INSERT INTO members SET name='$name', join='$join', course='$course', cdate='$cdate'"))
				{
				echo 'Pomyślnie dodano członka!';
				}
				else
				{
				echo 'Błąd!';
				}

i struktura tabeli:

 

CREATE TABLE `members` (
`id`  int(50) NOT NULL AUTO_INCREMENT ,
`name`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`join`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`course`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`cdate`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=2
ROW_FORMAT=COMPACT
;

0

Może join jest traktowane jako słowo kluczowe; co zwraca mysql_error?


PS funkcje `mysql_*` są **zdeprecjonowane** - nie używaj ich.
0

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'join='1940', course='fsadas',cdate='dasda'' at line 1 Błąd!

0

Najwyraźniej join jest traktowane jak słowo kluczowe.
Spróbuj otoczyć ten identyfikator apostrofami.

0

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''join'='1940', course='dsadsa',cdate='dasda'' at line 1 Błąd!

Nadal to samo

0

Wykonaj sobie
mysql_query("TWOJE zAPYTANKO") or die (mysql_error());
Wtedy powinno ci wyskoczyć co masz źle. Oczywiście po polsku(jeżeli masz polską wersje swojego apache).

0

Właśnie tak wygląda mysql_error() : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''join'='1234', course='fsadas',cdate='dasda'' at line 1
i nie wiem za bardzo o co chodzi. Próbowałem to poprawić, ale nic mi się nie udało zrobić. Nawet zmieniałem nazwę zmiennej join wszędzie (php, tabela) na cjoin, ale dalej jakiś błąd.

0

ale dalej jakiś błąd.

Jak zmieniłeś tę nazwę to masz ten sam błąd, czy już inny?

Btw, zrób echo "INSERT INTO members SET name='$name', join='$join', course='$course', cdate='$cdate'"; i pokaż, co wyświetla.

0

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''cjoin'='1234', course='fsadas',cdate='dasda'' at line 1 jak widać to samo.

INSERT INTO members SET name='Imie', join='2006', course='lsjad', cdate='das'

Tak, jest apostrof, nie skopiowałem przez nieuwagę. :)

0

A w ogóle łączysz się w tym pliku z bazą ? :D

0

oczywiście, jeśli brakuje połączenia, to nawet formularz się nie wyświetli.
Przy każdym odświeżeniu, ponownym załadowaniu pliku sprawdza warunek, jeśli nie ma połączenia, to wyświetla odpowiedni błąd.

1

A zmieniłeś nazwę tego pola w mysql? i usuń to ' przy nazwie pola.

0

tabela nazywa się members. A nazwę komórki zmieniłem na cjoin i taki błąd zwraca.

0

hzmzp pomógł. Musiało być faktycznie z tym join coś źle, cjoin bez ' działa. :) wielkie dzięki.

0

Ja używam troszkę innej konstrukcji query

"INSERT INTO members VALUES('', '$name', '$join', '$course', '$cdate')"

takie coś mi zadziałało

Dodaje po kolei wartości do kolejnych komórek. (Nie wiem czy dobrze to zdanie napisałem ale powinieneś zrozumieć)

2

Boże, ludzie, podstawy!

INSERT INTO members SET `name`='$name', `join`='$join', `course`='$course', `cdate`='$cdate'

INSERT SET jest dostępne tylko w MySQL bodajże, raczej powinieneś przyzwyczaić się do rozwiniętej wersji z posta wyżej, która zadziała nawet po zmianie struktury:

INSERT INTO members (`name`, `join`, `course`, `cdate`) VALUES ('$name', `'$join', '$course', '$cdate')

Takie coś pomoże Ci też w przypadku gdybyś potrzebował wstawić np. 1000 wierszy:

INSERT INTO tabela (`nazwa`, `inna_kolumna`) VALUES ('dzek', '666'), ('damian', '123'), ('łysy', 'kurczak') -- itd.

1000 INSERTÓW potrwa (w zależności od struktury, ilości danych i mocy serwera) czasem nawet kilka sekund - to powyżej - ułamki sekundy. Oczywiście trzeba mieć na uwadze, że duże porcje danych trzeba rozbić czasem na kilka, bo jest też limit długości jednego zapytania.

0

"Spróbuj otoczyć ten identyfikator apostrofami. " - ale nie ' , a `.
To pracuje )

1 użytkowników online, w tym zalogowanych: 0, gości: 1