mboost-dp1

PHP MVC OOP Projekt


Gå til bund
Gravatar #51 - CBM
5. jul. 2017 07:55
@arne: hmm

Warning: file_get_contents(http://localhost:81/restsrv.php?id=123): failed to open stream: Connection refused
Gravatar #52 - Slettet Bruger [1913734024]
5. jul. 2017 08:28
CBM (51) skrev:
@arne: hmm

Warning: file_get_contents(http://localhost:81/restsrv.php?id=123): failed to open stream: Connection refused


Hoster du din restsrv.php på localhost port 81?

Eller har du bare lavet kopi pasta fra Arnes indlæg?
Gravatar #53 - CBM
5. jul. 2017 08:30
@arne:

jeg prøvede dette uden held..

jeg fik en blank side ved at kalde klient php filen

<?php
$runfile = '.../restsrv.php?id=123';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $runfile);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec ($ch);
$nogen = json_decode($content);
echo $nogen->id . ' ' . $nogen->firstname . ' ' . $nogen->lastname . "\r\n";
?>

jeg har ikke mulighed for at se php fejl loggen
Gravatar #54 - CBM
5. jul. 2017 09:07
@arne: dette eksempel ser ud til at virke (efter tilrettelser) :-) :-)

http://phppot.com/php/php-restful-web-service/

IT-ekspert Yvossen (52) skrev:

Hoster du din restsrv.php på localhost port 81?
Eller har du bare lavet kopi pasta fra Arnes indlæg?

jeg havde først tilberedt kopi pasta og kom så til at tænke på at jeg skulle rette i eksemplet.. ups :-)

men jeg fik samme fejl (med anden url) efter jeg rettede det til

er det en begrænsning hos den gratis php host jeg bruger ?
Gravatar #55 - arne_v
5. jul. 2017 10:43
Og inden jeg bliver lynchet.

parse_str($_SERVER['QUERY_STRING']);

skal nok være:

parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];

:-)

Sikkerhed.
Gravatar #56 - arne_v
5. jul. 2017 10:45
file_get_contents bør virke hvis URL er rigtig.

Der bruges næppe port 81 som mig.

Og localhost virker næppe - der skal bruges faktisk domæne.
Gravatar #57 - CBM
5. jul. 2017 11:54
arne_v (55) skrev:
Og inden jeg bliver lynchet.

parse_str($_SERVER['QUERY_STRING']);

skal nok være:

parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];

:-)

Sikkerhed.


nu virker det :)
jeg havde glemt at indsætte den rette URL i min allerførste test og rettede det hurtigt som jeg også skrev :)

men

parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];

gjorde udslaget...

restcli.php

<?php
$resp = file_get_contents('.../restsrv.php?id=123');
$nogen = json_decode($resp);
echo $nogen->id . ' ' . $nogen->firstname . ' ' . $nogen->lastname . "\r\n";
?>

restsrv.php

<?php
class Person {
public $id;
public $firstname;
public $lastname;
public function __construct($id, $firstname, $lastname) {
$this->id = $id;
$this->firstname = $firstname;
$this->lastname = $lastname;
}
}
parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];
$nogen = new Person($id, 'Anders', 'And');
header('Content-type: application/json');
echo json_encode($nogen);
?>

Gravatar #58 - arne_v
5. jul. 2017 12:44
CBM (57) skrev:
men

parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];

gjorde udslaget...


Mystisk.

Den originale kode er ikke god sikkerhedsmæssigt, men den burde virke.

Nå slidt pyt.
Gravatar #59 - arne_v
5. jul. 2017 12:45
Min hovedpointe er at det er nemmere med dette approach end med SOAP.
Gravatar #60 - CBM
5. jul. 2017 13:04
@arne: enig. Nu har jeg ihvertfald det jeg skal bruge til at kunne hente testdata til mit site.

Jeg mener bestemt jeg har haft sat korrekt url ind i efterflg test men har rodet med en masse andet samtidig så muligheden foreligger at det ikke var tilfældet... Jeg kan for sjov skyld teste igen i morgen med

parse_str($_SERVER['QUERY_STRING']);

Kan også være jeg havde glemt at fjerne port angivelsen...

Gravatar #61 - arne_v
5. jul. 2017 14:49
#60

Ligegyldigt. Koden er en katastrofe sikkerhedsmæssigt, så det er ikek så vigtig om den virker eller ikek virker.
Gravatar #62 - CBM
6. jul. 2017 08:34
@arne: ok, hmm.. kan jeg sende et objekt afsted som parameter og altså udveksle php objekter i stedet for simple data typer mellem server og klient?
Gravatar #63 - Slettet Bruger [1913734024]
6. jul. 2017 08:47
CBM (62) skrev:
@arne: ok, hmm.. kan jeg sende et objekt afsted som parameter og altså udveksle php objekter i stedet for simple data typer mellem server og klient?


HTTP har en request body på f.eks. POST og PUT requests hvor du kan serialize dit PHP objekt som JSON og sende med over og dermed lade din web service deserialize objektet ingen.

RESTful API påskriver at du bruger HTTP verbs som følgende:

GET: Read (uden key, liste af objekter. med key, specifik objekt)
POST: Create
PUT: Create/Update (på specifik objekt key)
DELETE: Delete

Hvis du ønsker at bruge RESTful.
Gravatar #64 - CBM
6. jul. 2017 09:38
IT-ekspert Yvossen (63) skrev:
CBM (62) skrev:
@arne: ok, hmm.. kan jeg sende et objekt afsted som parameter og altså udveksle php objekter i stedet for simple data typer mellem server og klient?


HTTP har en request body på f.eks. POST og PUT requests hvor du kan serialize dit PHP objekt som JSON og sende med over og dermed lade din web service deserialize objektet ingen.

RESTful API påskriver at du bruger HTTP verbs som følgende:

GET: Read (uden key, liste af objekter. med key, specifik objekt)
POST: Create
PUT: Create/Update (på specifik objekt key)
DELETE: Delete

Hvis du ønsker at bruge RESTful.


Takker! Kunne du bikse et hurtigt eksempel sammen? :-)
Gravatar #65 - Slettet Bruger [1913734024]
6. jul. 2017 10:23
CBM (64) skrev:
IT-ekspert Yvossen (63) skrev:
CBM (62) skrev:
@arne: ok, hmm.. kan jeg sende et objekt afsted som parameter og altså udveksle php objekter i stedet for simple data typer mellem server og klient?


HTTP har en request body på f.eks. POST og PUT requests hvor du kan serialize dit PHP objekt som JSON og sende med over og dermed lade din web service deserialize objektet ingen.

RESTful API påskriver at du bruger HTTP verbs som følgende:

GET: Read (uden key, liste af objekter. med key, specifik objekt)
POST: Create
PUT: Create/Update (på specifik objekt key)
DELETE: Delete

Hvis du ønsker at bruge RESTful.


Takker! Kunne du bikse et hurtigt eksempel sammen? :-)


Desværre ikke, jeg har intet PHP noget-som-helst på min maskine. :-)

https://stackoverflow.com/questions/18866571/recei...

https://stackoverflow.com/questions/21271140/curl-...

Disse to ting burde hvad du skulle have brug for.
Gravatar #66 - CBM
6. jul. 2017 10:24
#65: ok, takker, jeg må igang med lidt RTFM så :-)
Gravatar #67 - CBM
6. jul. 2017 12:21
hmm... hvad er der galt med flg. kode ?? :

data_1.txt

{"player":"abc","time":"0","from":"2c","to":"3d"}


testsrv.php

<?php

parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];

if ($id='Hentdata') {

$NR = $q['NR'];
$data = file_get_contents('data_'+$NR+'.txt');
//$assocArray = json_decode($data, true);
header('Content-type: application/json');
//echo json_encode($assocArray);
echo $data;

}

?>

testclient.php

<?php
$resp = file_get_contents('.../testsrv.php?id=HentData&NR=1');

$nogen = json_decode($resp);
echo $nogen->player . ' ' . $nogen->time . ' ' . $nogen->from . ' ' . $nogen->to . "\r\n";

?>


jeg får en blank side når jeg kalder testclient.php


oh nevermind... fandt ud af det...

file_get_contents('data_'.$NR.'.txt');

og ikke

file_get_contents('data_'+$NR+'.txt');
Gravatar #68 - arne_v
6. jul. 2017 13:32
#67

Jeg ville satse på en objekt model og json_encode fremfor anden måde at generere JSON på.
Gravatar #69 - arne_v
6. jul. 2017 13:36
#63-64

Jep.

HTTP GET ~ SQL SELECT
HTTP POST ~ SQL INSERT
HTTP PUT ~ SQL UPDATE
HTTP DELETE ~ SQL DELETE

HTTP GET er langt den nemmeste fordi du kan bruge file_get_contents.

Med de andre skal du ud i Curl eller lignende.
Gravatar #70 - CBM
6. jul. 2017 13:56
@arne: ideen er at der skal laves en "rigtig" webservice som kan hente de egentlige data fra en database, men jeg skal bruge noget der kan sende test data tilbage i mellemtiden.

Min tanke var at gemme lidt test data i en eller flere text filer som så kunne sendes afsted on demand. Det skal nemlig være muligt at ændre disse data, tanken med txt filerne er så at så kan disse ændringer gemmes persistent som det ville have været tilfældet med en database.


her følger et tænkt eksempel som vil have samme struktur som det projekt jeg arbejder på...


med json encode tænker du da noget i denne stil:

testsrv.php

<?php
parse_str($_SERVER['QUERY_STRING'], $q);
$id = $q['id'];
if ($id='Hentdata') {
$NR = $q['NR'];
$data = file_get_contents('data_'+$NR+'.txt');
header('Content-type: application/json');
echo json_encode($assocArray);
}
?>


?

ville gerne lave en objekt model, men det er vanskeligt at finde nogle virkelig gode oop tuts til php...

fx kunne jeg tænke mig noget i denne stil:


<?php
class Computer {
public $SerieNr = 0;
public $CPU = '';
public $GFX = '';
public $VRReady = false;
public $ServiceDate;

public function __construct
($SerieNr, $CPU, $GFX, $VRReady, $ServiceDate)
{
$this->SerieNr = $SerieNr;
$this->CPU = $CPU;
$this->GFX = $GFX;
$this->VRReady = $VRReady;
$this->ServiceDate = $ServiceDate;
}
}
?>

* gemme et array af computer objekter i en fil
* hente og gemme data om et enkelt medlem af array
* hente og gemme data for hele array'et
* gemme specifik ændring af specifik computer fra array



<?php
class Ejer {
public $Nr = 0;
public $Navn = '';
public $Adr = '';

public function __construct
($Nr, $Navn, $Adr)
{
$this->Nr = $Nr;
$this->Navn = $Navn;
$this->Adr = $Adr;
}
}
?>

ville så gerne kæde 1 ejer sammen med et array af computere

ie. EJER 1...1 ---------- 0...* COMPUTER

en "EJER" kan have 0 til mange "COMPUTER"
en "COMPUTER" har altid nøjagtig 1 "EJER"

have et array af ejere

* hente og gemme data om en enkelt ejer

<?php
class Admin {
public $Nr = 0;
public $Navn = '';
public $Adr = '';

public function __construct
($Nr, $Navn, $Adr)
{
$this->Nr = $Nr;
$this->Navn = $Navn;
$this->Adr = $Adr;
}
}
?>

Admin skal have en liste over ejere hvis informationer og computere, han kan administrere

når der logges ind, er det enten som ejer(bruger) eller admin,

som ejer kan man administrere egne maskiner

som admin kan man administrere egne maskiner og maskiner tilhørende de ejere man administrerer, som admin vælger man i hovedmenuen, hvilken ejer man vil administrere

ville så gerne kæde 1 admin sammen med et array af ejere

ie. ADMIN 0...10 ---------- 0...* EJER

en "ADMIN" kan have 0 til mange "EJER"
en "EJER" kan have 0 til 10 "ADMIN"


men jeg ved ikke om det er muligt i PHP


ADMIN 0.10-0.* EJER 1.1-0.* COMPUTER
Gravatar #71 - CBM
6. jul. 2017 14:15
@arne: jeg går ud fra det er dette du mener med objekt model?

ADMIN 0.10-0.* EJER 1.1-0.* COMPUTER
Gravatar #72 - CBM
6. jul. 2017 14:30
hvordan kan testx være true i denne sammenhæng ?

<div class="uk-margin">
<label class="uk-form-label" for="form-horizontal-text1">bla bla: </label>
<div class="uk-form-controls">
<input class="uk-input" id="form-horizontal-text1" type="text" placeholder="" value="<?php echo $data->ABC; ?>">
</div>
</div>

<?php
$testx = TRUE;
$testinfo=($data->ABC);
if ($testinfo='false') { $testx = FALSE; }
if ($testinfo='true') { $testx = TRUE; }
?>

<?php $checked = ( TRUE === $testx ) ? ' checked' : ''; ?>
<label><input class="uk-checkbox" type="checkbox" <?php echo $checked; ?>> test</label>


$data->ABC er "false" iflg. min input box men min checkbox bliver stadig sat ?

- mangler en bedre måde at gøre det på... php's true/false struktur er lidt forvirrende :/ men som jeg forstår

$checked = ( TRUE === $testx ) ? ' checked' : '';

så er $checked = ' checked' når testx er true og

$checked = '' når testx er false?
Gravatar #73 - CBM
6. jul. 2017 14:58
prøvede dette uden held...

if ($testinfo='false') { $checked = ''; } else { $checked = ' checked'; }

input box skriver true men checkbox er unchecked uanset hvad?

ændrer jeg data i filen til false er
både checkbox false og input box skriver false ( som forventet )

jeg tænker at det kan ikke være cache, da input boxens indhold så også ville være anderledes


... nu har jeg prøvet dette...

$testinfo=($data->ABC);
if ($testinfo='false') { $checked = ''; } else { $checked = ' checked'; }

$testinfo er altid 'false' ??? uanset om den modtager true eller false fra text filen ??

tekst fil der sendes data fra:

{"ID":"1","ABC":"false","DEF":"true"}




rå data er { ???


$resp = file_get_contents('.../testsrv.php?id=HentStamdata&PersonID=1');
$raw = $resp;
Gravatar #74 - CBM
6. jul. 2017 15:09
rettelse:

$resp = file_get_contents('.../testsrv.php?id=Hentdata&NR=1');
$raw = $resp;

fandt fejlen...
skal være == og ikke =
Gravatar #75 - arne_v
6. jul. 2017 15:18
if ($testinfo='false') { $testx = FALSE; }
if ($testinfo='true') { $testx = TRUE; }

skal vel vaere:

if ($testinfo=='false') { $testx = FALSE; }
if ($testinfo=='true') { $testx = TRUE; }

eller:

if ($testinfo==='false') { $testx = FALSE; }
if ($testinfo==='true') { $testx = TRUE; }

?
Gravatar #76 - arne_v
6. jul. 2017 15:20
Og en else i.s.f. andet test ville goere det nemmere at undgaa uinitialiseret variabel.
Gravatar #77 - arne_v
6. jul. 2017 15:21
Ah - du havde fundet den selv.

Pascal -> PHP

:= -> =

= -> ===
Gravatar #78 - CBM
6. jul. 2017 15:22
@arne: præcis... det var en simpel fejl... en klassiker.... jeg skrev = hvor jeg mente == og ja... jeg valgte at gøre dette..

if ($data->ABC=='false') { $checked = ''; } else { $checked = ' checked'; }

er der ikke noget med at == er lig med og === er identisk ?

så jeg skal faktisk bruge === ?

begge ser ud til at virke


... pinlig fejl :S <-- I blame Pascal :-)
Gravatar #79 - arne_v
6. jul. 2017 15:42
== checker om noget har samme vaerdi med implicitte konverteringer

=== checker om noget har samme type og samme vaerdi
Gravatar #80 - arne_v
6. jul. 2017 15:47
Prøv og kør den her:

<?php
function test($a, $b) {
echo "'$a' == '$b' : " . (($a == $b) ? 'True' : 'False') . "\n";
echo "'$a' === '$b' : " . (($a === $b) ? 'True' : 'False') . "\n";
}

test(0, "");
test(0, FALSE);
test("ABC", TRUE);
?>

Gravatar #81 - arne_v
6. jul. 2017 15:53
De fleste inkl. mig bruger nok ofte == fremfor ===, men sammenlignet med statiske sprog så er det faktisk === der bedst matcher deres sammenlignings operator.
Gravatar #82 - arne_v
7. jul. 2017 00:39
CBM (70) skrev:
ville gerne lave en objekt model, men det er vanskeligt at finde nogle virkelig gode oop tuts til php...


Til inspiration:


<?php
namespace Server\DomainLayer {
class User {
public $id;
public $name;
public $computers;
public function __construct($id, $name, $computers = array()) {
$this->id = $id;
$this->name = $name;
$this->computers = $computers;
}
}
class Computer {
public $id;
public $type;
public $users;
public function __construct($id, $type, $users = array()) {
$this->id = $id;
$this->type = $type;
$this->users = $users;
}
}
}

namespace Server\ServiceLayer {
abstract class Manager {
protected $dp; // DataProvider
protected function output($result) {
header('Content-Type: application/json');
echo json_encode($result);
}
public function __construct($dp) {
$this->dp = $dp;
}
public abstract function get($pathid, $query);
}
class UserManager extends Manager {
public function __construct($dp) {
parent::__construct($dp);
}
public function get($pathid, $query) {
if($pathid != null) {
$id = intval($pathid);
$this->output($this->dp->getOneUser($id));
} else {
$this->output($this->dp->getAllUsers());
}
}
}
class ComputerManager extends Manager {
public function __construct($dp) {
parent::__construct($dp);
}
public function get($pathid, $query) {
if($pathid != null) {
$id = intval($pathid);
$this->output($this->dp->getOneComputer($id));
} else {
$this->output($this->dp->getAllComputers());
}
}
}
class Facade {
private $usrmgr;
private $compmgr;
public function __construct($dp) {
$this->usrmgr = new \Server\ServiceLayer\UserManager($dp);
$this->compmgr = new \Server\ServiceLayer\ComputerManager($dp);
}
public function get() {
if(isset($_SERVER['PATH_INFO'])) {
$pathparts = explode('/', $_SERVER['PATH_INFO']);
if(count($pathparts) >= 2) {
$mgrnam = $pathparts[1];
$pathid = count($pathparts) >= 3 ? $pathparts[2] : null;
$query = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;
if($mgrnam == 'user') {
return $this->usrmgr->get($pathid, $query);
} else if($mgrnam == 'computer') {
return $this->compmgr->get($pathid, $query);
} else {
throw new \Exception('Unknown resource');
}
}
}
throw new \Exception('Bad path');
}
public function process() {
$method = $_SERVER['REQUEST_METHOD'];
if($method == 'GET') {
$this->get();
} else {
throw new \Excpetion('Method not supported');
}
}
}
}

namespace Server\DataAccessLayer {
interface DataProvider {
public function getOneUser($id);
public function getAllUSers();
public function getOneComputer($id);
public function getAllComputers();
}
class DummyDataProvider implements DataProvider {
public function getOneUser($id) {
return new \Server\DomainLayer\User(1,'Anders And', array(new \Server\DomainLayer\Computer(1, 'HP PC')));
}
public function getAllUSers() {
return array(new \Server\DomainLayer\User(1,'Anders And', array(new \Server\DomainLayer\Computer(1, 'HP PC'))),
new \Server\DomainLayer\User(2,'Georg Gearløs', array(new \Server\DomainLayer\Computer(2, 'Dell PC'))));
}
public function getOneComputer($id) {
return new \Server\DomainLayer\Computer(1, 'HP PC', array(new \Server\DomainLayer\User(1,'Anders And')));
}
public function getAllComputers() {
return array(new \Server\DomainLayer\Computer(1, 'HP PC', array(new \Server\DomainLayer\User(1,'Anders And'))),
new \Server\DomainLayer\Computer(2, 'Dell PC', new \Server\DomainLayer\User(2,'Georg Gearløs')));
}
}
class DatabaseDataProvider implements DataProvider {
private $db; // PDO connection
public function __construct($db) {
$this->db = $db;
}
public function getOneUser($id) {
// SELECT name FROM users JOIN uc ON users.id=uc.userid JOIN computers ON uc.computerid=computers.id WHERE users.id=?
throw new \Excpetion('Not implemented yet');
}
public function getAllUSers() {
// SELECT name FROM users JOIN uc ON users.id=uc.userid JOIN computers ON uc.computerid=computers.id
throw new \Excpetion('Not implemented yet');
}
public function getOneComputer($id) {
// SELECT type FROM computers JOIN uc ON cmputers.id=uc.computerid JOIN users ON uc.userid=users.id WHERE computers.id=?
throw new \Excpetion('Not implemented yet');
}
public function getAllComputers() {
// SELECT type FROM computers JOIN uc ON cmputers.id=uc.computerid JOIN users ON uc.userid=users.id
throw new \Excpetion('Not implemented yet');
}
}
}

namespace Server {
$fac = new \Server\ServiceLayer\Facade(new \Server\DataAccessLayer\DummyDataProvider());
$fac->process();
}

?>

Gravatar #83 - CBM
7. jul. 2017 10:46
@arne: jeg prøver at forstå hvordan namespaces og abstrakte klasser fungerer i php men har ikke 100% set lyset endnu...

i mellemtiden har jeg stødt på noget andet som driller...

etview.php


<?php
$jsondata = file_get_contents('.../enserver.php?valg=FindInfo&index=1');
$arr = json_decode($jsondata);
?>

<table class="uk-table uk-table-striped">

<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>E</th>
<th>F</th>
<th></th>
</tr>
</thead>
<tbody>
<?php

$abcknap = '<td><p uk-margin><a class="uk-button uk-button-default" href="#">TEST</a></p></td></tr>';

foreach($arr->Result as $value){

$DataA = $value->A;
$DataB = $value->B;
$DataC = $value->C;
$DataD = $value->D;
$DataE = $value->E;
$DataF = $value->F;

echo '<tr><td>'.$DataA.'</td>';
echo '<td>'.$DataB.'</td>';
echo '<td>'.$DataC.'</td>';
echo '<td>'.$DataD.'</td>';
echo '<td>'.$DataE.'</td>';
echo '<td>'.$DataF.'</td>';
echo $abcknap;

}

?>

</tbody>
</table>


enserver.php


<?php

parse_str($_SERVER['QUERY_STRING'], $q);
$valg = $q['valg'];

if ($valg==='FindInfo') {

$IndexABC = $q['index'];
$dataABC = file_get_contents('data_ABC'.$IndexABC.'.txt');
echo $dataABC;

}

?>


data_ABC1.txt


{
{"A":"A","B":"B","C":"C","D":"D","E":"E","F":"F","G":"G","H":"H"}
{"A":"I","B":"J","C":"K","D":"L","E":"M","F":"N","G":"O","H":"P"}
{"A":"Q","B":"R","C":"S","D":"T","E":"U","F":"V","G":"W","H":"X"}
}


jeg får denne fejl på etview.php


Warning: Invalid argument supplied for foreach()

Gravatar #84 - Slettet Bruger [1913734024]
7. jul. 2017 10:52
CBM (83) skrev:

data_ABC1.txt


{
{"A":"A","B":"B","C":"C","D":"D","E":"E","F":"F","G":"G","H":"H"}
{"A":"I","B":"J","C":"K","D":"L","E":"M","F":"N","G":"O","H":"P"}
{"A":"Q","B":"R","C":"S","D":"T","E":"U","F":"V","G":"W","H":"X"}
}




[
{"A":"A","B":"B","C":"C","D":"D","E":"E","F":"F","G":"G","H":"H"},
{"A":"I","B":"J","C":"K","D":"L","E":"M","F":"N","G":"O","H":"P"},
{"A":"Q","B":"R","C":"S","D":"T","E":"U","F":"V","G":"W","H":"X"}
]


Du ser ud til at have defineret et JSON array forkert.

Lister er

[{},{},{}] ikke {{}{}{}} eller {{},{},{}}
Gravatar #85 - CBM
7. jul. 2017 10:59
jeg har prøvet disse 4 muligheder...



<?php


$arr = (array) json_decode($jsondata,true);

echo 'TEST ARR ';
echo $arr;


$arr = json_decode($jsondata);

echo 'TEST ARR ';
echo $arr;


$arr = json_decode($jsondata,true);

echo 'TEST ARR ';
echo $arr;


$arr = (array) json_decode($jsondata);

echo 'TEST ARR ';
echo $arr;

?>



uanset hvad er %arr tom???


#84:

godt spottet... jeg har rettet det nu, men jeg har stadig samme fejl :'(


Warning: Invalid argument supplied for foreach() in .../ture.php on line 45


linjen:


"foreach($arr->Result as $value){"


og $arr er fortsat tom når jeg skriver ud med echo
Gravatar #86 - Slettet Bruger [1913734024]
7. jul. 2017 11:06
#85
En generel ting, hvis du laver debugging af nogen former for web services, så vil jeg anbefale dig at hente programmet Fiddler (http://www.telerik.com/fiddler), det er et fantastisk værktøj der fungere som en proxy og den logger alle web requests ind/ud af applikationer.

Du kan bruge det til at se om den rette information overføres og du kan endda bruge den til at lave syntetiske HTTP GET, POST, PUT og DELETE requests.

Hvad får du hvis du laver denne?

echo $jsondata;
Gravatar #87 - CBM
7. jul. 2017 11:44
#86:

jeg får en tom streng desværre... fiddler giver mig ingen nye informationer ift hvad jeg ser i browseren

jeg kører mit php på en gratis online host, så på denne maskine ser jeg kun det som browser ser og det er resultatet af php filens udførelse
Gravatar #88 - arne_v
7. jul. 2017 14:56
Du er noedt til at angribe det systematisk.

1)Få server til at virke
a) test med browser
b) tilret PHP kode indtil du får det rigtige output
2) Få client til at virke
a) udkommenter HTML genererering og bare echo data fra server
b) tilret PHP kode indtil du får de originale data
c) fjern echo af data og erstat med print_r af json_decode af data
d) tilret JSON text fil på server indtil decode giver det rigtige
[gem lige output fra print_r]
e) fjern print_r og aktiver HTML generering
f) tilret HTML generering indtil den virker
Gravatar #89 - CBM
7. jul. 2017 18:55
@arne: det må jeg prøve first thing mandag :)
Gravatar #90 - CBM
10. jul. 2017 09:31
<?php

$foo = file_get_contents('.../BlaBlaSrv.php?test=ABC&antal=1');

echo $foo;

$bar = json_decode($foo);

echo "\r\n\r\n\r\n";
echo $bar[0]->a;
echo $bar[1]->a;

?>


men ville gerne have noget ala forall på det array jeg får tilbage, da jeg ikke kan regne med at vide hvor mange resultater der vil være til rådighed



lidt off topic:

ser ud til min ide med 2 stk pi3 inde i en pi-top forbundet med et ethernet kabel godt kunne virke og kan betragtes som et beowulf cluster med 8 cores (2x4)

https://www.linux.com/blog/building-beowulf-cluste...

Gravatar #91 - CBM
10. jul. 2017 10:43
well well well, dette virker:

<?php

$foo = file_get_contents('.../BlaBlaSrv.php?test=ABC&antal=1');

echo $foo;

$bar = json_decode($foo);

echo "uden foreach: ";
echo $bar[0]->a;
echo $bar[1]->a;

echo " og med foreach: ";
foreach($bar as $entry)
{
echo $entry->a;
}


?>
Gravatar #92 - CBM
10. jul. 2017 11:19
hmm.. path problem...

jeg har en fil i biblioteket M
som skal inkluderes af en fil i biblioteket V

jeg har prøvet relativ path ift root

./v/fil.php :
<?php include './m/fil.php';?>

virker ikke ...

jeg har prøvet hele stien:

http://www.etsite.com/v/fil.php :
<?php include 'http://www.etsite.com/m/fil.php';?>

virker ikke ....

?

sitet:

http://www.etsite.com

index.php

v->fil.php
m->fil.php

hm nevermind...
<?php include '../m/fil.php';?>

virker... det må være tilsvarende til
gå et step tilbage og gå ind i dir m

ser ud til jeg måske kan nøjes med view og model lag, da projektet er ret simpelt
Gravatar #93 - CBM
10. jul. 2017 11:54
jeg har en php side med en liste af data, på hver linje er der en knap som skal kalde en funktion på serveren som skal ændre de data der vises på php siden...


ie...


nr tekst knap

1 abc [Random-Text]
2 qed [Random-Text]
3 xyz [Random-Text]

1,abc + 2,qed + 3,xyz kommer fra en data fil som serveres til php siden fra en php webservice

jeg vil gerne have en php funktion jeg kan kalde med id nummer som kan generere en ny random tekst på 3 bogstaver som så kan vises på siden i stedet for den aktuelle

jeg vil gerne undgå javascript

kan det lade sig gøre?

Gravatar #94 - arne_v
10. jul. 2017 14:56
#93

Noget 10 år gammelt kode:


<?php
function genpw($len, $valid) {
$res = '';
for($i = 0; $i < $len; $i++) {
$res .= $valid[rand(0, strlen($valid) - 1)];
}
return $res;
}

echo genpw(7, 'ABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789');
?>

Gravatar #95 - CBM
10. jul. 2017 18:09
@arne: eksemplet med rnd funktioner var blot et eksempel, det jeg er interesseret i er flowet, hvordan jeg kalder en funktion der via en webservice ændrer data der så skal opdateres...

Kan jeg opdatere mine data lokalt via php og så bagefter remote eller hvordan skal det gøres?
Gravatar #96 - CBM
11. jul. 2017 11:06
hmm.. php problem...

jeg har nogle data lignende dette..

$nogetData :

{
"TestInfo": {
"abc": "1234",
"def": "aa=bla bla+aha=abc:33-22-11,A=foobar 1234,X=YZ",
"something": "little brown fox",
"asdf": "",
"wsad": "123456789",
"ijkl": ""}
}

jeg modtager ovenstående og smider det i et obj via
$obj = json_encode($nogetData);

men jeg kan ikke skrive fx
echo $obj->TestInfo->wsad;

hvordan får jeg fat i wsad ?
Gravatar #97 - CBM
11. jul. 2017 11:31
svaret viste sig at være dette...

$obj = json_decode($nogetData);

$obj->TestInfo->wasd;

Gravatar #98 - Slettet Bruger [1913734024]
11. jul. 2017 11:34
CBM (97) skrev:
svaret viste sig at være dette...

$obj = json_decode($nogetData);

$obj->TestInfo->wasd;



Jeg var faktisk ved at skrive om du ikke skulle decode i stedet, for lidt siden, men tænkte: "Nej, så blind er han sgu ikke og det er bare en fejl da han skrev det på newz.dk"

Jeg tog fejl.
Gravatar #99 - arne_v
11. jul. 2017 15:35
#98

Den slags fejl sker faktisk ret ofte. Man kigger på koden og man læser hvad der skulle stå ikke hvad der står.
Gravatar #100 - CBM
11. jul. 2017 17:46
@arne: præcist.

@yvossen: som arne skriver, så stirrer man sig blind på nogle fejl af og til. Men skrev jo også så snart jeg opdagede fejlen.

Men er så heller ikke nogen haj til Web udvikling.

Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login