Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Dodawanie graczy do bazy poprzez formularz
RedDevil
post 17.01.2012, 17:51:39
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Witam, od niedawna zacząłem bardziej interesować się PHP i MySQL. Chiałbym zrobć taką mini baze zawoników (piłka nożna). W phpMyAdmin dodałem baze: bpl i tabele zawodnik. Mam gotowy formularz:
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  2. <title>Dodawanie nowego gracza do bazy</title>
  3. </head>
  4.  
  5. <h1>Nowy gracz do bazy.</h1>
  6.  
  7. <form action="wstaw.php" method="post">
  8. <table border="0">
  9. <tr><td>Imię</td><td><input type="text" name="imie" maxlenght="20" size="20"</td></tr>
  10. <tr><td>Nazwisko</td><td><input type="text" name="nazwisko" maxlenght="20" size="20"</td></tr>
  11. <tr><td>Klub</td><td><input type="text" name="klub" maxlenght="30" size="20"</td></tr>
  12. <tr><td>Narodowość</td><td><input type="text" name="narodowosc" maxlenght="20" size="20"</td></tr>
  13. <tr><td>Data urodzenia</td><td><input type="text" name="dataur" maxlenght="20" size="20"</td></tr>
  14. <tr><td>Pozycja</td><td><input type="text" name="pozycja" maxlenght="20" size="20"</td></tr>
  15. <tr><td>Preferowana noga</td><td><input type="text" name="noga" maxlenght="20" size="20"</td></tr>
  16. <tr><td>Wzrost</td><td><input type="text" name="wzrost" maxlenght="20" size="20"</td></tr>
  17. <tr><td>Waga</td><td><input type="text" name="waga" maxlenght="20" size="20"</td></tr>
  18. <tr><td colspan="2"><input type="submit" value="OK"</td></tr>
  19. </table>
  20. </form>
  21. </body>
  22. </html>


I skrypcik:
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  2. <html>
  3. <head>
  4. <title>Dodawanie zawodnika do bazy - wyniki</title>
  5. </head>
  6. <body>
  7. <h1>Dodawanie zawodnika do bazy - wyniki</h1>
  8. <?php
  9. //krotkie nazwy zmiennych
  10. $imie=$_POST['imie'];
  11. $nazwisko=$_POST['nazwisko'];
  12. $klub=$_POST['klub'];
  13. $narodowosc=$_POST['narodowosc'];
  14. $dataur=$_POST['dataur'];
  15. $pozycja=$_POST['pozycja'];
  16. $noga=$_POST['noga'];
  17. $wzrost=$_POST['wzrost'];
  18. $waga=$_POST['waga'];
  19.  
  20. if (!$imie || !$nazwisko || !$klub || !$narodowosc || !$dataur || !$pozycja || !$noga || !$wzrost || !$waga) {
  21. echo "Nie podano wszystkich potrzebnych danych.<br />"
  22. ."Wróć do poprzedniej strony i spróbuj ponownie.";
  23. }
  24. $imie = addslashes($imie);
  25. $nazwisko = addslashes($nazwisko);
  26. $klub = addslashes($klub);
  27. $narodowosc = addslashes($narodowosc);
  28. $dataur = addslashes($dataur);
  29. $pozycja = addslashes($pozycja);
  30. $noga = addslashes($noga);
  31. $wzrost = addslashes($wzrost);
  32. $waga = addslashes($waga);
  33. }
  34.  
  35. @ $db = new mysqli('localhost', 'root', 'hasło', 'bpl');
  36.  
  37. if (mysqli_connect_errno()) {
  38. echo "Błąd: : Połączenie z bazą nie powiodło sie. Spróbuj jeszcze raz.";
  39. }
  40.  
  41. $zapytanie = "insert into zawodnik values ('".$imie."', '".$nazwisko."', '".$klub."', '".$narodowosc."', '".$dataur."', '".$pozycja."', '".$wzrost."', '".$waga."')";
  42. $wynik = $db->query($zapytanie);
  43.  
  44. if ($wynik) {
  45. echo $db->affected_rows." Gracz zapisany do bazy.";
  46. } else {
  47. echo "Wystąpił błąd. Gracz nie został zapisany do bazy.";
  48. }
  49.  
  50. $db->close();
  51. ?>
  52.  
  53. </body>
  54. </html>


Po wypełnieniu formularza wyskakuje mi wiadomość że "Wystąpił błąd. Gracz nie został zapisany do bazy." to co ja podałem. W czym tkwi problem?

Fotka z bazy:

Messiego dodałem sam ręcznie.
Go to the top of the page
+Quote Post
zdemotywowany
post 17.01.2012, 17:59:05
Post #2





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 15.01.2012

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


Najlepiej wyświetl sobie echem całe zapytanie do abzy danych, a następnie wprowadź je ręcznie do phpMyAdmin. Później masz podane ...syntax error... i zaznaczoną linię, itp., itd. Później pokombinuj tak żeby działało, albo np. wklej nam tutaj przykładowe zapytanie. Nikomu chyba nie chce sprawdzać się całego kodu php skoro można to zrobić na 2 spojrzenia.

  1. "insert into zawodnik values ('$imie', '$nazwisko', '$klub', '$narodowosc', '$dataur', '$pozycja', '$wzrost', '$waga')";


Działa?

Ten post edytował zdemotywowany 17.01.2012, 18:02:57
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 18:06:38
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Cytat
Najlepiej wyświetl sobie echem całe zapytanie do abzy danych, a następnie wprowadź je ręcznie do phpMyAdmin. Później masz podane ...syntax error... i zaznaczoną linię, itp., itd. Później pokombinuj tak żeby działało, albo np. wklej nam tutaj przykładowe zapytanie. Nikomu chyba nie chce sprawdzać się całego kodu php skoro można to zrobić na 2 spojrzenia.

To znaczy? Jak widać jest do dział przedszkole więc... Wczoraj zacząłem z tym robic.
Go to the top of the page
+Quote Post
Kulfon
post 17.01.2012, 18:34:34
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 24.12.2010

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


Wklej do kodu:
  1. echo($zapytanie);


przed:
  1. $wynik = $db->query($zapytanie);


po czym to co echo wypisze skopiuj do phpMyAdmin i w zakładce SQL wpisz to jako zapytanie i napisz czy działa.
(Lub napisz treść błędu, który zwróciła baza)

Ten post edytował Kulfon 17.01.2012, 18:38:56
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 18:39:11
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Wyskoczyło
Cytat
Dodawanie zawodnika do bazy - wyniki

insert into zawodnik values ('Wojciech', 'Chrobak', 'Manchester United', 'Polska', '1996-07-16', 'N Ś', '167', '60')Wystąpił błąd. Gracz nie został zapisany do bazy.
Go to the top of the page
+Quote Post
Kulfon
post 17.01.2012, 18:51:43
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 24.12.2010

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


Możesz jeszcze dać screen struktury bazy danych?
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 18:54:09
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Go to the top of the page
+Quote Post
zdemotywowany
post 17.01.2012, 18:59:58
Post #8





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 15.01.2012

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


Nie mam jakiegoś wielkiego doświadczenia z bazami danych, ale chyba dataur nie może być date. Zależy od formatu chyba, zmień na text lub char i wtedy pokaż co wyjdzie.
Go to the top of the page
+Quote Post
Kulfon
post 17.01.2012, 19:02:24
Post #9





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 24.12.2010

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


Spróbuj zmienić linijkę:
  1. $zapytanie = "insert into zawodnik values ('".$imie."', '".$nazwisko."', '".$klub."', '".$narodowosc."', '".$dataur."', '".$pozycja."', '".$wzrost."', '".$waga."')";


na:
  1. $zapytanie = "INSERT INTO zawodnik VALUES ('".$imie."', '".$nazwisko."', '".$klub."', '".$narodowosc."', '".$dataur."', '".$pozycja."', '".$wzrost."', '".$waga."');";

u mnie po zamienieniu na duże litery zapytania i dodaniu średnika na koniec poszło do bazy.

//EDIT:
tak a pro po:
U mnie data była varchar

Ten post edytował Kulfon 17.01.2012, 19:07:10
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 19:06:22
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Cytat
"insert into zawodnik values

tam gdzie jest zawodnik to ma byc baza czy tabela w bazie?
dalej nie działa :/


#1136 - Column count doesn't match value count at row 1

Ten post edytował RedDevil 17.01.2012, 19:08:58
Go to the top of the page
+Quote Post
Kulfon
post 17.01.2012, 19:07:38
Post #11





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 24.12.2010

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


Tabela
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 19:12:26
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Działa! Lkingsmiley.png
Tam gdzie ty dałeś kod nie było zmiennej $noga

EDIT
A jak zrobic aby kazdy dodany zawodnik mial swoje ID? i aby samo sie zmieniało na 1 wieksze.

Ten post edytował RedDevil 17.01.2012, 19:17:14
Go to the top of the page
+Quote Post
zdemotywowany
post 17.01.2012, 19:22:28
Post #13





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 15.01.2012

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


Na początku w tabeli wstaw

ID int not null primary key auto_increment

a przy wpisywaniu do bazy danych na początku wpisuj NULL

Zmieniłeś wielkość liter i zaczęło działać? To dziwne, bo ja dziś dodawałem do bazy danych wszystko w małych literach i też wgrało.

Ten post edytował zdemotywowany 17.01.2012, 19:25:24
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 19:27:56
Post #14





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Cytat(zdemotywowany @ 17.01.2012, 19:22:28 ) *
Zmieniłeś wielkość liter i zaczęło działać? To dziwne, bo ja dziś dodawałem do bazy danych wszystko w małych literach i też wgrało.

Nie o wielkość liter tylko że nie bylo $noga i id na poczatku bylo wiec nie zgadzaly sie kolumny
Cytat(zdemotywowany @ 17.01.2012, 19:22:28 ) *
a przy wpisywaniu do bazy danych na początku wpisuj NULL

to znaczy gdzie? w skrypcie? moglbys podac kod?
Go to the top of the page
+Quote Post
Kulfon
post 17.01.2012, 19:28:48
Post #15





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 24.12.2010

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


Tak racja przy okazji jeszcze ja się pomyliłem. Tak jak kolega wyżej napisał, tym poleceniem:

  1. ALTER TABLE `zawodnik` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST

ustawisz klucz główny tabeli i wtedy zapytanie będzie wyglądało tak:

  1. INSERT INTO zawodnik VALUES ('NULL', '".$imie."', '".$nazwisko."'......

(zakładka sql w phpmyadmin)
//EDIT:
litery to zmieniłem z przyzwyczajenia: w kodzie php i wsadowo piszę duże w poleceniach, w konsoli z lenistwa małe.

Ten post edytował Kulfon 17.01.2012, 19:30:24
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 19:35:45
Post #16





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


  1. $zapytanie = "INSERT INTO zawodnik VALUES ('NULL', '".$imie."', '".$nazwisko."', '".$klub."', '".$narodowosc."', '".$dataur."', '".$pozycja."', '".$noga."', '".$wzrost."', '".$waga."');";

Tak? bo nie działa
Go to the top of the page
+Quote Post
zdemotywowany
post 17.01.2012, 19:38:34
Post #17





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 15.01.2012

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


Daj strukturę tabeli. Poza tym nie wiem dlaczego utrudniasz życie sobie i nam. Skoro i tak wstawiasz string w "" to interpreter i tak musi sprawdzić czy występują tam zmienne, a ty je łączysz operatorem skoro można w czytelniejszy sposób i nie spowalniający kodu zrobić to w jednym ciągu.
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 19:40:17
Post #18





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Go to the top of the page
+Quote Post
zdemotywowany
post 17.01.2012, 19:42:12
Post #19





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 15.01.2012

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


Nie 'NULL', a NULL
Go to the top of the page
+Quote Post
RedDevil
post 17.01.2012, 19:45:39
Post #20





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.01.2012

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


Działa
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 16.06.2025 - 19:49