PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 02-02-2011 11:31:36

himron
Membre
Inscription : 02-12-2010
Messages : 44

var "global"

salut a tous,

je me casse la tete depuis quelques jours sur un script que j'ai récupéré et que j'essaye d'adapter.
c'est pour faire un agenda sur mon site (et je n'ai pas les competances pour gérer completement tout le systeme de datation donc je récupere un agenda existant, mais...)

pour localiser un evenement, il y a tout un systeme de mémorisation (adresse, nom de contact, fax, telephone........) dans une base secondaire. systeme que j'ai fait sauter (un menu deroulant pour selectionner l'endroit, que j'ai remplacé par un champ de texte, ou on indique simplement la ville).
ceci ca marche, l'encodage dans la base de donnée principale fonctionne bien.


la ou ca se corse, c'est pour l'affichage des données. les pages php vont chercher des données "global" (ci dessous), et je pense qu'il ne les prends (ou traite)  pas dans le bon format parce que ca ne s'affiche pas. le code que j'ai est :

function grabDates($start,$end,$category_array) {
  $cats = implode(",",$category_array);
  global $table_prefix, $supergroup;
  global $title, $niceday, $start_time, $end_time, $venue, $city, $state, $cat,$ed, $usr, $color, $background,$lang, $w, $ap, $status;

donc il signale que des données "global" sont utilisées dans la page, mais ou et comment va t il les cherchers, comment leur donne t il une valeur ? je ne trouve nulle part de fonction les liant a une base de donnée. j'ai beau fouiller plusieurs pages, je ne trouve rien.

je suis preneur pour toute information/piste que vous auriez a ce sujet. merci d'avance
(s'il vous fauut plus de code, dites le moi)

Hors ligne

#2 02-02-2011 11:59:47

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : var "global"

Dans un cas comme celui là un ctrl+f pour lancer une recherche sur le nom de la variable est le mieux que tu puisses faire.
Nous ne pourrons te donner de meilleure aide. hmm

Hors ligne

#3 02-02-2011 12:43:01

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : var "global"

ok je ne connaissais pas cette fonction. deja qqch d'appris aujourd'hui wink
mais par contre : aucun resultat trouvé. (or il doit y en avoir puisque la grille de l'agenda affiche 4 evenements, et un 5eme ne s'affiche pas.)
ca s'arrange pas.

je précise encore ceci :
le probleme est la variable $venue.
lorsque cette variable = un chiffre (faisant anciennement référence a une autre table), l'evenement s'affiche dans la grille du mois.
lorsque $venue = du texte, cela ne s'affiche pas.
dans la base de donnée, l'entrée "venue" est bien en varchar et l'encodage se fait tres bien, tant en chiffre qu'en texte.
le probleme est donc bien de l'ordre de l'encodage de la valeur dans $venue et son utilisation php.

mais j'ignore comment trouver la ligne problématique. le code ci dessus commence la page index.php. il n'y a rien avant cela. pourtant les valeurs doivent bien etre mise dans ces variables d'une facon ou d'une autre...

help me...

Hors ligne

#4 02-02-2011 14:46:20

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : var "global"

Oui mais cette fonction est appelée plus bas, donc les variables peuvent être déclarées entre la déclaration de la fonction et son appel.
Je te conseille de récupérer notepad++, il permet de faire une recherche dans plusieurs fichiers.
Comme cela tu lances la recherche sur le répertoire root de ton site et tu tomberas forcement sur la déclaration de ces variables. Ou sinon c'est que tu ne sais pas regarder. ^^

Hors ligne

#5 02-02-2011 15:31:46

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : var "global"

exccellent cette recherche avec notepad++, en effet ca m'aide.
si je comprend bien, les 1eres lignes que j'avais posté plus haut, indiquent simplement que des variables nommées .... vont etre utilisées plus bas. pas qu'elles contiennent deja qqch.

bon, ci dessous le code complet de la page index.php
d'apres ce que je comprend, il y a un bloc de codes (ligne 26-49 ) qui va rechercher les données "en vrac" dans plusieurs tables, et ensuite un bloc de codes (lignes 52-80 ) qui organise ces données.

dans le 1er bloc (lignes 26-49 ) je dois supprimer toute mention de la base calilink.xxxxxx
dans le 2eme bloc (ligne 52-80 ) je dois réécrire tout pour qu'il n'y ait pas d'incohérence avec les suppressions de données ci dessous (je suppose que les [no] vont changer...)

est ce que vous pouvez m'aider ? je ne suis pas assez a l'aise pour refaire ce code par moi meme sans mettre de bugs et faire foirer cela encore plus... wink

<?php

/* Grab Dates Function */
// Queries database and dumps events into an array.
// $start and $end are date ranges in 20060118 format
// $category_array is arrays of categories to be included
function grabDates($start,$end,$category_array) {
  $cats = implode(",",$category_array);
  global $table_prefix, $supergroup;
  global $title, $niceday, $start_time, $end_time, $venue, $city, $state, $cat,$ed, $usr, $color, $background,$lang, $w, $ap, $status;
  /* get applicable events */
  $superedit = false;
  if (!$supergroup) {
    $q = "select moderate from ".$table_prefix."users_to_groups where group_id = ".$w." and user_id = ".$_SESSION["user_id"];
    $query = mysql_query($q);
    if (mysql_num_rows($query) > 0) {
      $mod = mysql_result($query,0,0);
      if ($mod > 2) {
        $superedit = true;
      }
    }
  } else {
    $superedit = true;
  }
  if (($mod > 0) || ($superedit)) {
    $q = "select DATE_FORMAT(calidates.date, '%Y%m%d'),
    DATE_FORMAT(calidates.date, '%H%i'),
    calievents.event_id,
    calievents.title,
    DATE_FORMAT(calidates.date, '%W, %M %e, %Y'),
    DATE_FORMAT(calidates.date, '%l:%i %p'),  
    DATE_FORMAT(calidates.end_date, '%l:%i %p'),
    calilinks.company, calilinks.city, calilinks.state,
    calievents.category_id, calievents.user_id,
    calidates.date,
    calicategories.color, calicategories.background,
    calievents.status_id
   
    from calievents, calidates, calilinks, calicategories, caligroups
    where calidates.date >= '$start'
    and calidates.date < '$end'
    and calidates.event_id = calievents.event_id
    and calievents.venue_id = calilinks.link_id
    and calievents.category_id in ("
.$cats.")
    and calievents.category_id = calicategories.category_id
    and calievents.group_id = caligroups.group_id
    and calievents.group_id = "
.$w."
   
    order by calidates.date"
;
    $query = mysql_query($q);
    //echo $q."<br>";
    while ($row = mysql_fetch_row($query)) {
      $edit = false;
      if ($row[11] == $_SESSION["user_id"]) {
        $edit = true;
      } elseif ($superedit) {
        $edit = true;
      }
      if ($edit==true) $ed[$row[2]]=true;
      if ($superedit==true) $ap[$row[2]]=true;
      $title[$row[2]]=strip_tags($row[3]);
      $niceday[$row[0]][$row[12]][$row[2]]=$row[4];
      if (($row[5] == "12:00 AM") && ($row[6] == "11:59 PM")) {
        $start_time[$row[0]][$row[12]][$row[2]]=$lang["all_day"];
      } elseif (($row[5] == "12:00 AM") && ($row[6] == "12:00 AM")) {
        $start_time[$row[0]][$row[12]][$row[2]]=$lang["tba"];
      } else { 
        $start_time[$row[0]][$row[12]][$row[2]]=$row[5];
        if ($row[6]) $end_time[$row[0]][$row[12]][$row[2]]=$row[6];
      }
      if ($row[7]) $venue[$row[2]]=$row[7];
      if ($row[7] && $row[8]) $city[$row[2]]=$row[8];
      if ($row[7] && $row[8] && $row[9]) $state[$row[2]]=$row[9];
      $cat[$row[2]]=$row[10];
      $usr[$row[2]]=$row[11];
      $color[$row[2]]=$row[13];
      $background[$row[2]]=$row[14];
      $status[$row[2]]=$row[15];
    }
  }
}

function grab($start,$end,$category) {
  global $include_child_categories, $include_parent_categories, $category_array,$supercategory,$supergroup,$category_permissions,$w,$table_prefix;
  $canview = false;
  $groupview = false;
  if (!$supergroup) {
    $q = "SELECT * from ".$table_prefix."users_to_groups where group_id = ".$w." and  user_id = ".$_SESSION["user_id"];
    $query = mysql_query($q);
    if (mysql_num_rows($query) > 0) $groupview = true;
  } else {
    $groupview = true;
  }
  if ($groupview) {
    if (!$supercategory) {
      //build permission array
      $q = "SELECT category_id from ".$table_prefix."users_to_categories where user_id = ".$_SESSION["user_id"];
      //echo $q."<br>";
      $query = mysql_query($q);
      if (mysql_num_rows($query) > 0) {
        while ($row = mysql_fetch_row($query)) {
          $category_permissions[] = $row[0];
         
        }
      }
      if (in_array($category,$category_permissions)) $canview = true;
    } else {
      $canview = true;
    }
    if ($canview) {
      $category_array[] = $category;
      if ($include_child_categories) grab_child($start,$end,$category,true);
      if ($include_parent_categories) grab_parent($start,$end,$category,true);
      grabDates($start,$end,$category_array);
     
    }
 
  }
}

function grab_child($start,$end,$category,$starter=false) {
  global $table_prefix, $category_array,$supercategory,$category_permissions;
  $canview = false;
  if (!$supercategory) {
    if ($category_permissions) {
      if (in_array($category,$category_permissions)) $canview = true;
    }
  } else {
    $canview = true;
  }
  if ($canview) {
    if (!$starter) $category_array[] = $category;
    $q = "select category_id from ".$table_prefix."categories where sub_of = ".$category;
    //echo $q."<br>";
    $query = mysql_query($q);
    if (!$query) $msg = "Database Error : ".$q;
    else {
      while ($row = mysql_fetch_row($query)) {
        grab_child($start,$end,$row[0],false);
      }
    }
  }
}

function grab_parent($start,$end,$category,$starter=false) {
  global $table_prefix, $category_array, $supercategory,$category_permissions;
  $canview = false;
  if (!$supercategory) {
    if ($category_permissions) {
      if (in_array($category,$category_permissions)) $canview = true;
    }
  } else {
    $canview = true;
  }
  if ($canview) {
    if (!$starter) $category_array[] = $category;
   
    $q = "select sub_of from ".$table_prefix."categories where category_id = ".$category;
    //echo $q."<br>";
    $query = mysql_query($q);
    if (!$query) $msg = "Database Error : ".$q;
    else {
      while ($row = mysql_fetch_row($query)) {
        grab_parent($start,$end,$row[0],false);
      }
    }
  }
}

include "includes/start.php";
$canview = false;
//if no access, then kick them out!
if (!$superview) {
  mysql_close($link);
  $msg = $lang["must_log_in"];
  header("Location: login.php?msg=".$msg."&".$common_get);
}

if (($supergroup) && ($supercategory)) {
  $canview = true;
 
} else {
 
  if (!$supercategory) {
    $canview = false;
    $q = "select * from ".$table_prefix."users_to_categories where category_id = ".$c." and user_id = ".$_SESSION["user_id"];
    //echo $q;
    $qu = mysql_query($q);
    if (mysql_num_rows($qu) > 0) {
      $canview = true;
     
    } else {
      $msg .= "<p>".$lang["no_permission_to_view_category"]."</p>";
      $canview = false;
     
    }
  }
  if ((!$supergroup) && $canview) {
    $q = "select * from ".$table_prefix."users_to_groups where group_id = ".$w." and user_id = ".$_SESSION["user_id"];
    //echo $q;
    $qu = mysql_query($q);
    if (mysql_num_rows($qu) > 0) {
      $canview = true;
     
    } else {
      $msg .= "<p>".$lang["no_permission_to_view_group"]."</p>";
      $canview = false;
     
    }
  }
}
if (($canview == true)&& $script) {
  include "modules/".$script;
} else {
  include "includes/header.php";
  include "includes/footer.php";
}

?>

Dernière modification par himron (02-02-2011 15:35:07)

Hors ligne

#6 02-02-2011 16:55:03

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : var "global"

En fait il n'y a pas grand chose de compliqué si ce n'est la lecture, car ils ont vraiment eu le chic dans ce cas pour faire quelque chose d'illisible...
Un mysql_fetch_array() aurait été plus lisible !

mysql_fetch_row() renvoie des n-uplets en numérotant les colonnes du n-uplet à partir de 0.
DATE_FORMAT(calidates.date, '%Y%m%d') sera donc $row[0], et calievents.status_id sera $row[15].
Il suffit donc de supprimer les codes comportant les index de $row[] qui correspondent aux colonnes que tu ne veux pas, puis de supprimer ces colonnes(dans le SELECT) par la suite dans la requête (et la table dans le FROM).

Hors ligne

#7 02-02-2011 19:16:10

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : var "global"

ok xTG, t'es le meilleur.
je te remercie pour tes conseils et explications.
j'ai corrigé les lignes de codes comme tu l'as conseillé et ca marche.

de ce que j'en sais, un fetch array aurait été en effet plus lisible.
et de ce que constate (des pages imbriquées dans des pages etc...) ce code est tout sauf simplifié.
mais je dois faire avec.

un tout grand merci.

Hors ligne

#8 02-02-2011 20:59:35

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : var "global"

C'est un plaisir d'aider des personnes comme toi qui n'attendent pas un code réparé par nos soins et qui mettent les mains dans le cambouis. smile

Hors ligne

Pied de page des forums