11521 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonsoir à tous.

J'ai beau utiliser firefox et son debugger.
Je n'y arrive pas !

Pouvez-vous m'aider à solutionner mon bug ?
Voici le lien de la page

Cliquer en haut de page à droite,
déroulez sous "nouvelle recherche" le choix "par référence"
Ensuite encodez la référence suivante
97788189.

Et voilà où cela merdouille...

Avez-vous une la solution à mon problème,
ou un début de piste pour m'aider ?

PS.
Mes accès au mysql sont valides. Je les ai vérifiés...

D'avance, un immense merci.
Apparement, c'est mon JSON.parse qui ne fonctionne pas dans la fonction js "validationrecherche".
C'est bizarre... Car je le rappelle,avec l'hébergeur amen, tout fonctionnait à merveille... Bizarre.
A l'aide svp... Je déprime.
Bonjour.

J'ai un warning sur la page de requête :
["97788189","Rond","0.26"] Warning: mysql_free_result() expects parameter 1 to be resource, array given in /customers/1/1/7/celinni.com/httpd.www/diamants/php/validationdiamant.php on line 32

Donc forcément le parseur de JSON n'apprécie pas trop, peut-être que ça te parle, nous, nous n'avons pas le code, donc l'analyse s'arrête là pour l'instant.
Merci à tous pour votre pasage.
Et surtout merci à SolidSnake qui fait avancer le schmilblick...

Voici le script php "validationdiamant.php"
<?php
	session_start();

	date_default_timezone_set('Europe/Brussels');

	require_once("connexionMysql.inc.php");

	if (isset($_GET['reference']) && !empty($_GET['reference'])) {
		$reference = $_GET['reference'];
		$query = mysql_query("SELECT * FROM diamant_data".
			" WHERE item_id='".$reference."' ");
		$back = mysql_fetch_assoc($query);
	}
	if (isset($_GET['certificat']) && !empty($_GET['certificat'])) {
		$certificat = $_GET['certificat'];
		$query = mysql_query("SELECT * FROM diamant_data".
			" WHERE certificat_number='".$certificat."' ");
		$back = mysql_fetch_assoc($query);
	}
	
	$output = array();
	if ($back) {
		$output[] = trim($back['item_id']);
		$output[] = trim($back['cut']);
		$output[] = trim($back['carat']);
	} else {
		$output[] = "no";
	}
	
	echo json_encode( $output );
	
	mysql_free_result($back);
	mysql_close($connexion);
?>


Les accès à la bdd sont corrects puisqu'on obtient bien :
["97788189","Rond","0.26"]

Pourquoi
"Warning: mysql_free_result() expects parameter 1 to be resource, array given in /customers/1/1/7/celinni.com/httpd.www/diamants/php/validationdiamant.php on line 32"
cela va s'ajouter à ma requête mysql ?

Merci à tous pour votre aide.
Modifié par jytest (12 Sep 2014 - 10:32)
C'est pourtant ce qui se trouve dans le bas du script php, me semble-t-il !
Voilà pourquoi je ne trouvais rien d'autre que cette fameuse instruction "mysql_free_result"
Je ferme même les accès de connexion.

As-tu une autre idée ?
Car les bdd n'ont pas changé depuis le déménagement.
Avant chez amen.fr
Maintenant, one.com.

C'est tout ce qui a changé
Modifié par jytest (12 Sep 2014 - 11:32)
jytest a écrit :
C'est pourtant ce qui se trouve dans le bas du script php, me semble-t-il !


Euh....................

..........................

................... Non Smiley cligne
Pour te montrer où cela se trouve,
je l'ai mis en gras.

a écrit :

<?php
	session_start();

	date_default_timezone_set('Europe/Brussels');

	require_once("connexionMysql.inc.php");

	if (isset($_GET['reference']) && !empty($_GET['reference'])) {
		$reference = $_GET['reference'];
		$query = mysql_query("SELECT * FROM diamant_data".
			" WHERE item_id='".$reference."' ");
		$back = mysql_fetch_assoc($query);
	}
	if (isset($_GET['certificat']) && !empty($_GET['certificat'])) {
		$certificat = $_GET['certificat'];
		$query = mysql_query("SELECT * FROM diamant_data".
			" WHERE certificat_number='".$certificat."' ");
		$back = mysql_fetch_assoc($query);
	}
	
	$output = array();
	if ($back) {
		$output[] = trim($back['item_id']);
		$output[] = trim($back['cut']);
		$output[] = trim($back['carat']);
	} else {
		$output[] = "no";
	}
	
	echo json_encode( $output );
	
	[b]mysql_free_result($back);[/b]
	mysql_close($connexion);
?>


Modifié par jytest (12 Sep 2014 - 12:01)
Bon pour te montrer la différence, je vais te le mettre en gras.

mysql_free_result([b]$query[/b]);


EDIT :
jytest a écrit :
Avant chez amen.fr
Maintenant, one.com.

La différence que je vois, c'est que peut-être que l'autre hébergeur n'affichait pas les warning... (simple supposition)
Modifié par SolidSnake (12 Sep 2014 - 12:17)
Tu es simplement le... meilleur !!!
Merci.

J'ai corrigé tous mes "mysql_free_result($back);" en "mysql_free_result($query);"

J'ai aussi un problème du même genre...
un peu plus loin.
Avec la référence "95325438",
je tombe sur une autre page du site.
Et là, je rollover sur le bouton "ajouter ce diamant" (en haut à droite dans la page blanche)
et choisis "à votre bague"...

Et ici, cela mouline ! Grr.
jytest a écrit :
J'ai aussi un problème du même genre...
un peu plus loin.
Avec la référence &quot;95325438&quot;,
je tombe sur une autre page du site.
Et là, je rollover sur le bouton &quot;ajouter ce diamant&quot; (en haut à droite dans la page blanche)
et choisis &quot;à votre bague&quot;...

Et ici, cela mouline ! Grr.

Ben même principe, teste ta page de requête, et tu verras qu'on a pas le JSON attendu.
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/1/1/7/celinni.com/httpd.www/diamants/php/chargementbagues.php:1) in /customers/1/1/7/celinni.com/httpd.www/diamants/php/chargementbagues.php on line 2


Alphonse a écrit :
Attention aux injections SQL! grosse faille de sécurité dans ton code...

Loin d'être spécialisé là-dedans, comment peut-on s'en prémunir ?
Afin de pouvoir m'aider,
voici maintenant le code php de "chargementbagues.php"

D'avnce un immense merci pour ton habituelle aide...
 <?php
	session_start();

	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	 * libellés types
	 */
	$libelle = array();
	$libelle[1] = array ("WG", "YG", "PT");
	$libelle[3] = array ("", "01", "02", "03", "04");
	$libelle[6] = array ("simple", "accompagné");
	$libelle[8] = array ("", "ON", "OFF");

	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	 * Easy set variables
	 */
 
	/* Array of database columns which should be read and sent back to DataTables. Use a space where
	 * you want to insert a non-database field (for example a counter or static image)
	 */
	 
	$aColumns = array();
	$aColumns [] = 'ref_monture';				/* 00	*/
	$aColumns [] = 'finition';					/* 01	*/
	$aColumns [] = 'modele';					/* 02	*/
	$aColumns [] = 'sous_modele';				/* 03	*/
	$aColumns [] = 'carat';						/* 04	*/
	$aColumns [] = 'descriptif';				/* 05	*/
	$aColumns [] = 'type_solitaire';			/* 06	*/
	$aColumns [] = 'PV_HT';						/* 07	*/
	$aColumns [] = 'statut'; 					/* 08	*/
	$aColumns [] = 'pierre_min_carat';			/* 09	*/
	$aColumns [] = 'pierre_max_carat';			/* 10	*/
	$aColumns [] = 'vue_01';					/* 11	*/
	$aColumns [] = 'vue_02';					/* 12	*/
	$aColumns [] = 'vue_03';					/* 13	*/
	$aColumns [] = 'vue_04';					/* 14	*/
	$aColumns [] = 'vue_05';					/* 15	*/
	$aColumns [] = 'max_carat_rond';			/* 14	*/
	$aColumns [] = 'max_carat_marquise';		/* 17	*/
	$aColumns [] = 'max_carat_emeraude';		/* 18	*/
	$aColumns [] = 'max_carat_radiant';			/* 19	*/
	$aColumns [] = 'max_carat_ovale';			/* 20	*/
	$aColumns [] = 'max_carat_poire';			/* 21	*/
	$aColumns [] = 'max_carat_coeur';			/* 22	*/
	$aColumns [] = 'max_carat_aascher';			/* 23	*/
	$aColumns [] = 'max_carat_cs';				/* 24	*/
	$aColumns [] = 'max_carat_autre';			/* 25	*/
	/* bouton d'aide */							/* 26	*/			
 
	/* Indexed column (used for fast and accurate table cardinality) */
	$sIndexColumn = "ref_monture";
 
	/* DB table to use */
	$sTable = "monture_data";
 
	/* Database connection information */
	$gaSql['user']       = "celinni_com";
	$gaSql['password']   = "K28JxQVe";
	$gaSql['db']         = "celinni_com";
	$gaSql['server']     = "celinni.com.mysql";
 
	/* 
	 * MySQL connection
	 */
	$gaSql['link'] =  mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password']  ) or
		die( 'Could not open connection to server' );
 
	mysql_select_db( $gaSql['db'], $gaSql['link'] ) or 
		die( 'Could not select database '. $gaSql['db'] );
 
	mysql_set_charset( 'utf8' ); 	


	/* 
	 * Paging
	 */
	$sLimit = "";
	if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
	{
		$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
			intval( $_GET['iDisplayLength'] );
	}
 
 
	/*
	 * Ordering
	 */
	$sOrder = "";
	if ( isset( $_GET['iSortCol_0'] ) )
	{
		$sOrder = "ORDER BY  ";
		for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
		{
			if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
			{
				$sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
					($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
			}
		}
 
		$sOrder = substr_replace( $sOrder, "", -2 );
		if ( $sOrder == "ORDER BY" )
		{
			$sOrder = "";
		}
	}


	/* 
	 * Filtering
	 * NOTE this does not match the built-in DataTables filtering which does it
	 * word by word on any field. It's possible to do here, but concerned about efficiency
	 * on very large tables, and MySQL's regex functionality is very limited
	 */
	$sWhere = "";
	
	/* Individual column filtering */
	$sColumnWhere = "";
	for ( $i=0 ; $i<count($aColumns) ; $i++ )
	{	
		if ( $_GET['sSearch_'.$i] != "" )
		{
			$aWords = preg_split('/\s+/', $_GET['sSearch_'.$i]);
			$sColumnWhere .= "(";
			for ( $j=0 ; $j<count($aWords) ; $j++ )
			{
				if ( $aWords[$j] != "" )
				{
					$sColumnWhere .= "`".$aColumns[$i]."` = '".mysql_real_escape_string( $libelle[ $i ][ $aWords[$j] ] )."' OR ";
				}
			}
			$sColumnWhere = substr_replace( $sColumnWhere, "", -3 );
			$sColumnWhere .= ") AND ";
		}
		if ( $_GET['sStart_'.$i] != "" AND $_GET['sEnd_'.$i] != "" )
		{
			$sColumnWhere .= "(";
			$sColumnWhere .= "`".$aColumns[$i]."` >= '".mysql_real_escape_string( $_GET['sStart_'.$i] )."' AND `".$aColumns[$i]."` <= '".mysql_real_escape_string( $_GET['sEnd_'.$i] )."' ";
			$sColumnWhere .= ") AND ";
		}
		if ( $_GET['sMin_'.$i] != "" )
		{
			$sColumnWhere .= "(";
			$sColumnWhere .= "`".$aColumns[$i]."` <= '".mysql_real_escape_string( $_GET['sMin_'.$i] )."' ";
			$sColumnWhere .= ") AND ";
		}
		if ( $_GET['sMax_'.$i] != "" )
		{
			$sColumnWhere .= "(";
			$sColumnWhere .= "`".$aColumns[$i]."` >= '".mysql_real_escape_string( $_GET['sMax_'.$i] )."' ";
			$sColumnWhere .= ") AND ";
		}
	}
	
	if ( $sColumnWhere != "" ) {
		$sColumnWhere = substr_replace( $sColumnWhere, "", -5 );
		if ( $sWhere == "" ) {
			$sWhere = $sColumnWhere;
		} else {
			$sWhere .= " AND ".$sColumnWhere;
		}
	}
	
	if ( $sWhere != "" )
	{
		$sWhere = "WHERE ".$sWhere;
	}
 
 
	/*
	 * SQL queries
	 * Get data to display
	 */
	$sQuery = "
	 SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."` 
		FROM   $sTable
		$sWhere
		$sOrder
		$sLimit
		";
	$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
 
	/* Data set length after filtering */
	$sQuery = "
		SELECT FOUND_ROWS()
	";
	$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
	$iFilteredTotal = $aResultFilterTotal[0];
 
	/* Total data set length */
	$sQuery = "
		SELECT COUNT(`".$sIndexColumn."`)
		FROM   $sTable
	";
	$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
	$aResultTotal = mysql_fetch_array($rResultTotal);
	$iTotal = $aResultTotal[0];
 
 
	/*
	 * Output
	 */
	$output = array(
		"sEcho" => intval($_GET['sEcho']),
		"iTotalRecords" => $iTotal,
		"iTotalDisplayRecords" => $iFilteredTotal,
		"aaData" => array()
	);
 
	while ( $aRow = mysql_fetch_array( $rResult ) )
	{
				$row = array();
				$row[] = trim($aRow[ 'ref_monture' ]);
				$row[] = trim($aRow[ 'finition' ]);
				$row[] = trim($aRow[ 'modele' ]);
				$inter = trim($aRow[ 'carat' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$row[] = trim($aRow[ 'descriptif' ]);
				$row[] = trim($aRow[ 'type_solitaire' ]);
				$inter = trim($aRow[ 'PV_HT' ]);
				$row[] = number_format($inter, 0, ',', ' ');
				$row[] = trim($aRow[ 'statut' ]);
				$inter = trim($aRow[ 'pierre_min_carat' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'pierre_max_carat' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$row[] = trim($aRow[ 'vue_01' ]);
				$row[] = trim($aRow[ 'vue_02' ]);
				$row[] = trim($aRow[ 'vue_03' ]);
				$row[] = trim($aRow[ 'vue_04' ]);
				$row[] = trim($aRow[ 'vue_05' ]);
				$inter = trim($aRow[ 'max_carat_rond' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_marquise' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_emeraude' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_radiant' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_ovale' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_poire' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_coeur' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_aascher' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_cs' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$inter = trim($aRow[ 'max_carat_autre' ]);
				$row[] = number_format($inter, 2, ',', ' ');
				$row[] = "<a href='javascript:envoiDetails(\"".trim($aRow[ 'ref_monture' ])."\");'><span class='voir'>Détails</span></a>";
				$output['aaData'][] = $row;
	}

	echo json_encode( $output );
	
	mysql_free_result($rResultTotal);
	mysql_close($gaSql['link']);
?>

Modifié par jytest (12 Sep 2014 - 14:25)
C'est bon ! J'i trouvé !
En modifiant mes codes un espace s'est malheureusement inscrusté avant mon traditionnel "<?php"

Merci.
Un grand merci à toi SolidSnake !
Merci pour tout le temps passé avec moi.
You welcome Smiley shakko

Je me disais aussi, je ne voyais plus d'erreur.

Juste un dernier détail (c'est le moins que l'on puisse dire tu vas voir), dans ton JSON à chaque fin objet (que j'imagine sans trop m'avancer être une bague) il y a une valeur "D\u00e9tails</span></a>" : c'est normal les deux balises html ?
Cela m'avait échappé ce truc.
le truc bizarre que tu as relevé est fit exprès...
C'est un bouton dans la liste JSON.

Par contre pour la sécurité des requêtes mysql,
peux-tu encore m'aider un peu plus,
en me proposant une solution efficace ?

Encore un grand merci pour ton implication dans mon post.
Pages :