Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Problem z dodawaniem wartosci do ksiazki telefonicznej
Drokal
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 17.10.2012

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
r4xz
post
Post #2





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Drokal
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 17.10.2012

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


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.

Ten post edytował Drokal 19.11.2012, 09:46:40
Go to the top of the page
+Quote Post
Adis92
post
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 12
Dołączył: 9.01.2009
Skąd: Płock

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


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.

Ten post edytował Adis92 19.11.2012, 17:17:46
Go to the top of the page
+Quote Post
Drokal
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 17.10.2012

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


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ę
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


  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. ?>
Go to the top of the page
+Quote Post
Drokal
post
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 17.10.2012

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


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. (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 00:04