Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie danych do bazy - PHP + MySQL - gdzie błąd?
Forum PHP.pl > Forum > Przedszkole
kozak1987
Napisałem z pomocą wójka google skrypt do wysyłania danych pobranych z formularza do bazy dancyh.
Użytkownik, hasło i nazwa bazy zmieniona specjalnie tak więc nie tu leży problem. biggrin.gif
Na początek plik łączenia z bazą danych:
Kod
<?php
function connection() {
        // host
        $mysql_host = "localhost";
        // user
        $mysql_user = "user";
        // hasło
        $mysql_pass = "pass";
        // nazwa bazy
        $mysql_db = "baza";
        // nawiązujemy połączenie z serwerem MySQL
        @mysql_connect($mysql_host, $mysql_user, $mysql_pass)
        or die('Brak połączenia z serwerem MySQL.');
        // łączymy się z bazą danych
        @mysql_select_db($mysql_db)
        or die('Błąd wyboru bazy danych.');
}
?>



Formularz:
Kod
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Dodawanie rekordów </title></head>
<body>

  Dzien:
  <form method="POST" action="dodaj.php">
        <select name="dzien">
                <option>1</option>
                <option>2</option>
                <option>3</option>
                <option>4</option>
                <option>5</option>
                <option>6</option>
                <option>7</option>
                <option>8</option>
                <option>9</option>
                <option>10</option>
                <option>11</option>
                <option>12</option>
                <option>13</option>
                <option>14</option>
                <option>15</option>
                <option>16</option>
                <option>17</option>
                <option>18</option>
                <option>19</option>
                <option>20</option>
                <option>21</option>
                <option>22</option>
                <option>23</option>
                <option>24</option>
                <option>25</option>
                <option>26</option>
                <option>27</option>
                <option>28</option>
                <option>29</option>
                <option>30</option>
                <option>31</option>
        </select>

  Miesiąc:
        <select name="miesiac">
                <option>1</option>
                <option>2</option>
                <option>3</option>
                <option>4</option>
                <option>5</option>
                <option>6</option>
                <option>7</option>
                <option>8</option>
                <option>9</option>
                <option>10</option>
                <option>11</option>
                <option>12</option>
        </select>

  Rok:
        <select name="miesiac">
                <option>2011</option>
                <option>2012</option>
                <option>2013</option>
                <option>2014</option>
                <option>2015</option>
                <option>2016</option>
                <option>2017</option>
                <option>2018</option>
                <option>2019</option>
                <option>2020</option>
                <option>2021</option>
                <option>2022</option>
        </select>

  Zajętość:
        <select name="zajetosc">
                <option>1</option>
                <option>2</option>
        </select>
</form>
<input type="submit" value="wyślij!">
</form>
</body>
</html>



Plik pobierający dane z formularza i wysyłający je do bazy:
Kod
<?php
require("connection.php");
connection();
$dzien= $_POST['dzien'];
$miesiac = $_POST['miesiac'];
$rok = $_POST['rok'];
$zajetosc = $_POST['zajetosc'];

$zapytanie = "INSERT INTO formularz (dzien, miesiac, rok, zajetosc) VALUES('".$dzien."','".$miesiac."','".$rok."','".$zajetosc."')";
mysql_query($zapytanie);
?>


Mam tabele z 5 wierszami: id jako primary key i auto increment, dzien, miesiac - obie int(2), rok int (4) i zajetosc int(1).
Po ustawieniu na sztywno danych ładnie śmiga, problem w tym, że nie pobiera sobie danych z formularza co jest zdefiniowane zmiennymi dzien, miesiac itp.
Ma ktoś jakiś pomysł co tu jest nie tak?
wookieb
Przenoszę.
Poczytaj Temat: Jak poprawnie zadac pytanie
wizu
Zwróć uwagę na koniec HTML:
  1. </form>
  2. <input type="submit" value="wyślij!">
  3. </form>
  4. </body>
  5. </html>


Kończysz form-a, wyświetlasz przycisk submit i kończysz drugiego - nieistniejącego forma. Przeglądarka więc po wciśnięciu przycisku wysyła pustego forma. Zmień to na:

  1. <input type="submit" value="wyślij!">
  2. </form>
  3. </body>
  4. </html>
jg44
1) To, co napisał przedmówca, to pierwszy błąd w Twoim skrypcie.

2) Drugi - błąd w zapytaniu.

Cytat(kozak1987 @ 29.10.2011, 11:52:43 ) *
Plik pobierający dane z formularza i wysyłający je do bazy:
Kod
<?
...
$zapytanie = "INSERT INTO formularz (dzien, miesiac, rok, zajetosc) VALUES('".$dzien."','".$miesiac."','".$rok."','".$zajetosc."')";
mysql_query($zapytanie);
?>


Jeśli wybierasz jakieś dane z formularza i zapisujesz je do zmiennej (czyli np. $dzien = $_POST['dzien'], itd. ...), to w zapytanie powinno wyglądać tak:
  1. $zapytanie = "INSERT INTO formularz (dzien, miesiac, rok, zajetosc) VALUES('$dzien','$miesiac','$rok','$zajetosc')";

Zmienne mają być tylko między apostrofami - a tak jak Ty zrobiłeś, to też można, ale wtedy musiałbyć 'wyciągać' dane z formularza i bezpośrednio wstawiać je do zapytania, bez zapisywania do zmiennej, czyli:
  1. $zapytanie = "INSERT INTO formularz (dzien, miesiac, rok, zajetosc) VALUES('".$_POST['dzien']."', '".$_POST['miesiac']."', '".$_POST['rok']."', '".$_POST['$zajetosc']."')";


3) Moim zdaniem naciśnięcie guzika w Twoim formularzu nic nie zdziała - kod wstawienia zapytania powinien znaleźć się w if'ie, który sprawdza, czy przycisk został naciśnięty.
Czyli powinno być tak:
  1. <?php
  2. require("connection.php");
  3. connection();
  4.  
  5. if(isset($_POST['wyslany']))
  6. {
  7. $dzien= $_POST['dzien'];
  8. $miesiac = $_POST['miesiac'];
  9. $rok = $_POST['rok'];
  10. $zajetosc = $_POST['zajetosc'];
  11.  
  12. $zapytanie = "INSERT INTO formularz (dzien, miesiac, rok, zajetosc) VALUES('".$dzien."','".$miesiac."','".$rok."','".$zajetosc."')";
  13. mysql_query($zapytanie);
  14. }
  15. ?>

gdzie $_POST['wyslany'] to nazwa przycisku. Oznacza to, że do linijki
  1. <input type="submit" value="wyślij!">

powinieneś dopisać jeszcze nazwę, czyli:
  1. <input type="submit" name="wyslany" value="wyślij!" />


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.