Page 1 sur 1

Mettre à jour une requête SQL dans un forum php

Posté : 09 avr. 2006, 13:36
par Confridín
Bonjour à tous.

C'est mon premier message dans ce forum et j'espère ne pas m'être trompé de section.


J'ai un petit problème et je voudrais savoir si l'un de vous peux m'aider.

Je suis une débutant en php (voir même, je pense pouvoir dire que je n'y connais presque rien). J'ai un forum basé sur FudForum. J'essaie d'ajouter une colonne dans la page qui liste les membres dans laquelle je voudrais faire apparaître la date de dernière connection. En trifouillant le code, j'ai réussi à ajouter cette colonne (d'ailleurs, je ne suis même pas sûr que le code est propre). Mais il me reste une problème. Sii je clique sur "s'est connecté la dernière fois", le forum ne trie pas come il le fait quand je clique sur "Compteur de message" ou encore "date d'inscription". Sur le forum officiel, ils m'ont dit de mettre à jour "the big SELECT query". Malheureusement, je ne sais absolument pas à quoi cela fait référence...

L'un de vous peut-il m'aider? Je vous met le lien vers le sujet concerné (en anglais) dans lequel j'ai attaché tous les fichiers concernés.


Merci d'avance pour votre aide.

Posté : 09 avr. 2006, 17:51
par Cyrano
Pour t'apporter l'aide souhaitée, il faudrait qu'on dispose d'informations plus précises : la structure de la table modifiée, et les requêtes SQL utilisées.

Ajoute les messages d'erreurs en indiquant à la suite de quelle action tu les as eu avec le code correspondant (pas 500 lignes, juste les parties pertinentes)

Posté : 09 avr. 2006, 21:33
par Confridín
Pour t'apporter l'aide souhaitée, il faudrait qu'on dispose d'informations plus précises : la structure de la table modifiée, et les requêtes SQL utilisées.
Ok.

Voici les fichiers qui sont liées à la page membre:

- Le fichier php en lui-même: finduser.php
- Un fichier dont je ne connais pas l'utilité, même si je l'ai modifié (voir le lien vers le sujet en anglais dans mon post précedent): finduser.tmpl
- Un dernier fichier dans lequel on m'a dit de mettre à jour le BIG select query et où je ne sais pas quoi faire: finduser.php.t

En ce qui concerne la table et les requêtes SQL:

La base se nomme rochmediacom1. Les tables commencent toutes par fud_26.

Celle concerné par ce post est "fud26_users" avec le champ "last_visit" de type "bigint(20)", null=non, default=0.

Après, je ne sais pas quoi modifier dans ce code là pour mettre à jour la requête SQL. De plus, je ne sais pas non plus s'il manque un bout de code dans les deux autres fichiers.
<?php
/**
* copyright            : (C) 2001-2006 Advanced Internet Designs Inc.
* email                : [email protected]
* $Id: finduser.php.t,v 1.52 2005/12/07 18:07:45 hackie Exp $
*
* 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.
**/

/*{PRE_HTML_PHP}*/

	if (!$is_a && !($FUD_OPT_1 & 8388608) && (!($FUD_OPT_1 & 4194304) || !_uid)) {
		std_error((!_uid ? 'login' : 'disabled'));
	}

	if (isset($_GET['js_redr'])) {
		define('plain_form', 1);
		$is_a = 0;
	}

	$TITLE_EXTRA = ': {TEMPLATE: finduser_title}';

	ses_update_status($usr->sid, '{TEMPLATE: finduser_update}');









	if (!isset($_GET['id']) || !(int)$_GET['id']) {
		invl_inp_err();
	}
	if ($FUD_OPT_3 & 32 && !_uid) {
		if (__fud_real_user__) {
			is_allowed_user($usr);
		} else {
			std_error('login');
		}
	}

	if (!($u = db_sab('SELECT u.*, l.name AS level_name, l.level_opt, l.img AS level_img FROM {SQL_TABLE_PREFIX}users u LEFT JOIN {SQL_TABLE_PREFIX}level l ON l.id=u.level_id WHERE u.id='.(int)$_GET['id']))) {
		std_error('user');
	}
	if (!_uid && __fud_cache($u->last_visit)) {
		return;
	}

	if ($FUD_OPT_1 & 28 && $u->users_opt & 8388608 && $u->level_opt & (2|1) == 1) {
		$level_name = $level_image = '';
	} else {
		$level_name = $u->level_name ? '{TEMPLATE: level_name}' : '';
		$level_image = $u->level_img ? '{TEMPLATE: level_image}' : '';
	}

	if (!$is_a) {
		$frm_perms = get_all_read_perms(_uid, ($usr->users_opt & 524288));
		$forum_list = implode(',', array_keys($frm_perms, 2));
	} else {
		$forum_list = 1;
	}

	$moderation = '';
	if ($u->users_opt & 524288 && $forum_list) {
		$c = uq('SELECT f.id, f.name FROM {SQL_TABLE_PREFIX}mod mm INNER JOIN {SQL_TABLE_PREFIX}forum f ON mm.forum_id=f.id INNER JOIN {SQL_TABLE_PREFIX}cat c ON f.cat_id=c.id WHERE '.($is_a ? '' : 'f.id IN('.$forum_list.') AND ').'mm.user_id='.$u->id);
		while ($r = db_rowarr($c)) {
			$moderation .= '{TEMPLATE: moderation_entry}';
		}
		unset($c);
		if ($moderation) {
			$moderation = '{TEMPLATE: moderation}';
		}
	}


/*{POST_HTML_PHP}*/

	if (!isset($_GET['start']) || !($start = (int)$_GET['start'])) {
		$start = 0;
	}

	if (isset($_GET['pc'])) {
		$ord = 'posted_msg_count DESC';
	} else if (isset($_GET['us'])) {
		$ord = 'alias';
	} else if (isset($_GET['wx'])) {
		$ord = 'last_visit';
	} else {
		$ord = 'id DESC';
	}


	$usr_login = !empty($_GET['usr_login']) ? trim((string)$_GET['usr_login']) : '';

	if ($usr_login) {
		$qry = 'alias LIKE '._esc(char_fix(htmlspecialchars(addcslashes($usr_login.'%','\\')))).' AND';
	} else {
		$qry = '';
	}

	$find_user_data = '';
	$c = uq('SELECT /*!40000 SQL_CALC_FOUND_ROWS */ home_page, users_opt, alias, join_date, last_visit, posted_msg_count, id FROM {SQL_TABLE_PREFIX}users WHERE ' . $qry . ' id>1 ORDER BY ' . $ord . ' LIMIT '.qry_limit($MEMBERS_PER_PAGE, $start));
	while ($r = db_rowobj($c)) {
		$find_user_data .= '{TEMPLATE: find_user_entry}';
	}
	unset($c);
	if (!$find_user_data) {
		$find_user_data = '{TEMPLATE: find_user_no_results}';
	}

	$pager = '';
	if (($total = (int) q_singleval('SELECT /*!40000 FOUND_ROWS(), */ -1')) < 0) {
		$total = q_singleval('SELECT count(*) FROM {SQL_TABLE_PREFIX}users WHERE ' . $qry . ' id > 1');
	}
	if ($total > $MEMBERS_PER_PAGE) {
		if ($FUD_OPT_2 & 32768) {
			$pg = '{ROOT}/ml/';
			if (isset($_GET['pc'])) {
				$pg .= '1/';
			} else if (isset($_GET['us'])) {
				$pg .= '2/';
			} else if (isset($_GET['wx'])) {
				$pg .= '3/';
			} else {
				$pg .= '0/';
			}

			$ul = $usr_login ? urlencode($usr_login) : 0;
			$pg2 = '/' . $ul . '/';

			if (isset($_GET['js_redr'])) {
				$pg2 .= '1/';
			}
			$pg2 .= _rsid;

			$pager = tmpl_create_pager($start, $MEMBERS_PER_PAGE, $total, $pg, $pg2);
		} else {
			$pg = '{ROOT}?t=finduser&' . _rsid . '&';
			if ($usr_login) {
				$pg .= 'usr_login='.urlencode($usr_login) . '&';
			}
			if (isset($_GET['pc'])) {
				$pg .= 'pc=1&';
			}
			if (isset($_GET['us'])) {
				$pg .= 'us=1&';
			}
			if (isset($_GET['wx'])) {
				$pg .= 'wx=1&';
			}
			if (isset($_GET['js_redr'])) {
				$pg .= 'js_redr='.urlencode($_GET['js_redr']).'&';
			}
			$pager = tmpl_create_pager($start, $MEMBERS_PER_PAGE, $total, $pg);
		}
	}

/*{POST_PAGE_PHP_CODE}*/
?>
{TEMPLATE: FINDUSER_PAGE}

Ajoute les messages d'erreurs en indiquant à la suite de quelle action tu les as eu avec le code correspondant (pas 500 lignes, juste les parties pertinentes)
Je n'ai eu aucun message d'erreur. C'est juste que ça ne fonctionne pas.


Merci d'avance pour votre aide.

Posté : 09 avr. 2006, 23:32
par Cyrano
Non mais tu rêves là ? Heureusement que j'ai précisé "pas 500 lignes" et toi tu en mets 165 non triées + un lien vers un fichier zippé : faut te corriger tout le script ? dis, tu as pas l'impression que tu pousses un peu ? :shock:

Relis donc ce que je t'ai écrit : isole le problème et les portions de code correspondantes, pas tout le code.

Posté : 10 avr. 2006, 09:39
par Confridín
isole le problème et les portions de code correspondantes, pas tout le code.
C'est justemment ça le problème. J'ai mis la portion de code correspondante car je ne sais pas où il faut ajouter ou corriger du code... On m'a juste dit de modifier le BIG select query dans ce fichier mais je ne sais pas à quoi cela correspond...
Non mais tu rêves là ? Heureusement que j'ai précisé "pas 500 lignes" et toi tu en mets 165 non triées + un lien vers un fichier zippé :
Pardon. Les 165 lignes sont le fichier finduser.php.t vu que je ne sais pas où il faut ajouter du code...

Je te quote ce que j'ai marqué plus haut:
Je suis un débutant en php (voir même, je pense pouvoir dire que je n'y connais presque rien)
Ce qui signifie que je connais rien au code php, et encore moins en SQL. Le fait d'avoir réussi à ajouter une colonne avec l'information désirée relève plus de la chance que du talent. :roll:
faut te corriger tout le script ? dis, tu as pas l'impression que tu pousses un peu ? :shock:
Non, je n'ai jamais voulu cela. Je veux juste qu'on m'explique ce que je dois faire pour réussir cette modification.

C'est un script qui fonctionne vu qu'il est intégré dans les forum FUD. Mais je veux le modifier mais je ne sais même pas par où commencer. C'est aussi pour cela que j'ai mis un lien vers les fichiers zip correspondants.


Désolé si mes posts apparaissent comme ceux d'un newbie qui veut qu'on lui fasse tout. Je désire juste des explications quant à la manière de proceder.

Posté : 10 avr. 2006, 09:51
par Cyrano
La conclusion logique de tout ça, c'est que pour débuter et apprendre, tu t'attaques à un très gros morceau à mon avis. Modifier un code implique qu'on puisse le lire et en suivre le déroulement. Malheureusement, tu essayes de sauter les étapes. Libre à toi, mais à mon avis c'est une très mauvaise méthode. Si tu veux apprendre, commence avec les bases fondamentales. Je te recommande de suivre tous les tutos de phpdebutant : après, tu seras nettement mieux armé pour aborder des scripts de ce genre.

Posté : 10 avr. 2006, 10:23
par Confridín
Ok, ca marche. Je pensais pouvoir quand même m'en sortir. Merci pour le lien et le temps passé à me répondre.