Autor Zpráva
wlashack
Profil
Zdravím,
mám na webu script, který ze složky o XX obrázcích náhodně jeden vybere a zobrazí (názvy obrázků jsou vždy 00.png až XX.png). Script funguje správně, pouze v případě, že zobrazí obrázek s posledním nejvyšším číslem (aktuálně 77.png), hodí k němu hlášku Notice: Undefined offset: 78 in _script-cosedeje.php on line 74. Je to tedy nejspíš o tom, že script vypočetl hodnotu 78, a ta už je mimo povolený rámec 0 až 77. Není to nic fatálního, jen to kazí dojem, když se ta hláška na stránce objeví. Nejsem programátor, člověk, který to programoval je dávno kdoví kde, tak zkouším zde. Dokážete to jednoduše opravit, anebo tu chybovou hlášku aspoň zakázat?
Celý script je zde, díky:

<!-- 
*************************************************
                   SCRIPT
************************************************* 
-->

<!-- <img src="/images/tarotonline/01.png" alt="" /> -->
<div style="text-align:center;">  


<form method="post">

<?php

// CONFIG
$directory = "images/tarotonline/";
$front_cart_name="images/web/title-co-se-deje.png";
$back_cart_name="images/web/back.png";
$cart_width=438;
$cart_height=608;
$sortby = "rand"; // if you don't use randomize, leave quotation marks empty "" instead of "rand"

$button_url= ""; // if you don't use, leave quotation marks empty "" instead of the path to button picture "images/web/button-next.png"
$button_url_sortby="";  // if you don't use randomize, leave quotation marks empty "" instead of "rand"
// END CONFIG


// init
$carts = glob($directory . "*");
$front_cart=$front_cart_name;
$back_cart=$back_cart_name;
// remove first, second cart
$carts=array_diff($carts, array($front_cart));
//$carts=array_diff($carts, array($back_cart));

// select last cart
$carts_end=$carts;
$last_cart=end($carts_end);
$last_cart=key($carts_end);

// select current cart
$current_cart=current($carts);
// select next cart
$next_cart=next($carts);

echo "<input type=\"hidden\" name=\"last_cart\" value=\"".$last_cart."\" />";


if(isset($_POST['submit_x'], $_POST['submit_y']) && $sortby!='rand' && $button_url_sorby!='rand' && !isset($_POST['submit_button_x'],$_POST['submit_button_y'])) {

$key = array_search($_POST['next_cart'], $carts);

  if($key>=0 && $_POST['next_cart']){
    $key=$key+1;
    echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[$key]."\" />";
    echo "<input name=\"submit\" type=\"image\" src=\"".$_POST['next_cart']."\" style=\"width:100%\" />";
    if($button_url) {echo "<p class=\"button\"><input name=\"submit_button\" style=\"100%\" type=\"image\" src=\"".$button_url."\" /></p>";}
  } else {
  echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[0]."\" />";
  echo "<input type=\"image\" src=\"".$front_cart."\" name=\"submit\" style=\"width:100%\" />";
  }
  
 
}

// sortby rand, send by cart 
 elseif(isset($_POST['submit_x'], $_POST['submit_y']) && $sortby=='rand') {

  $rand_carts=$carts;
  $rand_cart=$rand_carts[array_rand($rand_carts)];
  $key = array_search($rand_cart, $carts);
  $key=$key+1;
  
  echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[$key]."\" />";
  echo "<input type=\"image\" src=\"".$rand_cart."\" name=\"submit\" style=\"width:100%\" />";
    if($button_url) {echo "<p class=\"button\"><input name=\"submit_button\" style=\"100%\" type=\"image\" src=\"".$button_url."\" /></p>";}

// sortby rand, send by button  
} elseif(isset($_POST['submit_button_x'], $_POST['submit_button_y']) && $button_url_sortby!='rand') {

$key = array_search($_POST['next_cart'], $carts);

  if($key>=0 && $_POST['next_cart']){
    $key=$key+1;
    if ($key>77) $key=0;
    echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[$key]."\" />";
    echo "<input name=\"submit\" type=\"image\" src=\"".$_POST['next_cart']."\" style=\"width:100%\" />";
    if($button_url) {echo "<p class=\"button\"><input name=\"submit_button\" style=\"100%\" type=\"image\" src=\"".$button_url."\" /></p>";}
    //if($button_url_sortby) {echo "<p class=\"button\"><input name=\"submit_button\" style=\"100%\" type=\"image\" src=\"".$button_url."\" /></p>";}
  } else {
  echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[0]."\" />";
  echo "<input type=\"image\" src=\"".$front_cart."\" name=\"submit\" style=\"width:100%\" />";
  }



} elseif(isset($_POST['submit_button_x'], $_POST['submit_button_y']) && $button_url_sortby=='rand') {
  //echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$last_cart."\" />";
  $rand_carts=$carts;
  $rand_cart=$rand_carts[array_rand($rand_carts)];
  $key = array_search($rand_cart, $carts);
  $key=$key+1;
  
  echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[$key]."\" />";
  echo "<input type=\"image\" src=\"".$rand_cart."\" name=\"submit\" style=\"width:100%\" />";
    if($button_url) {echo "<p class=\"button\"><input name=\"submit_button\" style=\"100%\" type=\"image\" src=\"".$button_url."\" alt=\"submit\"/></p>";}
    
} else {
echo "<input type=\"hidden\" name=\"next_cart\" value=\"".$carts[0]."\" />";
echo "<input type=\"image\" src=\"".$front_cart."\" name=\"submit\" alt= \"title\" style=\"width:100%\" />";
if($button_url) {echo "<p class=\"button\"><input name=\"submit_button\" style=\"100%\" type=\"image\" src=\"".$button_url."\" alt=\"submit\" /></p>";}
}

?>

</form>
</div><!-- KONEC <div style="text-align:center;"> -->
<!-- 
*************************************************
                 KONEC - SCRIPT
************************************************* 
-->
Joker
Profil
wlashack:
Je to tedy nejspíš o tom, že script vypočetl hodnotu 78, a ta už je mimo povolený rámec 0 až 77.
Přesně tak.

Možná by stačilo tu podmínku o pár řádků výš rozšířit:
  if($key>=0 && $_POST['next_cart'] && isset($carts[$key+1])) {
wlashack
Profil
Tak bohužel to nepomohlo. Ta podmínka je v tom kódu dvakrát, tak jsem pro jistotu vyzkoušel všechny varianty - nahradit ten první výskyt, pak ten druhý výskyt a nakonec oba výskyty, ale hlásí to pořád tu samou chybu. :(
Chro.
Profil
Tak si najdi v tom skriptu veškeré funkce rand() a v druhých parametrech odečti -1.
wlashack
Profil
Tak jsem to zkusil, ale nepomohlo. Nicméně jsem zkusil selským rozumem, aniž bych nějak rozuměl tomu kódu, vydedukovat, že stěžejní jsou nejspíš řádky 66 až 76. A tam mě napadlo za řádek 72:

$key=$key+1;

připsat řádek
if ($key>77) $key=77; (obšlehl jsme jej a upravil podle řádku 85)

A funguje to asi správně. Aspoň teda co jsem zkoušel, tak to zobrazuje bez chyb první i poslední obrázek ve složce a chybu mi to žádnou nehodilo.

Díky!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0