mam mały problem. Otóż stworzyłem sobie klasę Point. Następnie utowrzyłem tablice obiektów. Problem się zaczyna gdy chce ją przekazać w sesji do następnej strony. Tablica teoretycznie przechodzi - jej długość się zgadza. Niestety próba odwołania się do jej obiektów kończy się nie powodzeniem. Gdzie robię błąd? Poniżej zamieszczam kody do obu stron.
<?php
class Point{
private $id;
private $x;
private $y;
function __construct(){
$this->x = 0;
$this->y = 0;
}
/*function __construct($war1, $war2){
$this->x = $war1;
$this->y = $war2;
}*/
public function setID($id){
$this->id = $id;
}
public function setX($wsp){
$this->x = $wsp;
}
public function setY($wsp){
$this->y = $wsp;
}
public function getID(){
return $this->id;
}
public function getX(){
return $this->x;
}
public function getY(){
return $this->y;
}
public function showAll(){
echo $this->x." ".$this->y."
";
}
}
?>
<?php
include 'classPoint.php';
function losujBezPowtorzen($ilosc, $sizeWidth, $sizeHeight){
$wsp = array();
echo $sizeWidth." ".$sizeHeight."
";
//ustawienie współrzędnych x - mogą się powtarzać
$count = 0;
while($count<$ilosc) {
$wsp[$count] = new Point();
$x = rand(0, $sizeWidth);
$y = rand(0, $sizeHeight);
$booltmp = TRUE;
for ($i=0; $i<$count; $i++) {
if($wsp[$i]->getX() == $x && $wsp[$i]->getY() == $y){
$booltmp = FALSE;
break;
}
}
if ($booltmp==TRUE) {
$wsp[$count]->setID($count+1);
$wsp[$count]->setX($x);
$wsp[$count]->setY($y);
$count++;
}
}
return $wsp;
}
?>
<?php
$point = array();
//losowanie współrzędnych
$point = losujBezPowtorzen($ilosc, $resolution[0], $resolution[1]);
//wyświetlanie współrzędnych
for($i = 0; $i < $ilosc; $i++){
echo $i.": ".$point[$i]->getX().", ".$point[$i]->getY()."
";
}
$_SESSION['point'] = $point;
$_SESSION['xy'] = $resolution;
header('Location: ./rysuj.php');
?>
<?php
session_start();
include 'classPoint.php';
$array = $_SESSION['points'];
echo count($array); //długość wyświetlanej tablicy - OK
echo $array[0]->getX(); //błąd - włącza się __autoload
?>
jak mogę czytać z elementu którego nie ma. Funkcja losująca zwraca mi tablicę obiektów. Poźniej jest ona wyświetlana i wszystko działa - dodałem kody których brakowało. Niestety po wysłaniu ich w sesji mam nula.
– Dodane 18.02.2012 (So) 17:16 –
zmieniłem tą literówkę. Mam za to na ekranie coś takiego:
Klasę trzeba ładować PRZED zastartowaniem sesji i nie przy pomocy include, tylko require (lub require_once) - poczytaj sobie o tym bo jest tu różnica dość istotna.
djpizmak - dzięki wielkie za pomoc. Powiem szczerze, że długo bym jeszcze szukał a w życiu bym nie wpadł na pomysł z require_once. Mam zatem ostatnie pytanie w kwestii tego tematu. W przedostatnim podanym kodzie w I poście na samym dole znajduje się header(…) do przekierowania. Lokalnie na serwerze apacha wszystko działa. Problem się zaczyna się gdy umieszcze całą stronkę na serwerze - wówczas nie dochodzi do przekierowania. Wiesz może dlaczego? PRzecież żadne dane nie są wysyłane do przeglądarki.
Mam jeszcze mała prośbę. Otóż w trakcie prowadzenia z Wami koledzy dyskusji zmieniłem trochę kod. Wygląda on następująco
<?php
if(isset($_COOKIE['resolution'])){
if(isset($_GET['ilosc']) && isset($_GET['zasieg'])){
if(is_numeric($_GET['ilosc']) && is_numeric($_GET['zasieg'])){
if(($_GET['ilosc'] > 0) && ($_GET['zasieg'] >0)){
session_start();
}else{
header('Location: ./generator.php?error=1'); //podane dane nie sią typu numerycznego
}
}else{
header('Location: ./generator.php?error=2'); //podane dane nie sią typu numerycznego
}
}else{
header('Location: ./generator.php?error=3'); //podane dane nie sią typu numerycznego
}
}else{
if(isset($_GET['szerokosc']) && isset($_GET['wysokosc'])){
if(is_numeric($_GET['szerokosc']) && is_numeric($_GET['wysokosc'])){
if(isset($_GET['ilosc']) && isset($_GET['zasieg'])){
if(is_numeric($_GET['ilosc']) || is_numeric($_GET['zasieg'])){
if(($_GET['szerokosc'] >= 10) && ($_GET['wysokosc'] >= 10) && ($_GET['ilosc'] > 0) && ($_GET['zasieg'] > 0)){
session_start();
require_once 'classPoint.php';
require_once 'losujBezPowtorzen.php';
$resolution = '';
if(isset($_COOKIE['resolution'])){
$resolution = $_COOKIE['resolution'];
}else{
$resolution = $_GET['szerokosc']."x".$_GET['wysokosc'];
}
$resolution = explode("x", $resolution);
unset ($_GET['szerokosc'], $_GET['wysokosc']);
$ilosc = $_GET['ilosc']; //ilosc urzadzen do wygenerowania
$zasieg = $_GET['zasieg']; //zasieg urzadzen generowanych
unset ($_GET['ilosc'], $_GET['zasieg']);
$point = array();
//losowanie współrzędnych
$point = losujBezPowtorzen($ilosc, $resolution[0], $resolution[1]);
//wyświetlanie współrzędnych
$_SESSION['graf'] = $point;
$_SESSION['xy'] = $resolution;
header('Location: ./rysuj.php');
}else{
header('Location: ./generator.php?error=8'); //podane dane nie sią typu numerycznego
}
}else{
header('Location: ./generator.php?error=7'); //podane dane nie sią typu numerycznego
}
}else{
header('Location: ./generator.php?error=6'); //podane dane nie sią typu numerycznego
}
}else{
header('Location: ./generator.php?error=5'); //podane dane nie sią typu numerycznego
}
}else{
header('Location: ./generator.php?error=4'); //podane dane nie sią typu numerycznego
}
}
?>
Niestety do przekierowania nadal nie dochodzi. W częsci głównej oczywiście. Osobiście nie lubie php, programuje w Javie. PHP jest z pewnych względów odgórnych teraz wykonywane
Nie możesz tak robić że sobie dwa razt sesje otwierasz i jeszcze nigdzie jej nie zamykasz.
Jak już Ci mówiłem require_once() wykonujesz PO session_start a tak NIE WOLNO
Najpierw musisz dołączyć definicje klas przy pomocy require_once a potem dopiero startować sesję - bo sesja przy odpalaniu dokonuje niejawnej deserializacji - a jak to ma zrobić skoro nie zna jeszcze definicji Twojej klasy (bo dołączasz ją już po wystartowaniu sesji)?
Wszystkie require dajesz na samym początku skryptu.
A dodatkowo:
– Dodane 18.02.2012 (So) 18:44 –
Aaaaaffffffffeeeeeeeeeeeeee Java
Nienawidzę tego języka okrutnie (a może nawet nie samego języka a maszyny wirtualnej java czy serwerów aplikacji, jboss czy glasfish to takie same zamulacze ) - przez całe studia musiałem się z nim męczyć. Java potrafi tylko mulić i nic więcej
Jak to mówi mój wykładowca - “Java to jest zabaweczka, kredeczki i sobie malujemy… Programy należy pisać w języku C” :lol:
owszem, w c/c++ nigdy nie umiałem wyjść po za konsolę. W javie jest to śmiesznie proste. W php z kolei nie ogarniam w ogóle. Wolałbym się skupić na asp.net albo czymś innym niż php