probleem met array !

Status
Niet open voor verdere reacties.

JB'tje

Gebruiker
Lid geworden
31 mei 2004
Berichten
556
hallo......

ik heb zojuist een stukje script toegevoegd aan mijn site, en nu krijg ik dit te zien:

d !, impossible !'; $_SESSION['errornumber'] = '3.4'; } } } ?>; } } ?>d !, impossible !'; $_SESSION['errornumber'] = '3.4'; } } } ?>

dit hoort totaal niet om mijn site, maar ik krijg het wel te zien :'( Ik weet met 100% zekerheid dat het hier aan ligt:
PHP:
$x = array('training'=>'1', 'armory'=>'1', 'blacksmith'=>'1', 'upgrade'=>'1');

if(@$x[$site] == '1')
{
enz......
verder zijn ALLE varriabelen die hier gebruikt worden 'true', er staat wat in. en de if die te zien is word gewoon afgesloten............

Het stuk script dat ik op mijn site te zien krijg krijg ik alleen op de lycos server te zien (niet op locale host) en het scuk script komt hiet vandaan:
PHP:
    $race = $gegevens['race'];
    if ($race == '1'){
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #000066; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #000066;';
    }elseif($race == '2') {
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #CC0000; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #CC0000;';
    }elseif($race == '3') {
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #CCCC00; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #CCCC00;';
    }elseif($race == '4') {
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #330000; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #330000;';
    }else{
      $_SESSION['error'] = 'No race found !, impossible !';
      $_SESSION['errornumber'] = '3.4';
}

wat kan ik hier aan doen, en hoe komt het dat dit een probleem is..... (die array)

JB'tje

probleem is opgelosd..... toen ik de file overnieuw uploade naar de server zag ik de php code niet meer......

JB'tje
 
Laatst bewerkt:
Hallo weer......

ik zit dit keer met een probleem voor mijzelf en de spelers van mijn spel....

elke mysql_query controleer ik, of hij 'FALSE' is en of hij leeg is..... indien er iets mis is, krijg ik een mail thuis gestuurd met daarin het error numer, en de error zelf.
De site waar de error vandaan komt is dit:
PHP:
<?PHP 
if (@!$_SESSION['toegang'] OR @!$_SESSION['userid'])
{
  echo '<script language=\'Javascript\'>';
  echo 'document.location=\'http://www.battlesoftime.com/index.php?index\'';
  echo '</script>';
  die('Please visit the site by the normal way.... Click <a href=\'http://www.battlesoftime.com/index.php?index\'>here</a> to go to the index site');
}
else
{
  unset($_SESSION['toegang']);
}

$query = mysql_query('SELECT race FROM userinfo WHERE userid = "'.@$_SESSION['userid'].'" ');

if($query == FALSE) // controlleer of de verbinding niet gelukt is
{
  $_SESSION['error'] = 'Problem on the site!!! The reason is: <b>' . mysql_error() . '</b>';
  $_SESSION['errornumber'] = '3.2';
}
else
{
  $gegevens = mysql_fetch_array($query); 
  if($gegevens == FALSE) // Controlleer of database selecteren fout gegaan is
  {
    $_SESSION['error'] = 'Problem on the site!!! The reason is: <b>' . mysql_error() . '</b>';
    $_SESSION['errornumber'] = '3.3';
  }else{
  
    $race = $gegevens['race'];
    if ($race == '1'){
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #000066; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #000066;';
    }elseif($race == '2') {
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #CC0000; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #CC0000;';
    }elseif($race == '3') {
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #CCCC00; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #CCCC00;';
    }elseif($race == '4') {
      $_SESSION['kbovenkant'] 	= 'BACKGROUND-COLOR: #330000; BORDER: #003300 3px solid;';
      $_SESSION['kachter'] 		= 'BACKGROUND-COLOR: #330000;';
    }else{
      $_SESSION['error'] = 'No race found !';
      $_SESSION['errornumber'] = '3.4';
} } }
?>
nu krijg ik deze error:
ERROR op Site: register<br>
Gevonden Door: XXXXXXX<br>
De Tijd: 02-05-2005 - 20:59:53<br><br>
De Error: Problem on the site!!! The reason is: <b></b>
Het Error Numer: 3.3
Hoe is dit mogelijk !!!!!???? want: $_SESSION['userid'] = een getal, anders kan de persoon niet ingelogd zijn en verder ik er bij elk account een 'race' ik heb het net nog naagekeken....

ooh, verder was de userID: 293 (werd toevallig meegezonden in de mail)

weet iemand wat hier mis is gegaan???

JB'tje
 
Geplaatst door JB'tje
Hoe is dit mogelijk !!!!!???? want: $_SESSION['userid'] = een getal, anders kan de persoon niet ingelogd zijn en verder ik er bij elk account een 'race' ik heb het net nog naagekeken....
Leg eerst maar eens uit wat er precies gebeurd, wat er hoort te gebeuren en wat er niet hoort te gebeuren. De beredenering volgt daarna wel ;)
Ik heb nu namelijk meerdere scenario's in m'n hoofd die kunnen optreden :)
 
Geplaatst door JPeetje
Ik heb nu namelijk meerdere scenario's in m'n hoofd die kunnen optreden :)
das mooi :D
Je vult je gegevens in op de index pagina (of andere pagina b.v. "/index.php?rankings" ) dan gaat het script in de fille 'Login.php' kijken of de gegevens kloppen met wat er in de database staat. indien dit alles klopt, dan includeerd het script Login.php de site: Info.php
Info.php haalt ALLE gegevens op die over jou account beschikbaar zijn. daarna includeerd deze pagina de pagina's:
'info/lay-out.php' <- voor de kleur van de 'kopjes' boven elke pagina
'info/creatures.php' <- gegevens over de 'creatures' die voorkomen in het spel B.v. hoeveel een miner kost
'info/weapons.php' <- hetzelfde als bij creatures.php maar dan voor de wapens, hoe de wapens heten, enz.
'info/actions.php' <- berekent je 'strike', 'defense', 'spy' en 'sentrie' action, die vervolgens je rank bepalen.
'info/base.php.php' <- eeh, totaal niets belangerijks staat er op deze pagina (aangezien in niet weet wat erop staat)

De pagina's hierboven worden in dezelfde volgorde geincludeerd als hierboven !

nu wat het moet doen: Je kunt bij het registreren een 'Race' kiezen. Deze komt in de database als getal 1,2,3 of 4. Nu zit er aan elke 'Race' een kleur en border vast....
De kleur en border worden in de variabele $_SESSION['kbovenkant'] gestopt en die word afgedrukt op het scherm.

Wat he niet moet doen: mij een mail sturen met daarin een error dat hij de 'race' niet uit de database kan halen !

Gegroet,

JB'tje
 
Laatst bewerkt:
Geplaatst door JB'tje
Je vult je gegevens in op de index pagina (of andere pagina b.v. "/index.php?rankings" ) dan gaat het script in de fille 'Login.php' kijken of de gegevens kloppen met wat er in de database staat. indien dit alles klopt, dan includeerd het script Login.php de site: Info.php
Info.php haalt ALLE gegevens op die over jou account beschikbaar zijn.
Klinkt goed. Wellicht zou je login.php en info.php samen kunnen voegen, verder geen commentaar.
daarna includeerd deze pagina de pagina's:

[...]

'info/creatures.php' <- gegevens over de 'creatures' die voorkomen in het spel B.v. hoeveel een miner kost
'info/weapons.php' <- hetzelfde als bij creatures.php maar dan voor de wapens, hoe de wapens heten, enz.
'info/actions.php' <- berekent je 'strike', 'defense', 'spy' en 'sentrie' action, die vervolgens je rank bepalen.
Regel je dat niet via de database ?
nu wat het moet doen: Je kunt bij het registreren een 'Race' kiezen. Deze komt in de database als getal 1,2,3 of 4. Nu zit er aan elke 'Race' een kleur en border vast....
De kleur en border worden in de variabele $_SESSION['kbovenkant'] gestopt en die word afgedrukt op het scherm.

Wat he niet moet doen: mij een mail sturen met daarin een error dat hij de 'race' niet uit de database kan halen !
Juist !

Ok, ik weet zeker dat hij 'race' wel uit de database kan halen. Je geeft in je query namelijk specifiek op dat je de waarde van kolomnaam 'race' uit je database wil halen en aangezien in de mail die jij krijgt errornummer 3.3 staat en niet 3.2, betekent dat dat hij die query wel heeft kunnen uitvoeren, het betekent dat hij hem niet kan fetchen.
Er zijn ongeveer 10.000 redenen waarom jouw script de waarde niet uit de database zou kunnen fetchen, waarvan het grootste deel een kans heeft van 0,000000000000000000042% heeft om op te treden (zeer zeer klein dus).
De reden die het hoogst waarschijnlijk is, is omdat hij simpelweg geen rijen tegenkomt die aan de condities voldoen.

Kijk eens naar de functie mysql_num_rows() ;)
 
Geplaatst door JPeetje
Klinkt goed. Wellicht zou je login.php en info.php samen kunnen voegen, verder geen commentaar.Regel je dat niet via de database ?Juist !

Kijk eens naar de functie mysql_num_rows() ;)
hahaha, leuk dat er verder geen commentaar is :p
en verder, ik ga Login.php en Info.php niet samenvoegen (kan wel) omdat de file dan zo groot word en onoverzichtelijk: Login.php = voor inloggen enz.
Info.php = voor gegevens uit de deatabase halen.....

de functie mysql_num_rows() ken ik wel... het tellen van de rijen die in de database staan en aan de 'voorwaarden' voldoet, b.v. alle mensen met actief = 1 (stuk op 96 spelers op mijn site op dit moment....)
Verder ben ik er net achter gekomen dat ik dit
opgestuurd krijg per mail:

ERROR op Site: index2<br>
Gevonden Door: (292)<br>
De Tijd: 02-05-2005 - 20:44:32<br><br>
De Error: Problem on the site!!! The reason is: <b></b>
Het Error Numer: 3.3
het domme hiervan is dat ik geen username zie !!!!! het zou moeten zijn:
Gevonden Door: pietje (292)<br> (de 292 staat voor zijn ID). Hierna ben ik ff in de database gaan kijken: GEEN van alle ID's die opgestuurd zijn en dezelfde error hebben staat meer in de database !

dus alle mensen, waarvan ik een error ontvangen heb, hebben hun account verweiderd en daarna de error te zien gekregen.......

en aangezien de query op de 'lay-out.php' pagina de laatste is, en dus ook de laatste die mis gaat, krijg ik alleen die error te zien (terwijl gewoon ALLE query's fout zijn gegaan)

Ik ga dit ff repareren, en ik heb zojuist ook nog een grote fout gevonden in het joinen v/d allianties, dus ik heb nog veel te doen !!!!

Heel erg bedankt, nu is het dan eindelijk opgelost !

JB'tje
 
Geplaatst door JB'tje
dus alle mensen, waarvan ik een error ontvangen heb, hebben hun account verweiderd [...]
Lekker dan ... :D

Gokje: je vergeet de loginsessie te verwijderen, waardoor je ervanuit gaat dat hun account nog steeds in de database bestaat.


Verwijderd.
en aangezien de query op de 'lay-out.php' pagina de laatste is, en dus ook de laatste die mis gaat, krijg ik alleen die error te zien (terwijl gewoon ALLE query's fout zijn gegaan)
Da's zeker iets dat je moet fixen ja.
Ik ga dit ff repareren, en ik heb zojuist ook nog een grote fout gevonden in het joinen v/d allianties, dus ik heb nog veel te doen !!!!
Succes :thumb::D
 
Geplaatst door JPeetje
Lekker dan ... :D

Gokje: je vergeet de loginsessie te verwijderen, waardoor je ervanuit gaat dat hun account nog steeds in de database bestaat.
je gokje zit er helaas naast....:p het probleem was dat ik dit deed:
PHP:
  unset($_SESSION['userid']);
dit had ik ook bij 'logout.php' gebruikt, en daar werkte het ook al niet ! dus, ik heb er iets als dit van gemaakt, worden alle sessions geleegd.....
PHP:
$_SESSION = array();
session_destroy();
wat wel werkt......

verder zal ik proberen te onthouden dat je verwijderd zo schrijft..... :o

Greats, JB'tje
 
hallo weer.....

als je op mijn site iemand aanvalt, dan krijg je een 'battlereport' deze ziet er niet uit, dus ik heb het een beetje aangepast.... ik gebruik nu deze code:
PHP:
<script language="javascript">
<!--
  setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['1'].'</b>'; ?>'",1000);
-->
</script>
op een andere pagina, die weer eens geincludeerd word, staat dit:
PHP:
  $battlereport['1']  = '<input type=\"submit\" value=\"Attack Again\"   class=\"button\" onclick=\"window.location.href='. @$_SESSION['websitenaam'].'/index.php?stats&statsID='.$defenseID.'\">';
  $battlereport['1']  .= '<input type=\"submit\" value=\"Go to rankings\" class=\"button\" onclick=\"window.location.href='. @$_SESSION['websitenaam'].'/index.php?rankings'.$link.'\">';
nu krijg ik de buttons wel afgedrukt, maar de hyperlink die er aan vast hoort te zitten werkt niet......
Wat is er mis in het PHP script?????

gegroet,

Jb'tje
 
Ten eerste open je de string met enkele quotes, dus die dubbele quotes hoeven niet geëscaped te worden.
Ten tweede moet je nog '' toevoegen :)
Code:
onclick="window.location.href=[b]'[/b]link[b]'[/b]"
;)
 
Geplaatst door JPeetje
Ten eerste open je de string met enkele quotes, dus die dubbele quotes hoeven niet geëscaped te worden.
Ten tweede moet je nog ' ' toevoegen :)
Code:
onclick="window.location.href=[b]'[/b]link[b]'[/b]"
;)

ik heb er dit van gemaakt, zonder het te escapen en met de ' '
PHP:
$battlereport['1'] =  '<input type="submit" value="Attack Again"   class="button" onclick="window.location.href=\''.@$_SESSION['websitenaam'].'/index.php?stats&statsID='.@$defenseID.'\'">';
$battlereport['1'] .= '<input type="submit" value="Go to rankings" class="button" onclick="window.location.href=\''.@$_SESSION['websitenaam'].'/index.php?rankings'.$link.'\'">';
helaas werkt het nog steeds niet...
de fout is:
Regel: 494
Teken: 89
Fout: ')' wordt verwacht

wat gaat er nu weer verkeerd???
het stuk javascript is niet geweizigd....

JB... :(
 
die zijn al geëscaped
PHP:
\'\'\'\\'\'\'\' //<-- net als deze.... \ ' \ ' \ '

JB
 
Ah ja, de code parser doet hier vervelend, kep je bericht ff gequote, nou zie ik 't :)

Voor zover ik zie zit het probleem niet op deze regels, laat eens wat code voor en na deze regels zien (ongeveer 5 regels) ?
 
eeh, de code boven en onder deze code is niet echt belangerijk..... dat kan ik je nu al wel vertellen.....
ik denk dat er hier misschien een probleempje zit..... deze code + de php code geeft problemen, php code is goed, dus zit hier het probleem in (lijkt mij !)

de $battlereport['1'] die hierin voorkomt staat gelijk aan die buttons !
Code:
<script language="javascript">
<!--
  setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['1'].'</b>'; ?>'",1000);
-->
</script>

maar, omdat ik toch je 'vraag' wil beantwoorden zijn hier de 5 regels voor en na de php code die ik eerder gegefen heb.

PHP:
  // voor de verdediger indien hij op de link drukt in de attacklog
  if(@$_SESSION['userid'] == $battlereport['defenseID'] AND @$_SESSION['username'] == $battlereport['D_username'])
  {
    $battlereport['1'] = 'You where attacked by '.$battlereport['A_username'].' ('.$battlereport['attackerID'].')<br><br>';
    $battlereport['2'] = 'his '. number_format($battlereport['A_a_soldaten']).' soldiers caused '. number_format($battlereport['A_action']).' damage.<br><br>';
    $battlereport['3'] = 'Your '. number_format($battlereport['D_d_soldaten']).' soldiers caused '.number_format($battlereport['D_action']).' dammage.<br><br>';

    if(@$battlereport['winner_name'] == $battlereport['D_username'])
    {
      $battlereport['4'] = '<a class=\"report_green\">You have defeted '.$battlereport['A_username'].'!</a><br><br>';
      $battlereport['5'] = 'During the battle you lost '.number_format($battlereport['D_d_doden']).' soldiers and killed '.number_format($battlereport['A_a_doden']).'<br><br>';
      $battlereport['6'] = '';
    }else{
      $battlereport['4'] = '<a class=\"report_red\">'.$battlereport['A_username'].' has defeated you!</a><br><br>';
      $battlereport['5'] = 'he pillaged '.number_format($battlereport['gold_gejat']).' gold.<br><br>';
      $battlereport['6'] = 'During the battle you lost '.number_format($battlereport['D_d_doden']).' soldiers and killed '.number_format($battlereport['A_a_doden']).'<br><br>';
  } }

    $battlereport['7'] =  '<input type="submit" value="Attack Again"   class="button" onclick="window.location.href=&quot;'.@$_SESSION['websitenaam'].'/index.php?stats&statsID='.@$defenseID.'&quot;">';
    $battlereport['7'] .= '<input type="submit" value="Go to rankings" class="button" onclick="window.location.href=&quot;'.@$_SESSION['websitenaam'].'/index.php?rankings'.$link.'&quot;">';
}
p.s. let er niet op dat '$battlereport['1']' hier veranderd is voor '$battlereport['7']'

De $strings hierboven worden op op deze maniet afgedrukt !
Code:
          <script language="javascript">
          <!--
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['1'].'</b>'; ?>'",1000);
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['2'].'</b>'; ?>'",2000);
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['3'].'</b>'; ?>'",3000);
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['4'].'</b>'; ?>'",4000);
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['5'].'</b>'; ?>'",5000);
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo '<b>'.@$battlereport['6'].'</b>'; ?>'",6000);
            setTimeout("document.getElementById('attacklog').innerHTML += '<?PHP echo @$battlereport['7']; ?>'",6000);
          -->
          </script>

en, ''attacklog'' bestaat..... (het is een <td id="attacklog">)

goed, dit zal vast wel genoeg info zijn, zo niet, zeg het maar......

Gegroet, en alvast bedankt,

JB'tje
 
Ow, het gaat hier om een JS probleem :8-0:

Probeer eens addslashes() toe te passen op de PHP waarden die je in JS wil gebruiken ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan