Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Dodawanie graczy do bazy poprzez formularz
Forum PHP.pl > Forum > Przedszkole
RedDevil
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.
zdemotywowany
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?
RedDevil
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.
Kulfon
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)
RedDevil
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.
Kulfon
Możesz jeszcze dać screen struktury bazy danych?
RedDevil
zdemotywowany
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.
Kulfon
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
RedDevil
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
Kulfon
Tabela
RedDevil
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.
zdemotywowany
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.
RedDevil
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?
Kulfon
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.
RedDevil
  1. $zapytanie = "INSERT INTO zawodnik VALUES ('NULL', '".$imie."', '".$nazwisko."', '".$klub."', '".$narodowosc."', '".$dataur."', '".$pozycja."', '".$noga."', '".$wzrost."', '".$waga."');";

Tak? bo nie działa
zdemotywowany
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.
RedDevil
zdemotywowany
Nie 'NULL', a NULL
RedDevil
Działa
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.