Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wpisaniem danych do bazy
Forum PHP.pl > Forum > Przedszkole
Dukov
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
Kshyhoo
Ciapki i łączenie ciągów już nie obowiązuje?
Dukov
  1. $query="INSERT INTO webexamples VALUES (";
  2. $query.="3";
  3. $query.=")";



Jeszcze trochę to uprościłem - jest dokładnie to samo.
Pyton_000
Dla tego że nie podałeś jakie kolumny pakujesz, ergo MySQL oczekuje w VALUES że podasz dane dla WSZYSTKICH kolumn z tabeli....
Dukov
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.
nospor
Zamiast nic nie mowiacego
echo "nie wpisane";

Wyswietl blad bazy danych a wszystko bedzie jasne...
echo mysqli_error($db_lnk);
Dukov
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?
Pyton_000
{$_POST['title']}
Dukov
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'
casperii
nie masz w bazie w tabeli kolumny o nazwie wpis
Dukov
Mistrzu, wiem. Ale ja chce, żeby traktowało mi to jako wartość, a nie jako nazwę kolumny. O tym piszę zresztą.
nospor
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 :/
InosU31
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


nospor
@ InosU31 nazwy kolumn nie sa potrzebne.

Owszem, sa przydatne, ale nie sa potrzebne. Problemem tutaj jest brak apostrofow jak pisalem
InosU31
@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
nospor
Jesli faktycznie masz tak u siebie, to polecam lekture SQL INJECTION smile.gif
Dukov
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
nospor
Przeciez dostales juz odpowiedzi jak masz to poprawic
viking
Poczytaj o http://php.net/manual/pl/mysqli.prepare.php wtedy odejdzie problem łączenia ciągów i zabezpieczeń.
Dukov
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.
viking
  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. }
nospor
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
Dukov
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.
viking
Oprócz nieczytelnego śmietnika i podatności na sql injection, jeśli działa jest ok wink.gif
Dukov
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?
viking
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
Dukov
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
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.