Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z dodawaniem wartosci do ksiazki telefonicznej
Forum PHP.pl > Forum > Przedszkole
Drokal
Witam
Chce stworzyć ksiazkę telefoniczną, w której bedzie można dodawać i usuwać wartości. Problem w tym ze nie wszystko działa tak jak trzeba - nic nie dodaje, nic nie usuwa
  1. <?PHP
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. ?>
  5. <?php
  6. mysql_connect ("localhost", "root", "aaa") or die ("Fak ju");
  7. mysql_select_db ("ksiazka") or die ("fakju2");
  8. if (isset($_POST['action']) && isset($_POST[$action]) =='add')
  9. {
  10. $imie_f=$_POST['imie'];
  11. $nazw_f=$_POST['nazwisko'];
  12. $tele_f=$_POST['telefon'];
  13. if ( $imie_f && $nazw_f && $tele_f )
  14. {
  15. $query="INSERT INTO 'ksiazkatelefoniczna' (imie,nazwisko,telefon) VALUES ('$imie_f', '$nazw_f', '$tele_f')";
  16. $wynik=mysql_query($query) or die(mysql_error());
  17. if ($wynik)
  18. {
  19. print ("Dodales poprawnie dane");
  20. }
  21. else
  22. { print ("nie dodales danych cioto"); }
  23. }
  24. else
  25. {print ("Wypełnij wszystko cioto!");
  26. }
  27. }
  28. elseif (isset($_GET['action']) == 'skasuj')
  29. {
  30. $wynik = mysql_query ("DELETE FROM ksiazkatelefoniczna WHERE nr='".$_GET['id']."';");
  31. }
  32. $wynik = mysql_query ("SELECT * FROM ksiazkatelefoniczna;") or die ("blad");
  33. print ("<TABLE CELLPADDING=5 BORDER=1>");
  34. print ("<TR><TD>Imię</TD><TD>Nazwisko</TD>");
  35. print ("<TD>telefon</TD><TD>Akcja</TD></TR>");
  36. while ($rekord = mysql_fetch_assoc($wynik))
  37. {
  38. $nr = $rekord['nr'];
  39. $imie = $rekord['imie'];
  40. $nazwisko = $rekord['nazwisko'];
  41. $telefon = $rekord['telefon'];
  42. print ("<TR><TD>$imie</TD><TD>$nazwisko</TD>");
  43. print ("<TD>$telefon</TD>");
  44. print ("<TD><a href=\"dodawanie.php?action=skasuj&id=nr\" TITLE=\"Skasuj wpis!\">usuń</a>");
  45. print ("<TD><TR>");
  46.  
  47. }
  48. print ("</TABLE>");
  49. print '<FORM METHOD="POST"><Nowy rekord:
  50. <INPUT TYPE="hidden" NAME="action" VALUE="add">
  51. <TABLE>
  52. <TR><TD>Imie:</TD><TD><INPUT TYPE="text" NAME="imie"></TD></TR>
  53. <TR><TD>Nazwisko:</TD><TD><INPUT TYPE="text" NAME="nazwisko"></TD></TR>
  54. <TR><TD>Telefon:</TD><TD><INPUT TYPE="text" NAME="telefon"></TD></TR>
  55. </TABLE>
  56. <INPUT TYPE="submit" VALUE="Dodaj">
  57. </FORM>';
  58. ?>



Nie rozumiem czemu nie da sie usuwac wartości mimo ze we wczesniejszej fazie kodu nie było z tym problemu, oto próbka

  1. <?php
  2. mysql_connect ("localhost", "root", "aaa") or die ("Fak ju");
  3. mysql_select_db ("ksiazka") or die ("fakju2");
  4. if(isset($_GET['action'])&& $_GET['action']=='skasuj')
  5. {
  6. $wynik=mysql_query("DELETE FROM ksiazkatelefoniczna WHERE nr='".$_GET['id']."';");
  7. }
  8. $wynik = mysql_query ("SELECT * FROM ksiazkatelefoniczna;") or die ("blad");
  9. print ("<TABLE CELLPADDING=5 BORDER=1>");
  10. print ("<TR><TD>Imię</TD><TD>Nazwisko</TD>");
  11. print ("<TD>Telefon</TD><TD>Akcja</TD></TR>");
  12. while ($rekord = mysql_fetch_assoc($wynik))
  13. {
  14. $nr = $rekord['nr'];
  15. $imie = $rekord['imie'];
  16. $nazwisko = $rekord['nazwisko'];
  17. $telefon = $rekord['telefon'];
  18. print ("<TR><TD>$imie</TD><TD>$nazwisko</TD>");
  19. print ("<TD>$telefon</TD>");
  20. print ("<TD><a href=wyswietlanie.php?action=skasuj&id=$nr\" TITLE=\"Skasuj wpis!\">Wypiernicz</a>");
  21. print ("<TD><TR>");
  22. }
  23. print ("</TABLE");
  24. ?>


Nie wiem czy to ja nie dostrzegam jakiegoś małego szczegółu czy co, wiem ze kombinuje z tym juz sporo, wiele tematów naczytalem i dalej nic
r4xz
1.
  1. if (isset($_POST['action']) && isset($_POST[$action]) =='add') - a to co za zwierzę? :)


2. SQLInjection

ad 1.
  1. if( isset($_POST) && $_POST['action'] == 'add' ) //proponuję taki zapis


ad 2.
google smile.gif
Drokal
Potwór ewoluuje, bo szukałem sposobu żeby nie wyświetlało błędów.

AD.1 Niestety i ten zapis nic nie daje.
Notice: Undefined index: action

AD.2 Własnie googluje ;]

Dodam ze rozkminiłem usuwanie. Teraz mam problem tylko z poprawnym dodawaniem.
Nie wyświetla żadnych błędów, ale też nie chce dodać wartości.
Adis92
Jak dla mnie błąd leży w zapytaniu if dokładniej tutaj:
  1. <?php
  2. if (isset($_POST['action']) && isset($_POST[$action]) =='add')
  3. ?>

jak widzisz isset($_POST[$action]) =='add' sprawdzasz czy $_POST[$action] == 'add'.
Zakłam że tam powinno być $_POST['action'] == 'add' chyba że masz gdzieś zadeklarowaną wartość $action.

  1. <?php
  2. if(isset($_POST['action']) && $_POST['action'] =='add'){
  3. $imie_f = mysql_real_escape_string($_POST['imie']);
  4. $nazw_f = mysql_real_escape_string($_POST['nazwisko']);
  5. $tele_f = mysql_real_escape_string($_POST['telefon']);
  6. if ( $imie_f && $nazw_f && $tele_f ){
  7. $query="INSERT INTO 'ksiazkatelefoniczna' (imie,nazwisko,telefon) VALUES ('$imie_f', '$nazw_f', '$tele_f')";
  8. $wynik=mysql_query($query) or die(mysql_error());
  9. if ($wynik){
  10. print ("Dodales poprawnie dane");
  11. }else{
  12. print ("nie dodales danych cioto");
  13. }
  14. }else{
  15. print ("Wypełnij wszystko cioto!");
  16. }
  17. }
  18. ?>

Edit: Kopiowałem Twój kod i zapomniałem usunąć isset z zapytania if.
Drokal
Drogi przyjacielu. Jestem zielony, i widze tu coś dziwnego. Dokładniej to 2 linijka twojego kodu
  1. if(isset($_POST['action']) && isset($_POST['action']) =='add')


Mam dwie takie same opcje isset($_POST['action']), czyli bezsensownym jest dodawanie tego znaku &&.
Zapytasz mnie pewnie - to skąd do jasnej cholery masz ten &&
Sugerowałem sie działającym kodem który usuwał elementy z bazy danych,
  1. elseif (isset($_GET['action'])&& $_GET['action'] == 'skasuj')


Wiem że pewnie robie jakieś podstawowe błędy o których nie mam zielonego pojęcia, jeśli tak jest prosze o zwrócenie uwagi, i najlepiej wytłumaczenie ;]

Aha i jeszcze jedno. Odkryłem kilka braków w moim kodzie, miedzy innymi brak znacznika ">" w 49 linijce kodu.
  1. print '<FORM METHOD="POST"><Nowy rekord:

Gdy uzupełnie braki pojawia mi sie zamiast tabelki coś takiego:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''ksiazkatelefoniczna'('imie','nazwisko','telefon') VALUES ('test','test','123123' at line 1

Rozumiem ze to jest błąd składni SQL, ale teraz pytanie takie - czy może to być spowodowane błędnym kodem php?
Bo próbowałem zmieniać sam kod, wedle SQL jaki podejrzałem w phpmyadmin i dalej pojawia się ten sam błąd

Myśle ze z mojej strony tyle, proszę o poradę
b4rt3kk
  1. <?PHP
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. ?>
  5. <?php
  6. mysql_connect ("localhost", "root", "aaa") or die ("Fak ju");
  7. mysql_select_db ("ksiazka") or die ("fakju2");
  8. if (isset($_POST['action']) && isset($_POST[$action]) =='add') // ów warunek nigdy nie zostanie spełniony, ponieważ funkcja isset zwraca wartość true / false, nigdy nie będzie to add, cały kod zawarty w if nie zadziała
  9. {
  10. $imie_f=$_POST['imie'];
  11. $nazw_f=$_POST['nazwisko'];
  12. $tele_f=$_POST['telefon'];
  13. if ( $imie_f && $nazw_f && $tele_f ) // ten warunek również nie ma sensu, ponieważ pod te zmienne przypisujesz wartości (zakładam, że są to string), które również nie zwracają true/false
  14. {
  15. $query="INSERT INTO 'ksiazkatelefoniczna' (imie,nazwisko,telefon) VALUES ('$imie_f', '$nazw_f', '$tele_f')"; // błędne zapytanie, niepotrzebne apostrofy przy nazwie tabeli
  16. $wynik=mysql_query($query) or die(mysql_error());
  17. if ($wynik)
  18. {
  19. print ("Dodales poprawnie dane");
  20. }
  21. else
  22. { print ("nie dodales danych cioto"); }
  23. }
  24. else
  25. {print ("Wypełnij wszystko cioto!");
  26. }
  27. }
  28. elseif (isset($_GET['action']) == 'skasuj') // jak wyżej, warunek nigdy nie jest spełniony, gdyż zwracane wartości isset to true/false, nigdy 'skasuj'
  29. {
  30. $wynik = mysql_query ("DELETE FROM ksiazkatelefoniczna WHERE nr='".$_GET['id']."';"); // zupełnie niepotrzebnie nawydziwiałeś z łączeniem string-ów
  31. }
  32. $wynik = mysql_query ("SELECT * FROM ksiazkatelefoniczna;") or die ("blad");
  33. print ("<TABLE CELLPADDING=5 BORDER=1>");
  34. print ("<TR><TD>Imię</TD><TD>Nazwisko</TD>");
  35. print ("<TD>telefon</TD><TD>Akcja</TD></TR>");
  36. while ($rekord = mysql_fetch_assoc($wynik))
  37. {
  38. $nr = $rekord['nr'];
  39. $imie = $rekord['imie'];
  40. $nazwisko = $rekord['nazwisko'];
  41. $telefon = $rekord['telefon'];
  42. print ("<TR><TD>$imie</TD><TD>$nazwisko</TD>");
  43. print ("<TD>$telefon</TD>");
  44. print ("<TD><a href=\"dodawanie.php?action=skasuj&id=nr\" TITLE=\"Skasuj wpis!\">usuń</a>"); // bardzo niebezpieczna praktyka w ten sposób przekazywać id rekordu do skasowania, nie przekazujesz i tak zmiennej w GET, a napis 'nr'
  45. print ("<TD><TR>");
  46.  
  47. }
  48. print ("</TABLE>");
  49. print '<FORM METHOD="POST"><Nowy rekord:
  50. <INPUT TYPE="hidden" NAME="action" VALUE="add">
  51. <TABLE>
  52. <TR><TD>Imie:</TD><TD><INPUT TYPE="text" NAME="imie"></TD></TR>
  53. <TR><TD>Nazwisko:</TD><TD><INPUT TYPE="text" NAME="nazwisko"></TD></TR>
  54. <TR><TD>Telefon:</TD><TD><INPUT TYPE="text" NAME="telefon"></TD></TR>
  55. </TABLE>
  56. <INPUT TYPE="submit" VALUE="Dodaj">
  57. </FORM>';
  58. ?>


Poniższy kod będzie działać, choć zalecałbym Ci optymalizację.

  1. <?PHP
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. ?>
  5. <?php
  6. mysql_connect ("localhost", "root", "aaa") or die ("Fak ju");
  7. mysql_select_db ("ksiazka") or die ("fakju2");
  8. if (isset($_POST['action']) && $_POST['action'] =='add')
  9. {
  10. $imie_f=$_POST['imie'];
  11. $nazw_f=$_POST['nazwisko'];
  12. $tele_f=$_POST['telefon'];
  13. if ( $imie_f != '' && $nazw_f != '' && $tele_f != '' )
  14. {
  15. $query="INSERT INTO ksiazkatelefoniczna (imie,nazwisko,telefon) VALUES ('$imie_f', '$nazw_f', '$tele_f')";
  16. $wynik=mysql_query($query) or die(mysql_error());
  17. if ($wynik)
  18. {
  19. print ("Dodales poprawnie dane");
  20. }
  21. else
  22. { print ("nie dodales danych cioto"); }
  23. }
  24. else
  25. {print ("Wypełnij wszystko cioto!");
  26. }
  27. }
  28. elseif (isset($_GET['action']) AND $_GET['action'] == 'skasuj')
  29. {
  30. $wynik = mysql_query ("DELETE FROM ksiazkatelefoniczna WHERE nr='{$_GET['id']}'");
  31. }
  32. $wynik = mysql_query ("SELECT * FROM ksiazkatelefoniczna") or die ("blad");
  33. print ("<TABLE CELLPADDING=5 BORDER=1>");
  34. print ("<TR><TD>Imię</TD><TD>Nazwisko</TD>");
  35. print ("<TD>telefon</TD><TD>Akcja</TD></TR>");
  36. while ($rekord = mysql_fetch_assoc($wynik))
  37. {
  38. $nr = $rekord['nr'];
  39. $imie = $rekord['imie'];
  40. $nazwisko = $rekord['nazwisko'];
  41. $telefon = $rekord['telefon'];
  42. print ("<TR><TD>$imie</TD><TD>$nazwisko</TD>");
  43. print ("<TD>$telefon</TD>");
  44. print ("<TD><a href=\"dodawanie.php?action=skasuj&id=$nr\" TITLE=\"Skasuj wpis!\">usuń</a>");
  45. print ("<TD><TR>");
  46.  
  47. }
  48. print ("</TABLE>");
  49. print '<FORM METHOD="POST"><Nowy rekord:
  50. <INPUT TYPE="hidden" NAME="action" VALUE="add">
  51. <TABLE>
  52. <TR><TD>Imie:</TD><TD><INPUT TYPE="text" NAME="imie"></TD></TR>
  53. <TR><TD>Nazwisko:</TD><TD><INPUT TYPE="text" NAME="nazwisko"></TD></TR>
  54. <TR><TD>Telefon:</TD><TD><INPUT TYPE="text" NAME="telefon"></TD></TR>
  55. </TABLE>
  56. <INPUT TYPE="submit" VALUE="Dodaj">
  57. </FORM>';
  58. ?>
Drokal
Królu złoty nie wiem jak to zrobiłes, ale naprawiłes mój bład, i zepsutą psychikę. Dziękuje serdecznie, niech Bóg Ci w dzieciach po stokroć wynagrodzi. biggrin.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.