Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z wpisaniem danych do bazy
Dukov
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Mam pewien problem, napisałem sobie kod php z zapytaniem MySQL, tylko, że nie działa. Znaczy działa ale nie tak jak ja chcę.
  1. <?php
  2. $host = 'host';
  3. $base = 'baza';
  4. $baseuser = 'user';
  5. $basepass = 'haslo';
  6.  
  7. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  8. $test = "wpis";
  9. $query="INSERT INTO webexamples VALUES ('$wpis')";
  10. if (mysqli_query($db_lnk, $query)){
  11. echo "wpisano";
  12. }
  13. else
  14. {
  15. echo "nie wpisane";
  16. }
  17. }
  18. else
  19. {
  20. echo "brak połączenia";
  21. }
  22. $db_lnk -> close();
  23.  
  24. ?>


Cały czas przy
  1. if (mysqli_query($db_lnk, $query)){
  2. echo "wpisano";
  3. }
  4. else
  5. {
  6. echo "nie wpisane";
  7. }

Wyskakuje nie wpisano, nie wiem dlaczego ten warunek przyjmuje wartość false. Wcześniej zczytywałem zmienne z formularza ale teraz to uprościłem, żeby nie mieszać niepotrzebnie. Jak to zapytanie będzie działac, to będę zczytywał z _POST
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 26)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Ciapki i łączenie ciągów już nie obowiązuje?


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


  1. $query="INSERT INTO webexamples VALUES (";
  2. $query.="3";
  3. $query.=")";



Jeszcze trochę to uprościłem - jest dokładnie to samo.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Dla tego że nie podałeś jakie kolumny pakujesz, ergo MySQL oczekuje w VALUES że podasz dane dla WSZYSTKICH kolumn z tabeli....
Go to the top of the page
+Quote Post
Dukov
post
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Tzn. jak mam podac kolumny? Myślałem, że po VALUES będzie wpisywał po kolei, też tak zmieniłem, mam 4 kolumny
  1. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  2.  
  3. $query="INSERT INTO webexamples VALUES (";
  4. $query.="3,'test','test1','test2'";
  5. $query.=")";


Efekt ciągle ten sam, pierwszą mam kolumnę ID jako integer, potem mam 3 kolumny jako TINYTEXT.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zamiast nic nie mowiacego
echo "nie wpisane";

Wyswietl blad bazy danych a wszystko bedzie jasne...
echo mysqli_error($db_lnk);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dukov
post
Post #7





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Z powyższymi sobie poradziłem idealnie dzięki Waszej pomocy, natomiast mam problem z tym:

  1. $query="INSERT INTO webexamples VALUES (";
  2. $query.="5, $_POST['title'], '$test1', 'dtest','test2'";
  3. $query.=")";


Znowu się zawiesiłem, chodzi o tę nieszczęsną tablice _POST

A tu jest błąd
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /home/dukov/ftp/testphp/sendscript.php on line 11

Ktoś pomoże?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


{$_POST['title']}
Go to the top of the page
+Quote Post
Dukov
post
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


O już coś do przodu ale natknąłem się na kolejny problem, wartość zamiast jako wartość traktuje jako nazwę kolumny

  1. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  2. $test = 4;
  3. $test1 ='test';
  4. $query="INSERT INTO webexamples VALUES (";
  5. $query.="5, {$_POST['title']} , '$test1', 'dtest','test2'";
  6. $query.=")";


Tak to przepisałem, a wyświetla taki błąd:

Unknowncolumn 'wpis' in 'field list'
Go to the top of the page
+Quote Post
casperii
post
Post #10





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


nie masz w bazie w tabeli kolumny o nazwie wpis
Go to the top of the page
+Quote Post
Dukov
post
Post #11





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Mistrzu, wiem. Ale ja chce, żeby traktowało mi to jako wartość, a nie jako nazwę kolumny. O tym piszę zresztą.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak chcesz, by wartosc traktowano jako tekst a nie nazwe kolumny, to powiedz dla mysql ze to tekst... Kurcze, uzyj apostofow, tak jak to robisz przy innych wartosciach tekstowych. Jedna wartosc bierzesz w apostrof, inna nie i zdziwiony :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
InosU31
post
Post #13





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Dziwnie masz to napisane - brakuje mi tu nazw kolumn ja mam u siebie tak:

  1.  
  2. INSERT INTO tabela
  3. (id_bledu, email, text_zgloszenia)
  4. VALUES
  5. ('".$_POST['oferta_id']."', '".$_POST['email_blad']."', '".$_POST['tekstarea']."')
  6.  
  7.  
  8.  



Pozdrawiam


Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@ InosU31 nazwy kolumn nie sa potrzebne.

Owszem, sa przydatne, ale nie sa potrzebne. Problemem tutaj jest brak apostrofow jak pisalem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
InosU31
post
Post #15





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


@nospor dzięki za info nie wiedziałem o tym ;-) Dałbym Ci łapkę ale nie widzę takiej opcji ;-)

Napisałem swoją odpowiedź żeby Dukov wiedział jak zapisać te apostrofy ;-)

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jesli faktycznie masz tak u siebie, to polecam lekture SQL INJECTION smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dukov
post
Post #17





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Dobra dzięki panowie. PHP się ucze, a ostatnio mam ciężki okres i wszystko do mnie dociera w połowie. Się ogarnę i będę kombinował. Ale jeśli ma ktoś chęć mi napisać tą linijke, to byłbym wdzięczny. Bo uczę się tego z książek, neta po pracy, przed pracą i na przerwie o ile mam czas, więc proszę o wyrozumiałość smile.gif
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przeciez dostales juz odpowiedzi jak masz to poprawic


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post
Post #19





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Poczytaj o http://php.net/manual/pl/mysqli.prepare.php wtedy odejdzie problem łączenia ciągów i zabezpieczeń.


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #20





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Dostałem, zmieniłem tak jak wjkeił przykład InosU31

  1. <?php
  2. $host = 'sql.dukov.nazwa.pl';
  3. $base = 'dukov';
  4. $baseuser = 'dukov';
  5. $basepass = '1Kurwa2Kurwa';
  6.  
  7. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  8. $test = 4;
  9. $test1 ='kutas';
  10. $query="INSERT INTO webexamples
  11. (title, desci, link)
  12. VALUES (";
  13. $query.="('".$_POST['title']."', '".$_POST['opis']."', '".$_POST['link']."')";
  14.  
  15. if (mysqli_query($db_lnk, $query)){
  16. echo "wpisano";
  17. }
  18. else
  19. {
  20. echo mysqli_error($db_lnk);
  21. }
  22. }
  23. else
  24. {
  25. echo "do dupy";
  26. }
  27. $db_lnk -> close();
  28.  
  29. ?>


Teraz wywala taki błąd

Youhave an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 3

Tym razem muszę mieć nazwy kolumn, bo w tabeli mam pierwzą kolumnę ID jako auto increment.
Go to the top of the page
+Quote Post
viking
post
Post #21





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


  1. if ($stmt = mysqli_prepare($db_lnk, "INSERT INTO webexamples (title, desci, link) VALUES(?,?,?)")) {
  2. mysqli_stmt_bind_param($stmt, 'sss', $_POST['title'], $_POST['opis'], $_POST['link']);
  3. mysqli_stmt_execute($stmt);
  4. if (mysqli_stmt_affected_rows($stmt) > 0) echo "wpisano";
  5. }


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #22





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pomijajac odpowiedz vikinga, ktora jak najbardziej jest ok, to naprawde uwazasz ze to:
VALUES ((
jest ok?

InosU31 podal ci poprawny kod z jednym (
VALUES (

ja rozumiem, ze jestes poczatkujacy, ale kurcze, CTRL+C, CTRL+V to naprawde zadna magia


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dukov
post
Post #23





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Wiesz, ja wcześniej skopiowałem czyjś kod z VALUES (, a zostało moje (. Nie, nie jest ok, przeoczyłem to. Dzięki wszystkim, znowu brak trochę czasu ale teraz myślę, już sobie z tym poradzę. Choć zastanawiam się czy nie porwałem się na zbyt skomplikowane rzeczy jak na sam początek, bo wcześniej moim największym osiągnięciem było wysłanie emaila, znaczy skopiować kod z neta i wpisać swoje pola. Dzięki Viking za gotowca ale rozumiem, że
  1. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  2.  
  3. $query="INSERT INTO webexamples
  4. (title, desci, link)
  5. VALUES
  6. ('".$_POST['title']."', '".$_POST['opis']."', '".$_POST['link']."')";


To jest teraz ok? To jest kod Inosa z moimi polami.

Ten post edytował Dukov 25.05.2017, 15:38:52
Go to the top of the page
+Quote Post
viking
post
Post #24





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Oprócz nieczytelnego śmietnika i podatności na sql injection, jeśli działa jest ok wink.gif


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #25





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Nie wiem czy działa, czy nie, bo nie sprawdziłem, za chwilę sprawdzę, póki co skaczę z radości, że zadziałał skrypt z drugiego tematu. Szczerze na początku myślałem, eee co tam php, banał, w szkole miałem MySQL ostatnio non stop coś w JavaScripcie pisze ale teraz dopiero widzę jak mało wiem i ile jeszcze mnie czeka drogi.

  1.  
  2. if ($stmt = mysqli_prepare($db_lnk, "INSERT INTO webexamples (title, desci, link) VALUES(?,?,?)")) {
  3. mysqli_stmt_bind_param($stmt, '>>>sss<<<', $_POST['title'], $_POST['opis'], $_POST['link']);
  4. mysqli_stmt_execute($stmt);
  5. if (mysqli_stmt_affected_rows($stmt) > 0) echo "wpisano";
  6. }
  7.  


Zaznaczyłem 'sss' w drugiej linii, skąd to wziąłeś? Rozumiem, że mogę to bez problemu skasować. A dwa, to pierwszą kolumnę w bazie mam ID jako auto increment, żeby z drugiego skryptu pozbyć się inkrementacji zmiennej i, rozumiem, że to pole w rekordzie nie ma wpływu na to zapytanie i będzie tak czy tak działać?

EDIT

Działa z 'sss' nie rozumiem jednak skąd to?

Ten post edytował Dukov 25.05.2017, 15:55:15
Go to the top of the page
+Quote Post
viking
post
Post #26





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Wszystko jest opisane w dokumentacji http://php.net/manual/pl/mysqli-stmt.bind-param.php
Oznacza to że, w tym wypadku, poszczególne dane są stringami. Gdybyś tam wstawiał ręcznie do pola auto increment to zapewne było by to `iss`.
https://prophp.pl/advice/show/14/jak_czytac...mentacje_php%3F

Ten post edytował viking 25.05.2017, 16:01:43


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #27





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


No i znowu jest problem, a więc wszystko fajnie działało, chciałem dodać jeszcze jedną wartość do bazy
  1. if ($stmt = mysqli_prepare($db_lnk, "INSERT INTO webexamples (title, desci, link) VALUES(?,?,?,?)")) {
  2. mysqli_stmt_bind_param($stmt, 'sss', $_POST['title'], $_POST['opis'], $_POST['link'], $randstring);


$randstring, to losowo wygenerowany ciąg znaków alfanumerycznych, w bazie mam pola ID, title, desci, link. ID jako auto increment, co już wcześniej mówiłem.

wywala taki błąd Column count doesn't match value count at row 1. Ktoś coś?

EDIT działa, zaś przeoczyłem mała pierdołe

Ten post edytował Dukov 26.05.2017, 16:02:00
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 11:12