IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Insérer des colonnes (hors bdd) dans le dataTables


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 165
    Par défaut Insérer des colonnes (hors bdd) dans le dataTables
    Bonjour,

    Cette page utilise le dataTables.
    Outre les galères de mise en route 'merci à almoha !!!),
    me revoici avec un nouveau souci...

    Dans cette table, je souhaite insérer 4 colonnes, qui contiennent des infos qui sont à calculer individuellement depuis la base de données.
    Je suis les recommandations du concepteur de dataTables,
    j'insère des ' ' aux places adéquates,
    oui mais voilà... mes galères !!!

    Et c'est là que j'ai besoin de votre aide ?
    Pourrez-vous me consacrer un peu de votre temps pour tenter de m'aider ?

    J'ai donc modifié ma page dont voici le code concerné à cette nouvelle table :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
    	<thead>
    		<tr>
    			// 1 colonne rajoutée ici
    			<th align='center' style='width:25px;'></th>
    			//
    			<th align='left'>&nbsp;idreference</th>
    			<th align='left'>&nbsp;forme</th>
    			<th align='right' style='width:30px;'>&nbsp;carat</th>
    			<th align='left'>&nbsp;taille</th>
    			<th align='center' style='width:45px;'>&nbsp;couleur</th>
    			<th align='center' style='width:45px;'>&nbsp;pureté</th>
    			<th align='center' style='width:45px;'>&nbsp;poli</th>
    			<th align='center' style='width:45px;'>&nbsp;sym</th>
    			<th align='center' style='width:45px;'>&nbsp;prof</th>
    			<th align='center' style='width:45px;'>&nbsp;table</th>
    			<th align='center' style='width:45px;'>&nbsp;fluo</th>
    			<th align='right' style='width:45px;'>&nbsp;prix/ct</th>
    			<th align='center' style='width:45px;'>&nbsp;colette</th>
    			// 2 colonnes rajoutées ici
    			<th align='right' style='width:45px;'>&nbsp;Lg/lg</th>
    			<th align='right'>&nbsp;délai</th>
    			//
    			<th align='right'>&nbsp;prix</th>
    			// 1 colonne rajoutée ici
    			<th>&nbsp;détail</th>
    			//
    		</tr>
    	</thead>
    	<tbody>
    	</tbody>
    </table>

    Voici le "js/dt/chargementdata.php" :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    <?php
    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    	 * 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( ' ', 'item_id', 'cut', 'carat', 'cut_grade', 'color', 'clarity', 'polish', 'symmetry', 'depth', 'table', 
    		'fluo_intensity', 'price_per_carat', 'culet_size', ' ', ' ', 'total_price', ' ');
     
    	/* Indexed column (used for fast and accurate table cardinality) */
    	$sIndexColumn = "item_id";
     
    	/* DB table to use */
    	$sTable = "diamant_data";
     
    	/* Database connection information */
    	$gaSql['user']       = "***";
    	$gaSql['password']   = "***";
    	$gaSql['db']         = "***";
    	$gaSql['server']     = "***";
     
    	/* REMOVE THIS LINE (it just includes my SQL connection user/pass) */
    	/* include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); */
     
     
    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    	 * If you just want to use the basic configuration for DataTables with PHP server-side, there is
    	 * no need to edit below this line
    	 */
     
    	/* 
    	 * 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 = "";
    	if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
    	{
    		$sWhere = "WHERE (";
    		for ( $i=0 ; $i<count($aColumns) ; $i++ )
    		{
    			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
    		}
    		$sWhere = substr_replace( $sWhere, "", -3 );
    		$sWhere .= ')';
    	}
     
    	/* Individual column filtering */
    	for ( $i=0 ; $i<count($aColumns) ; $i++ )
    	{
    		if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
    		{
    			if ( $sWhere == "" )
    			{
    				$sWhere = "WHERE ";
    			}
    			else
    			{
    				$sWhere .= " AND ";
    			}
    			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
    		}
    	}
     
     
    	/*
    	 * 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();
    		for ( $i=0 ; $i<count($aColumns) ; $i++ )
    		{
    			if ( $aColumns[$i] == "version" )
    			{
    				/* Special output formatting for 'version' column */
    				$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
    			}
    			else if ( $aColumns[$i] != ' ' )
    			{
    				/* General output */
    				$row[] = $aRow[ $aColumns[$i] ];
    			}
    		}
     
    		$output['aaData'][] = $row;
    	}
     
    	echo json_encode( $output );
    ?>

    Voici les colonnes à rajouter :
    Attention, il me faut les tris sur les colonnes rajoutées (sauf la 4e, bien sûr)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    //      colonne rajoutée 1 (avec tri)
    //	echo 	"<td align='center' style='width:25px;'>";
    //	   $id= "comparer".sprintf('%02d', $nbresultat);
    //	   echo "<input type='checkbox' name='comparer[".$nbresultat."]' id='".$id."' class='curseur' ";
    //	   echo "value='".$nbresultat."'> ";
    //	echo "</td>";
     
     
    //      colonne rajoutée 2 (avec tri)
    //	$dimensions = strtolower(trim($back['dimensions']));
    //	$mesures = explode("x",$dimensions);
    //	if ($mesures[0] != 0 AND $mesures[1] != 0) {
    //		if ($mesures[0] > $mesures[1]) {
    //			$rll = round($mesures[0] / $mesures[1], 2);
    //		} else {
    //			$rll = round($mesures[1] / $mesures[0], 2);
    //		}
    //	} else {
    //		$rll = "nc";
    //	}
     
     
    //      colonne rajoutée 3 (avec tri)
    //	delai = "5 jours";
     
     
    //      colonne rajoutée 4 (sans tri >>> bouton avec un lien extérieur)
    //	echo 	"<td align='center'><a href=''><div class='voir'>Détails</div></a></td>";

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 165
    Par défaut
    J'ai bien essayé ceci...
    changer les ' ' par respectivement 'zone1', 'zone2', 'zone3', 'zone4'...
    y compris en bout de code de ce json.

    Mais cela ne fonctionne pas ! Pourquoi ?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    <?php
    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    	 * 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( 'zone1', 'item_id', 'cut', 'carat', 'cut_grade', 'color', 'clarity', 'polish', 'symmetry', 'depth', 'table', 
    		'fluo_intensity', 'price_per_carat', 'culet_size', 'zone2', 'zone3', 'total_price', 'zone4');
     
    	/* Indexed column (used for fast and accurate table cardinality) */
    	$sIndexColumn = "item_id";
     
    	/* DB table to use */
    	$sTable = "diamant_data";
     
    	/* Database connection information */
    	$gaSql['user']       = "***";
    	$gaSql['password']   = "***";
    	$gaSql['db']         = "***";
    	$gaSql['server']     = "***";
     
    	/* REMOVE THIS LINE (it just includes my SQL connection user/pass) */
    	/* include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); */
     
     
    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    	 * If you just want to use the basic configuration for DataTables with PHP server-side, there is
    	 * no need to edit below this line
    	 */
     
    	/* 
    	 * 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 = "";
    	if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
    	{
    		$sWhere = "WHERE (";
    		for ( $i=0 ; $i<count($aColumns) ; $i++ )
    		{
    			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
    		}
    		$sWhere = substr_replace( $sWhere, "", -3 );
    		$sWhere .= ')';
    	}
     
    	/* Individual column filtering */
    	for ( $i=0 ; $i<count($aColumns) ; $i++ )
    	{
    		if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
    		{
    			if ( $sWhere == "" )
    			{
    				$sWhere = "WHERE ";
    			}
    			else
    			{
    				$sWhere .= " AND ";
    			}
    			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
    		}
    	}
     
     
    	/*
    	 * 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();
    		for ( $i=0 ; $i<count($aColumns) ; $i++ )
    		{
    			if ( $aColumns[$i] == "zone1" )
    			{
    				/* Special output formatting for 'version' column */
    				$row[] = rand(1,99);
    			}
    			else if ( $aColumns[$i] == "zone2" )
    			{
    				/* Special output formatting for 'version' column */
    				$row[] = rand(1,99);
    			}
    			else f ( $aColumns[$i] == "zone3" )
    			{
    				/* Special output formatting for 'version' column */
    				$row[] = rand(1,99);
    			}
    			else if ( $aColumns[$i] == "zone4" )
    			{
    				/* Special output formatting for 'version' column */
    				$row[] = rand(1,99);
    			}
    			else if ( $aColumns[$i] != ' ' )
    			{
    				/* General output */
    				$row[] = $aRow[ $aColumns[$i] ];
    			}
    		}
     
    		$output['aaData'][] = $row;
    	}
     
    	echo json_encode( $output );
    ?>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 165
    Par défaut
    J'ai (presque) trouvé.
    Un autre souci est apparu !
    Résolu !

    Dès résolution complète, je posterai la solution

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Il eût été sympa de partager la solution au cas ou d'autres rencontreraient le même souci ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD10-WD12] Insérer des colonnes dans une table
    Par Amanck dans le forum WinDev
    Réponses: 6
    Dernier message: 18/07/2008, 10h23
  2. Insérer des BITMAP de 24bit dans une toolbar ?
    Par damien99 dans le forum MFC
    Réponses: 5
    Dernier message: 01/03/2006, 21h35
  3. Réponses: 13
    Dernier message: 21/09/2005, 15h39
  4. [MySQL] Comment insérer des données contenant un "\" dans
    Par ALEX77 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/09/2005, 16h04
  5. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo