Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: if else - wybierz table do której wstawić dane
Forum PHP.pl > Forum > Przedszkole
pela222
Cześć,

Do pliku fetchleads.php przekazuję wartość $subsidary = $_POST['subsidary']; równą "wex" lub "dub". Zmienna pozwala pobrać dane z CRM dla odowiedniego użytkownika:
  1. /* user related parameter */
  2. if ($subsidary == 'wex') {
  3. define("AUTHTOKEN", "mojtoken");
  4. }
  5. elseif ($subsidary == 'dub') {
  6. define("AUTHTOKEN", "mojtoken1");
  7. }

wybór działa i dane są pobierane odpowiednio i wstawiane do tabeli "rightone_crm.leads"

Teraz potrzebuję wstawić dane do tabeli mysql. Caly kod działa prawidłowo, jednak potrzebuje zdefiniować, aby dane dla "wex" były wstawione do tabeli rightone_crm.leads natomiast dane dla "dub" to tabeli rightone_crm.leadsltd.
  1. if ($subsidary == 'wex') {
  2. $query = "replace into rightone_crm.leads (id, firstname, lastname) value ";
  3. }
  4. elseif ($subsidary == 'dub') {
  5. $query = "replace into rightone_crm.leadsltd (id, firstname, lastname) value ";
  6. }

No i tutaj już jest problem bo to nie działą. Proszę o podpowiedz dlaczego?
PS.
Próbowałem zastosować if else dla całego kodu (od miejsca łączenia z moim CRM aż do momentu wstawiania danych do tabeli mysql i też klops).
nospor
Doczekam kiedys czasow, ze nie bedzie nic nie mowiacego "nie dziala" tylko normalny opis co sie dzieje źle?

Co ci nie dziala? Ciagle ci wchodzi w IF? Ciagle ci wchodzi w ELSE? A moze jeszcze cos innego?
Jesli ciagle ci wchodzi w IF lub w ELSE, znaczy ze masz tam złe wartosci. Sprawdz.

ps: problem nie ma zadnego związku z mysql. Przenosze
pela222
w oknie przegladarki mam:
dla subsidary = wex
  1. 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 ''624745000000780017','Adrian','Adryjanek','1989-09-12','Carey Glass','Glass Work' at line 1

dla subsidary = dub
  1. 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 ''1224189000000180007','Ewa Anna','Gwizdon','1961-10-17','St. Gabriels Nursing Ho' at line 1

no wiec jak mam napisane "SQL syntax" to myślę sobie że to ma coś do czynienia z MySQL. :-) ale z racji na znikomą wiedzę pozostaje mi się z tobą zgodzić.
Czy ten komunikat rzuca nowe światło na problem?

Ps. Wyświetlone danę to pierwszy wiersz (najnowszy rekord w CRM leads - odpowiedno dla wex i dub).


Ps2. Czy ciągle mi chwodzi w if? ciągle mi wchodzi w else? jak to sprawdzić?
To jest różnica miedzy tobą a mną. Ale jak bym wiedział co i jak sprawdzić to bym nie pytał :-) Dzięki za wyrozumiałość.
nospor
Tak, teraz to ma związek z mysql.... Ale z twojego pierwszego opisu wynikalo, ze masz problem z IF, a to juz z mysql nie mialo zadnego związku... Ciezko od razu napisac jakie się ma bledy? Naprawde trzeba o to zawsze pytac kazdego z osobna?

Pokaz jak wygląda cale wygenerowane zapytanie, bo tam gdzies jest blad. Pamietaj, ze wartosci nalezy brac w () czyli
...value (wart1, wart2)
a nie
...value wart1, wart2
pela222
No to może zapodam cały kod. Nie chciałem wcześniej bo myślałem że monogość kodu (który w większości nie ma związsku z moim problem) odstraszy potencjalnych chętnych do pomocy :-)
  1. <?php
  2. $subsidary = $_POST['subsidary'];
  3. /* NOTE: Define your mysql database parameters in moduleDependant class */
  4.  
  5. /* Constant Declarations */
  6. define("TARGETURL", "https://crm.zoho.com/crm/private/xml/Leads/getRecords");
  7.  
  8. /* user related parameter */
  9. if ($subsidary == 'wex') {
  10. define("AUTHTOKEN", "token1");
  11. }
  12. elseif ($subsidary == 'dub') {
  13. define("AUTHTOKEN", "token2");
  14. }
  15.  
  16. define("SCOPE", "crmapi");
  17.  
  18. /* create a object */
  19. $utilObj = new Utilities();
  20.  
  21.  
  22. /* set parameters */
  23. $parameter = "";
  24. $parameter = $utilObj->setParameter("scope", SCOPE, $parameter);
  25. $parameter = $utilObj->setParameter("authtoken", AUTHTOKEN, $parameter);
  26. $parameter = $utilObj->setParameter("selectColumns", "Leads(LEADID,First Name,Last Name)", $parameter);
  27.  
  28. /* Call API */
  29. $response = $utilObj->sendCurlRequest(TARGETURL, $parameter);
  30.  
  31. $utilObj->parseXMLandInsertInDB($response);
  32.  
  33. class Utilities {
  34.  
  35. public function setParameter($key, $value, $parameter) {
  36. if ($parameter === "" || strlen($parameter) == 0) {
  37. $parameter = $key . '=' . $value;
  38. } else {
  39. $parameter .= '&' . $key . '=' . $value;
  40. }
  41. return $parameter;
  42. }
  43.  
  44. public function parseXMLandInsertInDB($xmldata) {
  45. $xmlString = <<<XML
  46. $xmldata
  47. XML;
  48. $xml = simplexml_load_string($xmlString);
  49. if (isset($xml->result)) {
  50. $modeuleDependantObj = new moduleDependant();
  51. $output = $modeuleDependantObj->insertInDB($xml);
  52. } else if (isset($xml->error)) {
  53. echo "Error code: " . $xml->error->code . "<br/>";
  54. echo "Error message: " . $xml->error->message;
  55. }
  56. }
  57.  
  58. public function sendCurlRequest($url, $parameter) {
  59. try {
  60. /* initialize curl handle */
  61. $ch = curl_init();
  62. /* set url to send post request */
  63. curl_setopt($ch, CURLOPT_URL, $url);
  64. /* allow redirects */
  65. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  66. /* return a response into a variable */
  67. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  68. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);// Turn off the server and peer verification
  69. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  70. /* times out after 30s */
  71. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  72. /* set POST method */
  73. curl_setopt($ch, CURLOPT_POST, 1);
  74. /* add POST fields parameters */
  75. curl_setopt($ch, CURLOPT_POSTFIELDS, $parameter);
  76. /* execute the cURL */
  77. $result = curl_exec($ch);
  78. curl_close($ch);
  79. return $result;
  80. } catch (Exception $exception) {
  81. echo 'Exception Message: ' . $exception->getMessage() . '<br/>';
  82. echo 'Exception Trace: ' . $exception->getTraceAsString();
  83. }
  84. }
  85. }
  86. class moduleDependant {
  87. /* Define your mysql database parameters */
  88.  
  89. private $host = "localhost";
  90. private $username = "joomla";
  91. private $password = "joomla";
  92.  
  93. public function insertInDB($xml) {
  94. $numberOfRecords = count($xml->result->Leads->row);
  95. /* $records[row value][field value] */
  96. $records[][] = array();
  97. for ($i = 0; $i < $numberOfRecords; $i++) {
  98. $numberOfValues = count($xml->result->Leads->row[$i]->FL);
  99. for ($j = 0; $j < $numberOfValues; $j++) {
  100. switch ((string) $xml->result->Leads->row[$i]->FL[$j]['val']) {
  101. /* Get attributes as element indices */
  102. case 'LEADID':
  103. $records[$i]['LEADID'] = (string) $xml->result->Leads->row[$i]->FL[$j];
  104. break;
  105. case 'First Name':
  106. $records[$i]['First Name'] = (string) $xml->result->Leads->row[$i]->FL[$j];
  107. break;
  108. case 'Last Name':
  109. $records[$i]['Last Name'] = (string) $xml->result->Leads->row[$i]->FL[$j];
  110. break;
  111. }
  112. }
  113. }
  114.  
  115. /* Inserting in database */
  116. $connection = mysql_connect($this->host, $this->username, $this->password) or die(mysql_error());
  117. if ($subsidary == 'wex') {
  118. $query = "replace into rightone_crm.leads (id, firstname, lastname) value ";
  119. }
  120. elseif ($subsidary == 'dub') {
  121. $query = "replace into rightone_crm.leadsltd (id, firstname, lastname) value ";
  122. }
  123. for ($k = 0; $k < count($records); $k++) {
  124. if ($k == 0) {
  125. $query .= "('" . $records[$k]['LEADID'] . "','" . $records[$k]['First Name'] . "','" . mysql_real_escape_string($records[$k]['Last Name']) . "')";
  126. }
  127. if ($k > 0) {
  128. $query .= ", ('" . $records[$k]['LEADID'] . "','" . $records[$k]['First Name'] . "','" . mysql_real_escape_string($records[$k]['Last Name']) . "')";
  129. }
  130. }
  131. $result = mysql_query($query, $connection) or die(mysql_error());
  132. if (isset($result) && mysql_affected_rows($connection) == count($records)) {
  133. echo "Data's are inserted in database successfully.<br/><br/> ";
  134.  
  135. /* Table structure of inserted data, you can check inserted data by uncommenting a below section */
  136. /*
  137.   $insertedTable = "<table cellspacing=0 cellpadding='4px' border=1>";
  138.   $insertedTable .= "<tr><td>Lead ID</td><td>First Name</td><td>Last Name</td><td>Company</td></tr>";
  139.   for ($k = 0; $k < count($records); $k++) {
  140.   $insertedTable .= "<tr><td>" . $records[$k]['LEADID'] . "</td><td>" . $records[$k]['First Name'] . "</td><td>" . $records[$k]['Last Name'] . "</td><td>" . $records[$k]['Company'] . "</td></tr>";
  141.   }
  142.   $insertedTable .= "</table>";
  143.   echo $insertedTable;
  144.   */
  145. } else {
  146. echo 'Some error while inserting in database';
  147. }
  148. }
  149.  
  150. }
  151. ?>
nospor
Jedyne co odstrasza to zle opisywanie problemu tongue.gif

skoro dodajesz kilka wartosci, to powinno byc moze VALUES a nie VALUE. Jesli to nie pomoze, to proszę po raz kolejny o pokazanie jak wyglada wygenerowane zapytanie....

nie: $result = mysql_query($query, $connection) or die(mysql_error());
a: $result = mysql_query($query, $connection) or die('Zapytanie wyglada tak: '.$query.' A tak wyglada blad:'.mysql_error());
pela222
Co do VALUE vs VALUES rozumiem że tutaj:
  1. $query = "replace into rightone_crm.leads (id, firstname, lastname, dob, company, occupation, income, spousename, spouselastname, spousedob, spousecompany, spouseoccupation, spouseincome, street, area, city, state, child1name, child1dob, child2name, child2dob, child3name, child3dob, child4name, child4dob) values ";

zmiana nic nie daje. Taka sama odpowiedź, czyli wyświetla teraz wszystkie rekordy odczytane z CRM a błąd ten sam.
  1. Zapytanie wyglada tak: ('1224189000000180007','Ewa Anna','Gwizdon','1961-10-17','St. Gabriels Nursing Home','Chef','','Maciej Jan','Pawlowski','1970-01-14','Onsite Refeuling','HGV Driver','32400','11 Ballyhoy Avenue','','Raheny, Dublin 5','Dublin','Kacper Pawlowski','1995-02-04','Krystian Pawlowski','2000-07-30','','','',''), ('1224189000000174021','Izabella','Imołczyk','','','','0','','','','','','0','16 Devlin Street','Fermoy','Fermoy','Co.Cork','','','','','','','',''), ('1224189000000174011','Dorota','Malec','1983-03-17','','','','','','1983-01-11','','','','','','Letterkenny','Co. Donegal','Tomek?','2007-02-03','','','','','',''), ('1224189000000174007','Adam','Wickowski','1978-12-24','','','','','','','','','','','','Galway','Co. Galway','','','','','','','',''), ('1224189000000165001','Mariusz','Mariusz','1979-05-07','','Cleaner In Meat Factory','','Partnerka','','','','','','','','','Co. Leitrim','','','','','','','',''), ('1224189000000162093','Krystian','Aleksander','1979-10-18','Burke Shipping Group','HMV Driver','36400','','','','','','','30 Kilmore Avenue','Coolock','Dublin 17','Co.Dublin 17','','','','','','','',''), ('1224189000000158027','Ernest','Luft','','','Welder','','','','','','','','56 Riverwalk','','Dublin','','','','','','','','',''), ('1224189000000157070','AA','Testowy','','','','0','','','','','','0','','','','','','','','','','','',''), ('1224189000000148001','Justyna','Dybas','','','','','','','','','','','','','Dublin','Co.Dublin','','','','','','','',''), ('1224189000000144281','Krzysztof','Reczek','','TKCCC','Garage Owner','0','Agnieszka','','','','','0','51 Burnell Green','Northern Cross','Dublin 17','Dublin','','','','','','','','') A tak wyglada blad: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 ''1224189000000180007','Ewa Anna','Gwizdon','1961-10-17','St. Gabriels Nursing Ho' at line 1


Dodam to co już pisałem. Jak usunę warunek if else tutaj:
  1. /* Inserting in database */
  2. $connection = mysql_connect($this->host, $this->username, $this->password) or die(mysql_error());
  3. $query = "replace into rightone_crm.leads (id, firstname, lastname, dob, company, occupation, income, spousename, spouselastname, spousedob, spousecompany, spouseoccupation, spouseincome, street, area, city, state, child1name, child1dob, child2name, child2dob, child3name, child3dob, child4name, child4dob) value ";

to kod działa prawidłowo i wstawia wszystkie dane (dla token1 i token2) do bazy rightone_crm.leads. Problem, że tak nie ma być :-(
nospor
Z tego wynika, ze ci nie wszedl ani w IF ani w ELSEIF, wiec to jest blad w PHP wink.gif
Mowilem, bys sprawdzil. Zrobienie var_dump naprawde nie jest jakims tam wyczynem


  1. echo 'To zawiera zmienna:';
  2. var_dump($subsidary);
  3. if ($subsidary == 'wex') {
  4.  
  5. $query = "replace into rightone_crm.leads (id, firstname, lastname) value ";
  6.  
  7. }
  8.  
  9. elseif ($subsidary == 'dub') {
  10.  
  11. $query = "replace into rightone_crm.leadsltd (id, firstname, lastname) value ";
  12.  
  13. }

Pokaz co zwraca
Turson
Nie zauważyłeś, że twoje zapytanie jest niekompletne? Pewnie nadpisujesz sobie zmienną
pela222
To zawiera zmienna:NULL

Czyli jak zrobić żeby zmienna się nie nadpisywała?
nospor
Tam sie nic nie nadpisuje. POprostu twoja zmienna $subsidary nie istnieje. Moze chodzi o zasieg zmiennych. Nie wiem skad ją masz

Ba, nawet nie moze, a napewno chodzi o zasieg zmiennych.... musisz te zmienna $subsidary przekazac w parametrze funkcji lub uzyc GLOBAL. Inaczej ona w funkcji nie jest widoczna
pela222
No i widzicie jak to jest z amatorami programistami.
Dzięki za pomoc. Teraz wiem gdzie jest problem. Poszukam jak zapodać zmienną do funkcji lub golbal i dam znać czy udało mi się zrobić.

Dzięki.
Ps.
Przy okazji nauczyłem się:
Jak i poco stosować var_dump :-)
podstawy odnośnie zmiennych i ich zasięgu :-)

Pozdrawiam.
nospor
Temat: Jak poprawnie zada pytanie
Tu jest temat z bardzo cennymi wskazowkami.
Jedną z nich jest tez wyswietlanie bledow, czego ty nie robisz. Jakbys robil, to na ekranie juz dawno bys mial info, ze uzywasz zmiennej ktorej nie ma.
pela222
Super dzięki za pomoc :-)

zmieniłem plik na:
  1. /* user related parameter */
  2. if ($_POST['subsidary'] == 'wex') {
  3. define("AUTHTOKEN", "token1");
  4. }
  5. elseif ($_POST['subsidary'] == 'dub') {
  6. define("AUTHTOKEN", "token2");
  7. }

oraz niżej na:
  1. if ($_POST['subsidary'] == 'wex') {
  2. $query = "replace into rightone_crm.leads (id, firstname, lastname, dob, company, occupation, income, spousename, spouselastname, spousedob, spousecompany, spouseoccupation, spouseincome, street, area, city, state, child1name, child1dob, child2name, child2dob, child3name, child3dob, child4name, child4dob) value ";
  3. }
  4. elseif ($_POST['subsidary'] == 'dub') {
  5. $query = "replace into rightone_crm.leadsltd (id, firstname, lastname, dob, company, occupation, income, spousename, spouselastname, spousedob, spousecompany, spouseoccupation, spouseincome, street, area, city, state, child1name, child1dob, child2name, child2dob, child3name, child3dob, child4name, child4dob) value ";
  6. }


I gra muzyka. Ale jestem tukiem :-). Bak podstaw pokutuje straconymi godzinami. Nawet nie uwieżylibyście ile czasu na tym już straciłem.
Dzięki za pomoc

Zapoznam się napewno przed wrzuceniem kolejnego temetu. A tak naprawdę to po przeczytaniu tego może sam rozwiąże problem:-)
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.