Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]update po ajaxie - problem z kodem.
Forum PHP.pl > Forum > Przedszkole
casperii
Witam, panowie, próbuje poradzić sobie z problemem update poprzez AJAX.
Poniżej kod:

  1. require_once("db.php");
  2. $db = new mysqli($dbhost, $dbname, $dbpass, $dbuname);
  3. $db -> query("SET NAMES 'utf8'");
  4.  
  5. if(!$db) {
  6.  
  7. echo 'Nie można się połączyć z bazą danych.';
  8. }else{
  9. $ex = $db->query("SELECT * FROM `product` WHERE `id`=73");
  10.  
  11. if(mysql_num_rows($ex) == 1){
  12. $status = 'success';
  13. $message = 'super udało się';
  14. }else{
  15. $status = "error";
  16. $message = "Brak ID.";
  17. }
  18.  
  19. $data = array(
  20. 'status' => $status,
  21. 'message' => $message
  22. );
  23.  
  24. echo json_encode($data);
  25. }


I teraz tak jak wpiszę na sztywno numer ID to cały czas mi nie znajduje i wyświetla json komunikat BRAK ID. Co jest panowie?
Comandeer
Zapytanie robisz przez mysqli, a liczbę wyników chcesz pobrać przez mysql
casperii
Coś chyba robię źlę:

  1. $ex = $db->query("SELECT * FROM `product` WHERE `id`=".$id."");
  2. //if($ex->num_rows == 0){
  3. if(mysqli_num_rows($ex) == 0){
  4. $insert = $db->query("INSERT INTO `product` (
  5. `name`
  6. ) VALUES (
  7. '".$name."')") or die('zapytanie :'.$sql.' blad:'.mysql_error());
  8. if($insert){
  9. $status = "success";
  10. $message = "Dane zostały pomyślnie zapisane.";
  11. }else{
  12. $status = "error";
  13. $message = "Ooops, Mamy problem!";
  14. }
  15.  
  16. }else{
  17. $status = "error";
  18. $message = "Już istnieje.";
  19. }



Teraz mi dodaje wszystko do bazy... nawet jak ID istnieje w bazie. co robię źle ?

Ma ktoś jakieś pomysły co robię źle ?
nospor
Skoro do wykonania zapytania uzywasz obiektowego mysqli, to i w calej reszcie masz uzywac obiektowego... nie mieszaj....

$ex->num_rows

Poza tym sprawdzales czy $id jest poprawne? Czy zapytanie sie wykonalo poprawnie? Bo z kody wynika ze nie.... A juz nie raz ci podsylalem ten link
Temat: Jak poprawnie zada pytanie
casperii
@nospor , gdybyś nie zauważył w moim powyższym kodzie robiłem i:

  1. if($ex->num_rows == 0){


jak i:

  1. if(mysqli_num_rows($ex) == 0){


Oba z mizernym skutkiem. ID istnieje i jest dobrze odebrane.

  1. $message = "Już istnieje $id. ";
nospor
$message = "Już istnieje $id. ";
ten komunikat nie pojawia sie ani razu, tak przynajmniej twierdzisz, wiec nie wiem jakic cudem sprawdziles to ID...

w podanym przeze mnie linku masz wszystko opisane. Chcesz pomocy, to sie do niego zastosuj. Nie, to dalej walcz z durnym i banalnym problemem.
casperii
@nospor dalej nie rozumiemy sięsmile.gif Opiszę Ci może to szczegółowo. Mam 2 formy wysyłane jsonem. Pierwszy dodaje do bazy, który aktualizuje.

Poniżej kod:

  1. <?php
  2. require_once("db.php");
  3. $db = new mysqli($dbhost, $dbname, $dbpass, $dbuname);
  4. $db -> query("SET NAMES 'utf8'");
  5.  
  6. if(!$db) {
  7.  
  8. echo 'Nie można się połączyć z bazą danych.';
  9. }
  10. else{
  11. $form1 = $db->real_escape_string($_POST['form1']);
  12. $form2 = $db->real_escape_string($_POST['form2']);
  13.  
  14.  
  15. if(!empty($from1)){
  16. $name_product = $db->real_escape_string($_POST['name_product']);
  17.  
  18. if(empty($product)){
  19. $status = "error";
  20. $message = "Nie wpisano nazwy produktu.";
  21. }else{
  22. $ex = $db->query("SELECT * FROM `product` WHERE `product`=".$name_product."");
  23. if($ex->num_rows == 0){
  24. $insertSignup = $db->query("INSERT INTO `product` (
  25. `name_firm`
  26. ) VALUES (
  27. '".$name_product."')") or die('zapytanie :'.$sql.' blad:'.mysql_error());
  28. if($insert){
  29. $status = "success";
  30. $message = zapisano.";
  31. }else{
  32. $status = "error";
  33. $message = "Ooops, Mamy problem!";
  34. }
  35.  
  36. }else{
  37. $status = "error";
  38. $message = "Już istnieje taki produkt.";
  39. }
  40. }
  41. }
  42.  
  43. elseif(!empty($form2)){
  44. $id = $db->real_escape_string($_POST['id']);
  45. $name_product = $db->real_escape_string($_POST['name_product']);
  46.  
  47. if(empty($product)){
  48. $status = "error";
  49. $message = "Nie wpisano nazwy produktu.";
  50. }else{
  51. $ex = $db->query("SELECT * FROM `product` WHERE `id`=".$id."");
  52. if($ex->num_rows == 1){
  53. $insert = $db->query("UPDATE `product` SET `product`='".$name_product."' WHERE `id`=".$id." LIMIT 1") or die('zapytanie :'.$sql.' blad:'.mysql_error());
  54. if($insert){
  55. $status = "success";
  56. $message = "zapisano.";
  57. }else{
  58. $status = "error";
  59. $message = "Ooops, Mamy problem!";
  60. }
  61.  
  62. }else{
  63. $status = "error";
  64. $message = "Brak ID chociaż go pokazuje $id.";
  65. }
  66. }
  67.  
  68. }
  69. $data = array(
  70. 'status' => $status,
  71. 'message' => $message
  72. );
  73.  
  74. echo json_encode($data);
  75. exit;
  76. }
  77. ?>


Dodać doda, ale nie aktualizuje, pluje się , że nie znany ID chociaż w message wyświetli prawidłowo jego ID.
nospor
Njapierw pokazujesz kod do dodawania, a potem z tekstem ze sie nie rozumiemy i wyjezdzasz z kodem do update....

Niewazne. Podany przeze mnie link jest przydatny niezaleznie czy robisz update czy insert. Po raz kolejny nad wyraz grzecznie Cię proszę, byś się do niego zastosował.
casperii
@nospor, z cały szacunkiem do Twojej osoby, ale nie widzę powiązania mojego problemu z tym co jest w linku: Jak poprawnie zadać pytanie

Po pierwsze nie zmienię już tematu - jeżeli do tego nawiązujesz.
Po drugie podane wskazówki tyczą się do mysql , nie mysqli.

Jeżeli coś źle zrozumiałem to przepraszam.
nospor
Cytat
Po drugie podane wskazówki tyczą się do mysql , nie mysqli.

facepalmxd.gif
Bo to są ogolne wskazowki... jesli uzywasz czegos innego niz mysql to masz to przerobic na to co uzywasz. Odrobina myslenia jest tu naprawdę milę widziana... To po pierwsze.
Po drugie: zrobienie var_dump() jest niezalezne od mysql czy mysqli.
casperii
@nospor ciężki Ty masz charakter. Nie rozumiem, twojego toku myślenia, czy nie umiesz mi pomóc w znalezieniu problemu, czy masz taki kaprys by mi w tym nie pomóc.
Nie wymagam od nikogo gotowca. Bo 99% jest zrobione. Oczekuje , że ktoś mnie na kieruję w tym mysqli (przeskoczyłem wczoraj z mysql) i podpowie co może być.

Dlaczego do bazy dodaje kolejne rekordy mimo, że taki produkt istnieje i dlaczego nie aktualizuje produktu mimo, że widzi ID.

W mysql powinno to wyglądać tak i działa na 100%:
  1. $ex = mysql_query("SELECT * FROM `product` WHERE `product`=".$name_product."");
  2. if(mysql_num_rows($ex) == 0){
  3. $insert = mysql_query("INSERT INTO `product` (`product`) VALUES ('".$name_product."')") or die('zapytanie :'.$sql.' blad:'.mysql_error());
  4. }else{
  5. //nie powiodło się
  6. }


tak w mysqli coś chrzani i dodaje duplikaty do bazy, tak jakby nie brał warunku if pod uwagę. Natomiast w update nie działa aktualizacja, wywala że nie znany ID:

  1. $ex = $db->query("SELECT * FROM `product` WHERE `product`=".$name_product."");
  2. if($ex->num_rows == 0){
  3. $insert = $db->query("INSERT INTO `product` (`product`) VALUES ('".$name_product."')") or die('zapytanie :'.$sql.' blad:'.mysql_error());
  4. }else{
  5. //nie powiodło się
  6. }
nospor
Cytat
, czy nie umiesz mi pomóc w znalezieniu problemu, czy masz taki kaprys by mi w tym nie pomóc.
Ale to nie moja wina, ze nie chcesz sie zastosowac do podanych wskazowek. Nie zwalajaj wiec prosze tego na moj charakter tylko na swoje lenistwo.
Po to powstał temat do ktorego cie odeslalem, by poraz tysieczny nie powtarzac kazdemu z osobna "a teraz zrob to, a teraz zrob tamto". Wszystko to zostało zebrane w jednym temacie, Ale zawsze znajdzie sie taki ktos jak ty, ktory czeka az specjalnie dla niego poraz tysiac pierwszy ludzie powtorzą to specjalnie dla niego.

Cytat
W mysql powinno to wyglądać tak i działa na 100%:
Po kodzie co teraz wstawiles widac jak na dloni, ze to nie dziala, wiec nie pisz ze dziala na 100%. A blad bys zobaczyl jakbys łaskawie dostosował kod do wskazowek w podanym temacie.

ps: swoją drogą co post to podajesz co roz to inne kody.
com
hint :
Wykonaj sobie to np w phpmyadmin i spr czy się wykona, bo na moje oko nie wink.gif
"SELECT * FROM `product` WHERE `product`=".$name_product.""

Poza tym var_dump o którym wspomina nospor itd wink.gif
nospor
@com ale ty mu nie hintuj. On to wszystko pokolei ( i inne ciekawe rzeczy) ma napisane w temacie, do ktorego go odeslalem. No nie przyzwyczajajcie go, ze jak poplacze troche zamiast zrobic co ma zrobic, to dostanie odpowiedż...
com
nospor wiem ale nie liczyłbym że raczy tam jednak zajrzeć, proponowałbym zmienić może trochę tytuł tematu bo część jak widzi że ma linka do tematu jak poprawnie zadać pytanie to tam chyba wgl nie zagląda, przynajmniej ja się już z tym spotkałem tu smile.gif
nospor
Sadzac po jego paru postach, jak to pomarudzil, ze pare rzeczy z tego tematu jest nie do wykonania, sądze, ze jednak tam zajrzał wink.gif Tu nie jest problemem nazwa tematu, tu problemem jest totalne lenistwo i podejscie w stylu "mi sie należy".
casperii
Problem rozwiązany głupi i na pierwszy rzut oka nie zauważalny błąd:

  1. $ex = $db->query("SELECT * FROM `product` WHERE `product`=".$name_product."");


poprawnie:

  1. $ex = $db->query("SELECT * FROM `product` WHERE `product`='".$name_product."'");


pewnie łapał biały znak i przy dodawaniu widział już inny wyraz i dlatego dodawał, a przy aktualizowaniu nie widział wyrazu z białym znakiem (spacją).

Oczekiwałem raczej podpowiedzi,warunek jest dobry, zobacz w zapytanie lub coś w ten deseń.
com
owszem ja wiem, że większość liczy na to że dostaną na tacy całe rozwiązanie, bo poco maja się męczyć jak można naskrobać temat na forum, ale jak sam napisał czy ma zmienić temat, dodałbym po prosty "jak poprawnie zadać pytanie oraz przygotować środowisko" wink.gif
nospor
Jaki bialy znak.... toz w tym konkretnym zapytaniu problemem był brak apostrofów... Teksty w zapytaniu bierze sie w apostrofy a bez nich baza rzucała ci bledem ale go nie widziales, bo nie raczyles go wyswietlic pomimo ze prosilem cie o to wielokrotnie.

@com done smile.gif
com
o dzięki smile.gif casperii zajrzyj sobie do jakiegoś kursu mysql, bo troszkę brak Ci podstaw smile.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.