Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Dodawanie rekordu
Forum PHP.pl > Forum > Przedszkole
shado
Mam taki skrypt:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. if($send=='Wyslij') {
  7.  
  8. mysql_connect ("localhost","root","");
  9. mysql_select_db (praca);
  10. $zapytanie = "INSERT INTO pracownicy SET zarobek='$zarobek'";
  11. $wykonaj = mysql_query ($zapytanie);
  12. echo "<BR>Dane dodane prawidłowo";
  13.  
  14. }
  15. ?>
  16. <form method="get" action="add.php">
  17. <div align="center">
  18. <center>
  19. <table border="1" width="50%" bordercolorlight="#000000" cellspacing="0" cellpadding="0">
  20. <tr>
  21. <td width="50%"><font size="2" face="Verdana">Ilość:</font></td>
  22. <td width="50%" align="center"><input type="text" name="zarobek" size="20"></font></td>
  23. </table>
  24. <p align="center"><font size="2" face="Verdana"><input type="submit" value="Wyslij" name="send"><input type="reset" value="Kasuj" name="B2"></font></td>
  25. </center>
  26. </div>
  27. </form>
  28. </body>
  29. </html>


Jednakpo wpisaniu liczby w polu i zatwierdzenia nie wyskakuje żaden błąd ani nic ale w bazie też nie dodaje się ta liczba, co jest źle ? ;d
johny_s
nie ma zdefiniowanej zmiennej $send więc pewnie nawet nie wchodzi do warunku
Pyton_000
$send na $_POST['send']
nospor
@Pyton, ale patrzymy czym jest wysylany form.... nie $_POST a $_GET
Zaś ty shado albo zapozoznaj się z manualem, albo zmien ksiązke na ciut nowszą.
shado
dalej to samo
nospor
ps: przenosze na przedszkole. Tam tez zakladaj swoje ewentualne kolejne tematy

Bo ma być $_GET a nie jak pisal pyton $_POST
kartin
Pewnie to co jest w if nie jest w ogóle wykonywane.

Dyrektywa register_globals od PHP w wersji 4.2 jest domyślnie ustawiona na off a od wersji 5.4 została usunięta.

Zamiast $send użyj $_GET['send'], to samo ze zmienną $zarobek.

  1. $zapytanie = "INSERT INTO pracownicy SET zarobek='$zarobek'";
  2. $wykonaj = mysql_query ($zapytanie);
  3. echo "<BR>Dane dodane prawidłowo";


Skoro praca jest ciągiem znaków a nie stałą to powinno się ją ująć w apostrofy lub cudzysłowy.
Wygląda, że w zapytaniu brakuje WHERE i odpowiedniego warunku. Obecne zapytanie ustawi zarobek dla wszystkich wierszy w tabeli.

Zobacz co się stanie jeśli na stronie w polu zarobek ktoś wpisze: 1000' , *inna_kolumna* = 'abc tylko zamiast *inna_kolumna* wstaw nazwę innej kolumny z tabeli pracownicy. Poczytaj sobie np. o funkcji mysql_real_escape_string()

Komunikat "Dane dodane prawidłowo" wyświetli się nawet gdy wykonanie zapytania nie powiedzie się. Zrób:
  1. if ($wykonaj !== FALSE) {
  2. //tu wyświetlenie komunikatu
  3. }
shado
Prawie działa tylko że zamiast panu Kowalskiemu który ma 100zł dodać np. 10, to tworzy nowy rekord
nospor
Bo robisz INSERT... INSERT dodaje rekordy. Do akutalizacji rekordow uzywa się UPDATE
shado
Teraz zamiast dodać to wyzerowało
kartin
Po $zapytanie = "UPDATE ... dopisz sobie gdzieś w nowej linii
  1. echo $zapytanie;
to zobaczysz jakie zapytanie jest wykonywane.
W zapytaniu UPDATE masz $zarobek czy $_GET['zarobek']?
shado
Tak to wygląda:
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. if($_GET['send']=='wyslij') {
  7.  
  8. mysql_connect ("localhost","root","");
  9. mysql_select_db (praca);
  10. $zapytanie = "UPDATE INTO pracownicy SET zarobek=$_GET['zarobek']";
  11. $wykonaj = mysql_query ($zapytanie);
  12. echo "<BR>Dane dodane prawidłowo";
  13.  
  14. }
  15. ?>
  16. <form method="get" action="add.php">
  17. <div align="center">
  18. <center>
  19. <table border="1" width="50%" bordercolorlight="#000000" cellspacing="0" cellpadding="0">
  20. <tr>
  21. <td width="50%"><font size="2" face="Verdana">Ilość:</font></td>
  22. <td width="50%" align="center"><input type="text" name="zarobek" size="20"></font></td>
  23. </table>
  24. <p align="center"><font size="2" face="Verdana"><input type="submit" value="wyslij" name="send"><input type="reset" value="Kasuj" name="B2"></font></td>
  25. </center>
  26. </div>
  27. </form>
  28. </body>
  29. </html>


jednak jak mam:

  1. $_GET['zarobek']

To wywala mi błąd:
  1. Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

Jak usunę ' ' czyli:
  1. $_GET[zarobek]

to nie mam błedu jednak nic nie dodaje
nospor
Bo zeby dodac, to trzeba dodac, a nie przypisac.....

nie: zarobek=$_GET[zarobek]
a: zarobek=zarobek + $_GET[zarobek]

No i poza tym musi byc WHERE, gdzie okreslisz jakiemu rekordowi chcesz dodac. Bez WHERE doda do wszystkich rekordow
shado
Wielkie dzięki, działa biggrin.gif

ps. tak ma dodawać do wszystkich rekordów wink.gif
nospor
Cytat
ps. tak ma dodawać do wszystkich rekordów
Normalnie full wypas wink.gif A na przyszlosc staraj sie sam odrozniac dodawanie od przypisywania wink.gif
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.