Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Wyodrębnianie parametrów i wartości z tablicy
Forum PHP.pl > Forum > Przedszkole
Czapla
Posiadam tablice w takim formacie
Kod
reports    {"rpt_RaportID":9,"rpt_NazwaRaportu":"test","rpt_SciezkaXL":"test/test","rpt_Opis":"opisgasd",
"rpt_FormatWydruku":"Clarion","rpt_CzyWUzyciu":"tak"}

Chciałbym zrobić poniższy UPDATE na bazę, jednak poszczególne wartości są trzymane w tablicy zmiennej reports.
  1. $reports = json_decode(stripslashes($_REQUEST['reports']));
  2.  
  3. $query = "UPDATE dbo.Raporty SET rpt_NazwaRaportu = '".$_POST["rpt_NazwaRaportu"]."' ,rpt_SciezkaXL = '".$_POST["rpt_SciezkaXL"]."', rpt_Opis = '".$_POST["rpt_Opis"]."', rpt_FormatWydruku = '".$_POST["rpt_FormatWydruku"]."', rpt_CzyWUzyciu = '".$_POST["rpt_CzyWUzyciu"]."' WHERE rpt_RaportID = '".$_POST["reports"]."'";
  4. $doQuery = mssql_query($query);

Jak pobrać poszczególne wartości z tablicy i zapisać je do poszczególnych $_POSTÓW w moim zapytaniu?
nospor
  1. $reports = json_decode(stripslashes($_REQUEST['reports']));
  2. var_dump($reports);

Pokazalo ci tablice? Znaczy ze tam masz swoje dane. No to teraz zamiast $_POST pisz $reports. W czym problem?
Czapla
$reports zwraca NULL gdy mam ustawione json_decode
natomiast zwraca
Kod
string(224) ""{\"rpt_RaportID\":9,\"rpt_NazwaRaportu\":\"test\",\"rpt_SciezkaXL\":\"test\/testjkl\",
\"rpt_Opis\":\"{\"rpt_RaportID\":23,\"rpt_NazwaRaportu\":\" as\",\"rpt_S\",\"rpt_FormatWydruku\":\"Clarion\",\"rpt_CzyWUzyciu\":\"tak\"}""

gdy mam json_encode

Jak napisze wszędzie reports to zapisze mi całą tablice do danego pola,
natomiast $reports[2] nie zapisze mi wartości dla pola rpt_SciezkaXL

W jaki sposób pobrać odpowiednie wartości z tej jednoelementowej tablicy? smile.gif
nospor
  1. $t = '{"rpt_RaportID":9,"rpt_NazwaRaportu":"test","rpt_SciezkaXL":"testtest","rpt_Opis":"opisgasd","rpt_FormatWydruku":"Clarion","rpt_CzyWUzyciu":"tak"}';
  2. $ar = json_decode($t,true);
  3. print_r($ar);

Zwraca mi tablice a nie jakies NULL. Patrzyles czy oby na pewno $_REQUEST['reports'] zawiera to co myslisz ze zawiera?
phpion
Pokaż co siedzi w $_REQUEST['reports'] bo wrzucenie tego co podałeś poprawnie pokazuje tablicę:
  1. $s = '{"rpt_RaportID":9,"rpt_NazwaRaportu":"test","rpt_SciezkaXL":"test/test","rpt_Opis":"opisgasd",
  2. "rpt_FormatWydruku":"Clarion","rpt_CzyWUzyciu":"tak"}';
  3.  
  4. print_r(json_decode($s, TRUE));
Czapla
Dziwne, tak zwrócił mi Internal error 500
  1. $reports = json_decode(stripslashes($_REQUEST['reports']));
  2. print_r($reports, TRUE);

Tak poprawnie zwrócił mi tablice - subtelna różnica
  1. $reports = stripslashes($_REQUEST['reports']);
  2. print_r(json_decode($reports, TRUE));

WYNIK
Kod
Array
(
    [rpt_RaportID] => 9
    [rpt_NazwaRaportu] => test
    [rpt_SciezkaXL] => test/test
    [rpt_Opis] => zmieniłem ten rekord
    [rpt_FormatWydruku] => Clarion
    [rpt_CzyWUzyciu] => tak
)

nospor
no i dobra, masz tablice. czego teraz nie wiesz? Mowilem: zamiast POST uzyj elementow ze swojej tablicy.
Czapla
Próbuje tak:
  1. include '../../drivers/dataConnection.php';
  2.  
  3. //print_r(json_decode($s, TRUE));
  4.  
  5. $reports = stripslashes($_REQUEST['reports']);
  6. print_r($reports, TRUE);
  7.  
  8. $query = "UPDATE dbo.Raporty SET rpt_NazwaRaportu = '".$reports[1]."' ,rpt_SciezkaXL = '".$reports[2]."', rpt_Opis = '".$reports[3]."', rpt_FormatWydruku = '".$reports[4]."', rpt_CzyWUzyciu = '".$reports[5]."' WHERE rpt_RaportID = '".$reports[0]."'";
  9. $doQuery = mssql_query($query);
  10.  
  11. echo $_REQUEST['callback'] . "{success:true, records : { rpt_RaportID : ".json_encode($reports)."}}";
nospor
$reports[1]
$reports[5]
....

czy ty nie widzisz, ze twoja tablica $reports nie zawiera indexow liczbowych tylko teksty?
$reports['rpt_RaportID']
$reports['rpt_NazwaRaportu']
.....

skad ty zes te liczby jako indexy wytrzasnal?
Czapla
A z tymi liczbowymi elementami tablicy tak mi się wydawało że można tongue.gif
  1. $query = "UPDATE dbo.Raporty SET rpt_NazwaRaportu = '".$reports['rpt_NazwaRaportu']."' ,rpt_SciezkaXL = '".$reports['rpt_SciezkaXL']."', rpt_Opis = '".$reports['rpt_Opis']."', rpt_FormatWydruku = '".$reports['rpt_FormatWydruku']."', rpt_CzyWUzyciu = '".$reports['rpt_CzyWUzyciu']."' WHERE rpt_RaportID = '".$reports['rpt_RaportID']."'";

No więc w ten sposób też nie działa
nospor
Cytat
A z tymi liczbowymi elementami tablicy tak mi się wydawało że można tongue.gif
Nie pokazuj mi jezyka bez konkretnego powodu. Twoja pomylka nie jest konkretnym powodem by mi jezyk pokazywac.

Cytat
No więc w ten sposób też nie działa
Co nie działa?
Zastosuj się proszę do podanych tu porad:
Temat: Jak poprawnie zada pytanie
i nastepnie zadaj pytanie.
Czapla
BUMP

  1. <?php
  2. include '../../drivers/dataConnection.php';
  3.  
  4. $reports = json_decode(stripslashes($_REQUEST['reports']));
  5.  
  6. $query = "UPDATE dbo.Raporty SET rpt_NazwaRaportu = '".$reports['rpt_NazwaRaportu']."' ,rpt_SciezkaXL = '".$reports['rpt_SciezkaXL']."', rpt_Opis = '".$reports['rpt_Opis']."', rpt_FormatWydruku = '".$reports['rpt_FormatWydruku']."', rpt_CzyWUzyciu = '".$reports['rpt_CzyWUzyciu']."' WHERE rpt_RaportID = '".$reports['rpt_RaportID']."'";
  7. mssql_query($query);
  8. echo $query;
  9.  
  10. echo $_REQUEST['callback'] . "{success:true, records : { rpt_RaportID : ".json_encode($reports['rpt_RaportID'])."}}";
  11. ?>

Po zastosowaniu
  1. <?php
  2. ini_set('display_errors','1');
  3. ?>

Wyświetla błąd
Kod
<br />
<b>Fatal error</b>:  Cannot use object of type stdClass as array in <b>C:\Inetpub\wwwroot\test\php\report\reportUpdate.php</b> on line <b>9</b><br />

Screen z debugu w Firebugu
http://www.fotosik.pl/pokaz_obrazek/687ed522bf8fc164.html
phpion
Zobacz jaki drugi parametr przyjmuje json_decode i co powoduje jego podanie/niepodanie.
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.