CommentCaMarche
Recherche
Posez votre question Signaler

Erreur d'analyse XML

sunxai - Dernière réponse le 4 mars 2010 à 15:28
Bonjour,
Je viens d'installer "galette" un outil de gestion d'adhérents et de cotisations en ligne à destination des associations, et je me retrouve face à un problème qui me dépasse.
J'ai un code erreur:
Erreur d'analyse XML : données incompréhensibles après l'élément de document
Emplacement : http://127.0.0.1/Galette/galette-0.63.3/ajouter_contribution.php
Numéro de ligne 2, Colonne 1 :<b>Notice</b>: Undefined variable: y in <b>C:\Program Files\EasyPHP-5.3.1\www\Galette\galette-0.63.3\includes\functions.inc.php</b> on line <b>397</b><br />
^
Et voilà ce qui est concerné: (ligne 397= ligne 5 ici)
function beg_membership_after($date) {
$beg = "";
if (PREF_BEG_MEMBERSHIP != "") {
list($j, $m) = explode("/", PREF_BEG_MEMBERSHIP);
$time = mktime(0, 0, 0, $m, $j, $y);
while ($time <= $date){
$y++;
$time = mktime(0, 0, 0, $m, $j, $y);
}
$beg = date('d/m/Y', strtotime('-1 day', $time)) . "\n";
}
return $beg;
Pourriez vous me dire quel est le problème?
Merci infiniment!
Configuration: Windows XP / Firefox 3.6
Lire la suite 
Réponse
+0
moins plus
c'est marqué:
Undefined variable: y
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour votre réponse, mais je ne comprend pas, tu veux dire que sur la ligne concerné
il faut que j'enlève $y ?
Ajouter un commentaire
Réponse
+0
moins plus
Non, que la variable "y" n'est pas définie, y doit valoir qqchose pour être utilisée par la fonction mktime().
Essaie de vérifier si y est différent de null. Si ça ne fonctionne toujours pas, montre un peu plus de ton code, ça m'est diffficile de voir d'où vient l'erreur.
Ajouter un commentaire
Réponse
+0
moins plus
Merci UgglyBoy de ton aide,

Je ne saurai pas te dire si "y" est nul, je te mets donc la totalité du code.
Par contre j'ai remarqué que "y" n'apparaissait que dans la section que j'ai déposé précédemment.

Le voilà:

<?php // -*- Mode: PHP; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-

/* functions.inc.php
 * - Fonctions utilitaires
 * Copyright (c) 2003 Frédéric Jaqcuot
 * Copyright (c) 2004 Georges Khaznadar (password encryption, images)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */


function makeRandomPassword($size){
  $pass = "";
  $salt = "abcdefghjkmnpqrstuvwxyz0123456789";
  srand((double)microtime()*1000000);
  $i = 0;
  while ($i <= $size-1){
    $num = rand() % 33;
    $tmp = substr($salt, $num, 1);
    $pass = $pass . $tmp;
    $i++;
  }
  return $pass;
}

function PasswordImageName($c){
  return "pw_".md5($c).".png";
}

function PasswordImageClean(){
  // cleans any password image file older than 1 minute
  $dh=@opendir("photos");
  while($file=readdir($dh)){
    if (substr($file,0,3)=="pw_" &&
        time() - filemtime("photos/".$file) > 60) {
      unlink("photos/".$file);
    }
  }
}

function PasswordImage(){
  // outputs a png image for a random password
  // and a crypted string for it. The filename
  // for this image can be computed from the crypted
  // string by PasswordImageName.
  // the retrun value is just the crypted password.

  PasswordImageClean(); // purges former passwords
  $mdp=makeRandomPassword(7);
  $c=crypt($mdp);
  $png= imagecreate(10+7.5*strlen($mdp),18);
  $bg= imagecolorallocate($png,160,160,160);
  imagestring($png, 3, 5, 2, $mdp, imagecolorallocate($png,0,0,0));
	$file = STOCK_FILES."/".PasswordImageName($c);

	//TODO:2 lines below is useless but necessary by a bug in php-gd(http://bugs.php.net/bug.php?id=35246)
	$fh=fopen($file,'w');
	fclose($fh);

  imagepng($png,$file);
  // The perms of the file can be wrong, correct it
  // WARN : chmod() can be desacivated (i.e. : Free/Online)
  @chmod($file, 0644);
  return $c;
}

function PasswordCheck($pass,$crypt){
  return crypt($pass,$crypt)==$crypt;
}

function print_img($img) {
	$file = STOCK_FILES."/".$img;
	$image_type = false;
	if(function_exists('exif_imagetype')) {
		$image_type = exif_imagetype($file);
	} else {
		$image_size = getimagesize($file);
		if(is_array($image_size) && isset($image_size[2])) $image_type = $image_size[2];
	}
	if( $image_type ) {
		return $file;
	}
}


function isSelected($champ1, $champ2) {
  if ($champ1 == $champ2) {
    echo " selected";
  }
}

function isChecked($champ1, $champ2) {
  if ($champ1 == $champ2) {
    echo " checked";
  }
}

function txt_sqls($champ) {
  return "'".str_replace("'", "\'", str_replace('\\', '', $champ))."'";
}

function is_valid_web_url($url) {
  return (preg_match('#^http[s]?\\:\\/\\/[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i', $url));
}

/*
 *
 * is_valid_email(): an e-mail validation utility routine
 * Version 1.1.1 -- September 10, 2000
 *
 * Written by Michael A. Alderete
 * Please send bug reports and improvements to: <michael@aldosoft.com>
 *
 * This function matches a proposed e-mail address against a validating
 * regular expression. It's intended for use in web registration systems
 * and other places where the user is inputting their e-mail address and
 * you want to check that it's OK.
 *
 */

function is_valid_email ($address) {
  return (preg_match(
                     '/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+'.   // the user name
                     '@'.                                     // the ubiquitous at-sign
                     '([-0-9A-Z]+\.)+' .                      // host, sub-, and domain names
                     '([0-9A-Z]){2,4}$/i',                    // top-level domain (TLD)
                     trim($address)));
}

function dblog($action, $argument="", $query="")
{
	if (PREF_LOG>="1")
	{
		if (PREF_LOG==1)
			$query="";
		//FIXME : for $query, there is a problem if magic_quotes is enabled
		//FIXME : same for $action .. probably for others too :/
		$requete = "INSERT INTO ".PREFIX_DB."logs (date_log, ip_log, adh_log, action_log, text_log, sql_log)
				VALUES (" . $GLOBALS["DB"]->DBTimeStamp(time()) . ", " .
						$GLOBALS["DB"]->qstr($_SERVER["REMOTE_ADDR"], get_magic_quotes_gpc()) . ", " .
						$GLOBALS["DB"]->qstr($_SESSION["logged_nom_adh"], get_magic_quotes_gpc()) . ", " .
						$GLOBALS["DB"]->qstr($action) . ", " .
						$GLOBALS["DB"]->qstr($argument, get_magic_quotes_gpc()) . ", " .
						$GLOBALS["DB"]->qstr($query) . ");";
		$GLOBALS["DB"]->Execute($requete);
	}
}

function resizeimage($img,$img2,$w,$h)
{
	if(function_exists("gd_info"))
	{
		$ext = substr($img,-4);
		$gdinfo = gd_info();
		switch(strtolower($ext))
		{
			case '.jpg':
				if (!$gdinfo['JPEG Support'])
					return false;
				break;
			case '.png':
				if (!$gdinfo['PNG Support'])
					return false;
				break;
			case '.gif':
				if (!$gdinfo['GIF Create Support'])
					return false;
				break;
			default:
				return false;
		}

		list($cur_width, $cur_height, $cur_type, $curattr) = getimagesize($img);
		
		$ratio = $cur_width/$cur_height;
		if ($cur_width > $cur_height)
			$h = $w/$ratio;
		else
			$w = $h*$ratio;

		$thumb = imagecreatetruecolor ($w, $h);
		switch($ext)
		{
			case ".jpg":
				$image = ImageCreateFromJpeg($img);
				imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $cur_width, $cur_height);
				imagejpeg($thumb, $img2);
				break;
			case ".png":
				$image = ImageCreateFromPng($img);
				// Turn off alpha blending and set alpha flag
				//That prevent alpha transparency to be saved as an arbitrary color (black in my tests)
				imagealphablending($thumb, false);
				imagealphablending($image, false);
				imagesavealpha($thumb, true);
				imagesavealpha($image, true);
				imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $cur_width, $cur_height);
				imagepng($thumb, $img2);
				break;
			case ".gif":
				$image = ImageCreateFromGif($img);
				imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $cur_width, $cur_height);
				imagegif($thumb, $img2);
				break;
		}
	}
}

function custom_html_entity_decode( $given_html, $quote_style = ENT_QUOTES )
{
  $trans_table = array_flip(get_html_translation_table( HTML_ENTITIES, $quote_style ));
  $trans_table['&#39;'] = "'";
  return ( strtr( $given_html, $trans_table ) );
}

//sanityze fields
//TODO better handling (replace bad string not just detect it)
function sanityze_mail_headers($field) {
	$result = 0;
	if ( stripos("\r",$field)!==false || stripos("\n",$field)!==false ) {
		 $result = 0;
	} else {
		$result = 1;
	}
	return $result;
}

//TODO better handling (replace bad string not just detect it)
function sanityze_superglobals_arrays() {
	$errors = 0;
	foreach($_GET as $k => $v) {
		if (stripos("'",$v)!==false || stripos(";",$v)!==false || stripos("\"",$v)!==false ) {
			 $errors++;
		}
	}
	foreach($_POST as $k => $v) {
		if (stripos("'",$v)!==false || stripos(";",$v)!==false || stripos("\"",$v)!==false ) {
			 $errors++;
		}
	}
	return $errors;
}

function custom_mail($email_adh,$mail_subject,$mail_text, $content_type="text/plain")
{
  // codes retour :
  //  0 - error mail()
  //  1 - mail sent
  //  2 - mail desactived in preferences
  //  3 - bad configuration ?
  //  4 - SMTP unreacheable
  //  5 - breaking attempt
  $result = 0;

	//sanityze headers
	$params = array($email_adh,
										$mail_subject,
										//mail_text
										$content_type);
	foreach ($params as $param) {
		if( ! sanityze_mail_headers($param) ) {
			return 5;
			break;
		}
	}

  // Headers :

  // Add a Reply-To field in the mail headers.
  // Fix bug #6654.
  
  if ( PREF_EMAIL_REPLY_TO )
    $reply_to = PREF_EMAIL_REPLY_TO;
  else
    $reply_to = PREF_EMAIL;

  $headers = array("From: ".PREF_EMAIL_NOM." <".PREF_EMAIL.">",
                   "Message-ID: <".makeRandomPassword(16)."-galette@".$_SERVER['SERVER_NAME'].">",
                   "Reply-To: <".$reply_to.">",
                   "X-Sender: <".PREF_EMAIL.">",                   
                   "Return-Path: <".PREF_EMAIL.">",
                   "Errors-To: <".PREF_EMAIL.">",
                   "X-Mailer: Galette-".GALETTE_VERSION,
                   "X-Priority: 3",
                   "Content-Type: $content_type; charset=iso-8859-15");

  switch (PREF_MAIL_METHOD)
    {
    case 0:
      $result = 2;
      break;
    case 1:
      $mail_headers = "";
      foreach($headers as $oneheader)
        $mail_headers .= $oneheader . "\r\n";
      //-f .PREF_EMAIL is to set Return-Path
      //if (!mail($email_adh,$mail_subject,$mail_text, $mail_headers,"-f ".PREF_EMAIL))
      //set Return-Path
			//seems to does not work
      ini_set('sendmail_from', PREF_EMAIL);
      if (!mail($email_adh,$mail_subject,$mail_text, $mail_headers)) {
        $result = 0;
      } else {
        $result = 1;
      }
      break;
    case 2:
      // $toArray format --> array("Name1" => "address1", "Name2" => "address2", ...)

      //set Return-Path
      ini_set('sendmail_from', PREF_EMAIL);
      $errno = "";
      $errstr = "";
      if (!$connect = fsockopen (PREF_MAIL_SMTP, 25, $errno, $errstr, 30))
        $result = 4;
      else
        {
          $rcv = fgets($connect, 1024);
          fputs($connect, "HELO {$_SERVER['SERVER_NAME']}\r\n");
          $rcv = fgets($connect, 1024);
          fputs($connect, "MAIL FROM:".PREF_EMAIL."\r\n");
          $rcv = fgets($connect, 1024);
          fputs($connect, "RCPT TO:".$email_adh."\r\n");
          $rcv = fgets($connect, 1024);
          fputs($connect, "DATA\r\n");
          $rcv = fgets($connect, 1024);
          foreach($headers as $oneheader)
            fputs($connect, $oneheader."\r\n");
          fputs($connect, stripslashes("Subject: ".$mail_subject)."\r\n");
          fputs($connect, "\r\n");
          fputs($connect, stripslashes($mail_text)." \r\n");
          fputs($connect, ".\r\n");
          $rcv = fgets($connect, 1024);
          fputs($connect, "RSET\r\n");
          $rcv = fgets($connect, 1024);
          fputs ($connect, "QUIT\r\n");
          $rcv = fgets ($connect, 1024);
          fclose($connect);
          $result = 1;
        }
      break;
    default:
      $result = 3;
    }
  return $result;
}

function UniqueLogin($DB,$l) {
  $result = $DB->Execute("SELECT * FROM ".PREFIX_DB."adherents
                          WHERE login_adh='".addslashes($l)."'");
  return ($result->RecordCount() == 0);
}

function date_db2text($date) {
	if ($date != '')
	{
		list($a,$m,$j)=explode("-",$date);
		$date="$j/$m/$a";
	}
	return $date;
}

function date_text2db($DB, $date) {
	list($j, $m, $a)=explode("/",$date);
	if (!checkdate($m, $j, $a))
		return "";
	return $DB->DBDate($a.'-'.$m.'-'.$j);
}

function distance_months($beg, $end) {
	list($bj, $bm, $ba) = explode("/", $beg);
	list($ej, $em, $ea) = explode("/", $end);
	if ($bm > $em) {
		$em += 12;
		$ea--;
	}
	return ($ea -$ba)*12 + $em - $bm;
}

function beg_membership_after($date) {
	$beg = "";
	if (PREF_BEG_MEMBERSHIP != "") {
		list($j, $m) = explode("/", PREF_BEG_MEMBERSHIP);
		$time = mktime(0, 0, 0, $m, $j, $y);
		while ($time <= $date){
			$y++;
			$time = mktime(0, 0, 0, $m, $j, $y);
		}
		$beg = date('d/m/Y', strtotime('-1 day', $time)) . "\n";
	}
	return $beg;
}

function get_form_value($name, $defval)
{
	$val = $defval;
	if (isset($_GET[$name]))
		$val = $_GET[$name];
	elseif (isset($_POST[$name]))
		$val = $_POST[$name];
	return $val;
}

function get_numeric_form_value($name, $defval)
{
	$val = get_form_value($name, $defval);
	if (!is_numeric($val))
		$val = '';
	return $val;
}

function get_numeric_posted_value($name, $defval) {
	if (isset($_POST[$name])) {
		$val = $_POST[$name];
		if (is_numeric($val))
			return $val;
	}
	return $defval;
}

?>
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Sur la ligne

list($j, $m) = explode("/", PREF_BEG_MEMBERSHIP);

rajoute ,$y comme suit :

list($j, $m, $y) = explode("/", PREF_BEG_MEMBERSHIP);

Cela dépend de ce que contient PREF_BEG_MEMBERSHIP, mais il y a des chances pour que ce soit une date complète, y compris année.

Xavier
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour Xavier,

Lorsque je rajoute $y comme tu me l'as dit ça renvoi l'erreur sur cette ligne.
Reivax962 2865Messages postés jeudi 16 juin 2005Date d'inscription 27 février 2015Dernière intervention - 4 mars 2010 à 12:00
OK, donc cette constante ne contient pas de champ année.
Vu que la fonction cherche la prochaine occurrence de cette date qui soit supérieure à la date limite passée en paramètre, on va utiliser cette date passée en paramètre pour récupérer une année.
Dans ce cas, enlève ce $y, et à la ligne d'après, rajoute :

$y = date('Y', $date) - 1;

Cela devrait fonctionner.

Xavier
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Merci Xavier, ça marche !
Par contre on m'a donné une autre solution qui enlève le code également erreur, mais pourrais tu me dire les conséquences de chacun de ces deux codes sur mon application?
Je veux dire par là, est ce que l'un ou l'autre ou les deux vont donner des restrictions?

Code 1 (le tien)

$y = date('Y', $date) - 1;


Code 2 (à rajouter avant la ligne problématique)

if(!isset($y)) $y=date('Y');

Merci
Ajouter un commentaire
Réponse
+0
moins plus
Alors, le !isset($y) me paraît inutile parce que vu la fonction, le test sera toujours positif. On peut donc s'en passer.

Ensuite, date('Y') prend l'année en cours. Suivant les cas d'utilisation, cela peut donner un résultat faux à la fonction, qui cherche le premier anniversaire d'une date donnée qui soit postérieur à une date de référence.
Si toutes tes dates sont dans le passé, par exemple :
Référence = 03 mars 2007
Anniversaire = 25 janvier

-> la fonction retourne le premier anniversaire postérieur au 03 mars 2007.
Résultat attendu : 25 janvier 2008

Or avec le Code 2, tu obtiendras 25 janvier 2010, ce qui est donc faux.
Avec le Code 1, comme tu prends l'année de la date de référence -1 pour commencer, la fonction testera d'abord donnera 25 janvier 2006, qui n'est pas bon, puis 25 janvier 2007 et enfin 25 janvier 2008, le bon résultat attendu.

Le code 2 marchera correctement si les dates sont dans le futur, par contre. Donc selon ce que tu veux, tu peux garder le code que tu veux. Mais si tu veux être sûr que ta fonction soit bonne quelles que soient les circonstances, c'est le code 1 qui est le bon.
Ajouter un commentaire
Réponse
+0
moins plus
Je ne sais plus quoi dire pour te remercier mon cher Xavier, tu es un as!!
MERCI, MERCI, MERCI
Ajouter un commentaire
Ce document intitulé «  Erreur d'analyse XML  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.