Satir34
Messages postés5Date d'inscriptiondimanche 24 avril 2011StatutMembreDernière intervention10 août 2011
-
9 août 2011 à 23:53
JulSoft
Messages postés354Date d'inscriptiondimanche 3 juin 2001StatutMembreDernière intervention11 mars 2013
-
11 août 2011 à 21:57
Bonjour à tous,
Voilà, j'aide un ami avec son code, mais il y a un bug que je n'arrive pas à corriger, donc si vous pouviez m'aider svp :
Code:
<?php
/////////////////////////////////////////////////////////////////////////////////////
// By extaz //
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// Début de la configuration //
/////////////////////////////////////////////////////////////////////////////////////
// Si vous utilisez un fichier externe pour la connexion MySQL, spécifiez-le ici
// sinon commentez cette ligne en mettant // devant le require :
//require('/lib/mysql.php'); // attention à l'URL relative
// Si vous préférez spécifier ici vos identifiants MySQL, spécifiez-les ci-dessous
// sinon (cas de l'utilisation d'un fichier) commentez chacun d'eux :
$dbhost = 'mon_hote';
$dbuname = 'nom';
$dbpass = 'mdp';
$dbname = 'nom';
// Identifiants de connexion à l'administration :
define('TIP_ADMIN_LOGIN','ID');
define('TIP_ADMIN_PWD','mdp');
// si votre site a déjà un session start, vous pouvez commenter celui-ci et mettre 0 à la destruction de session
session_start();
$detruire_session = 0;
/////////////////////////////////////////////////////////////////////////////////////
// Fin de la configuration //
/////////////////////////////////////////////////////////////////////////////////////
$tip_is_admin = true;
$get_act = (isset($_GET['act'])) ? $_GET['act'] : '';
$array_acts = array('admin', 'lock', 'blacklist', 'whitelist', 'config', 'connect', 'logout');
if (!in_array($get_act, $array_acts)) { $get_act ''; $tip_is_admin false; }
if ((in_array($get_act, array('admin', 'lock', 'blacklist', 'whitelist', 'config'))) && ((!isset($_SESSION['tip_login'])) || ($_SESSION['tip_login'] == '')))
$get_act = 'connect';
//echo ''; print_r($_SESSION); echo '
';
// visitor general data
$Vcpt = 0;
$Vdate = date('Y-m-d H:i:s');
$Vdatetime = time(); // timestamp
$array_server_values = $_SERVER;
$Vua = $array_server_values['HTTP_USER_AGENT'];
$Vip = $array_server_values['REMOTE_ADDR'];
$VinList = ''; // default : no list (neither black, nor white)
$VisLocked = 0;
$html = '';
$dbic = mysql_connect($dbhost,$dbuname,$dbpass);
if ($dbic === FALSE)
error_reporting(0);
echo("Site en maintenance veuillez rejoindre le forum pour plus d'info");
mysql_select_db($dbname);
function MyQuery($query, $line)
{
//echo ''; print_r($query); echo '
';
$dataset = mysql_query($query);
if ($dataset !== false)
return $dataset;
else
{
die('Erreur : [ligne '.$line.'] '.$query.'
'.mysql_error());
};
};
function TipMailAlert($mailtype)
{
global $Vip, $Vdate, $array_server_values;
if ($mailtype == 'blacklist')
$tip_subject = '[IP bloquée par liste] '.$Vip.' - '.$Vdate . "\r\n";
else
$tip_subject = '[IP Interdite] '.$Vip.' - '.$Vdate . "\r\n";
// Generate the alert mail
$tip_headers = 'From: TraceIP v2 <'.TIP_MAIL_FROM.'>' . "\r\n";
$tip_body = 'Variables serveur envoyées :'."\n";
foreach($array_server_values as $key => $val)
$tip_body .' '.$key.'> '.$val."\n";
$tip_body = addslashes($tip_body);
eval("\$tip_body = "$tip_body";");
$tip_body = stripslashes($tip_body);
$tip_body .= "\n\nAccéder à l'administration des IP : ".TIP_ADMIN;
// Send the mail
mail(TIP_MAIL_TO, $tip_subject, $tip_body, $tip_headers);
//echo ''; print_r($tip_subject); echo '
';
//echo ''; print_r($tip_body); echo '
';
};
function TipRedirect($destination)
{
$html = '['.$destination.' Redirection en cours ...]<script type="text/javascript">';
$html .= " window.setTimeout("location=('".html_entity_decode($destination)."');",3000)";
$html .= '</script>
';
return $html;
};
function TipDisplayPages($nb_pages, $current_page, $redirect_uri)
{
$html = '';
if ($nb_pages > 1)
{
$html .= '
';
// away from page 1 ?
if ($current_page != 1)
$html .= '['.$redirect_uri.'&p='.($current_page-1).' «] | ';
// list all pages
for($a = 1; $a <= $nb_pages; $a++)
{
if ($a == $current_page)
$html .= ''.$a.' | '.CR;
else
$html .= '['.$redirect_uri.'&p='.$a.' '.$a.'] | ';
};
// away from last page ?
if ($current_page != $nb_pages)
$html .= '['.$redirect_uri.'&p='.($current_page+1).$anchor.' »]';
$html .= '
';
};
return $html;
};
// read config
$tip_query = sprintf("SELECT var, val FROM traceip_cfg;");
$tip_ds_config = MyQuery($tip_query, __LINE__);
while ($tip_cfg = mysql_fetch_assoc($tip_ds_config))
{
define(strtoupper($tip_cfg['var']), $tip_cfg['val']);
};
unset($tip_cfg);
unset($tip_ds_config);
// clean up old IP not banned (that means IP older than 60 sec from this moment)
$tip_date_limit = date('Y-m-d H:i:s', time() - 60);
$tip_query = sprintf("DELETE FROM traceip_online WHERE (is_locked='%d' AND date_time < '%s');", 0, $tip_date_limit);
MyQuery($tip_query, __LINE__);
/* ************************************************************************
* DEFAULT (visitor count)
* ********************************************************************** */
if ($get_act == '')
{
// look if visitor is already banned or in (black|white)list
// look into (black|white)list
$tip_query = sprintf("SELECT list_type FROM traceip_lists WHERE (ip='%s');", $Vip);
$tip_ds_blacklist = MyQuery($tip_query, __LINE__);
if (mysql_num_rows($tip_ds_blacklist) == 1) // in black or white list
{
$tip_row = mysql_fetch_assoc($tip_ds_blacklist);
$VinList = $tip_row['list_type']; // blacklist || whitelist
};
unset($tip_ds_blacklist);
unset($tip_row);
// look if visitor is in the online visitor's list
$tip_query sprintf("SELECT ip, date_time, cpt, is_locked FROM traceip_online WHERE (ip '%s');", $Vip);
$tip_ds_ip = MyQuery($tip_query, __LINE__);
if (mysql_num_rows($tip_ds_ip) == 0) // visitor is NOT in the online list
{
$is_locked = 0;
// option 1 : if blacklist, add it & ban it
if ($VinList == 'blacklist')
{
$Vcpt = TIP_MAX_PAGE_COUNT +1;
$is_locked = 1;
// send alert mail
TipMailAlert('blacklist');
};
// option 2 : if not in white list, add it
if ($VinList == '')
{
$Vcpt += 1;
$is_locked = 0;
};
$tip_query = sprintf("INSERT INTO traceip_online (ua, ip, date_time, cpt, is_locked) VALUES('%s', '%s', '%s', '%d', '%d');", addslashes($Vua), $Vip, date('Y-m-d H:i:s'), $Vcpt, $is_locked);
MyQuery($tip_query, __LINE__);
}
else // visitor is already in the online list
{
$tip_row = mysql_fetch_assoc($tip_ds_ip);
//print_r($tip_row);
$Vcpt = intval($tip_row['cpt']);
$VisLocked = intval($tip_row['is_locked']);
// process next only if not in whitelist
if ($VinList != 'whitelist')
{
if ($VisLocked == 1)
exit(TIP_MSG_BAN); // bye bye
// option 1 : if blacklist, ban it
if ($VinList == 'blacklist')
{
$Vcpt = TIP_MAX_PAGE_COUNT +1; // erase value
$is_locked = 1;
$tip_query = sprintf("UPDATE traceip_online SET cpt='%d', is_locked='%d' WHERE ip='%s';", $Vcpt, $is_locked, $Vip);
};
// option 2 : if not in white list, upgrade counter. If necessary, lock it
if ($VinList == '')
{
$Vcpt += 1;
$is_locked = ($Vcpt >= TIP_MAX_PAGE_COUNT) ? 1 : 0;
$tip_query = sprintf("UPDATE traceip_online SET cpt=(cpt+1), is_locked='%d' WHERE ip='%s';", $is_locked, $Vip);
if ($is_locked == 1) // send alert mail
TipMailAlert('ban');
};
MyQuery($tip_query, __LINE__);
}; // end of if ($VinList != 'whitelist')
}; // end of if (mysql_num_rows($tip_ds_ip) == 0)
}; // end of if ($get_act == '')
/* ************************************************************************
* Connection
* ********************************************************************** */
if ($get_act == 'connect')
{
if (!isset($_POST['tip_submit']))
{
$html .= 'Connexion Administration TraceIP v2
'."\n";
$html .= '<form id="cnx" method="post" action="?act=connect">'."\n";
$html .= ' <label for="login">Login :</label>
'."\n";
$html .= ' <label for="pwd">Mot de passe :</label>
'."\n";
$html .= '
'."\n";
$html .= '</form>'."\n";
}
else
{
$login = (isset($_POST['login'])) ? trim($_POST['login']) : '';
$pwd = (isset($_POST['pwd'])) ? trim($_POST['pwd']) : '';
if (($login TIP_ADMIN_LOGIN) && ($pwd TIP_ADMIN_PWD))
{
$_SESSION['tip_login'] = $login;
$html .= TipRedirect('?act=admin');
}
else
{
$html .= 'Erreur dans les identifiants de connexion.
'."\n";
};
};
}; // end of if ($get_act == 'connect')
/* ************************************************************************
* Logout
* ********************************************************************** */
if ($get_act == 'logout')
{
unset($_SESSION['tip_login']);
if ($detruire_session == 1)
{
$_SESSION = array();
session_destroy();
};
$html .= TipRedirect('?');
};
/* ************************************************************************
* ADMIN
* ********************************************************************** */
if ($get_act == 'admin')
{
$get_page (isset($_GET['p'])) ? abs(intval($_GET['p'])) : 1; if ($get_page 0) { $get_page = 1; }
$get_id = (isset($_GET['id'])) ? abs(intval($_GET['id'])) : 0;
if ($get_id != 0)
{
$tip_query = sprintf("DELETE FROM traceip_online WHERE id='%d';", $get_id);
MyQuery($tip_query, __LINE__);
$html .= ' Suppression de l\'IP effectuée.
';
};
$tip_query = sprintf("SELECT COUNT(id) AS num_ip FROM traceip_online;");
$tip_ds = MyQuery($tip_query, __LINE__);
$tip_row = mysql_fetch_assoc($tip_ds);
$num_pages = ceil($tip_row['num_ip'] / TIP_NUM_ROWS_PER_PAGE);
$firstRow = ($get_page -1) * TIP_NUM_ROWS_PER_PAGE;
$lastRow = TIP_NUM_ROWS_PER_PAGE;
$redirect_uri = '?act='.$get_act;
if ($tip_row['num_ip'] == 0)
{
$html .= ' Aucune adresse IP n\'est listée.
';
}
else
{
$tip_query = sprintf("SELECT id, ua, ip, date_time, cpt, is_locked FROM traceip_online ORDER BY date_time DESC LIMIT %d,%d;", $firstRow, $lastRow);
$tip_ds = MyQuery($tip_query, __LINE__);
$html .= TipDisplayPages($num_pages, $get_page, $redirect_uri);
$html .= '
ID |
Agent Utilisateur |
Adresse IP |
Date |
Compteur pages |
Bloquée ? |
Opérations |
';
while($tip_dr = mysql_fetch_assoc($tip_ds))
{
// prepare operations
$add_to_whitelist = '[# Ajouter une/des IP à la liste]
<form id="tip_upd_list" method="post" action="?act='.$get_act.'">
<label for="tip_add_ip">Ajouter IP (1/ligne) :</label><textarea cols="48" rows="8" id="tip_add_ip" name="tip_add_ip"></textarea>
</form><script type="text/javascript">document.getElementById(\'tip_upd_list\').style.display="none";</script>';
$tip_query = sprintf("SELECT COUNT(ip) AS num_ip FROM traceip_lists WHERE list_type='%s';", $get_act);
$tip_ds = MyQuery($tip_query, __LINE__);
$tip_temp = mysql_fetch_assoc($tip_ds);
$num_ip_list = $tip_temp['num_ip'];
unset($tip_ds); unset($tip_temp);
if ($num_ip_list == 0)
$html .= ' Aucune IP dans cette liste.
';
else
{
$num_pages = ceil($num_ip_list / TIP_NUM_ROWS_PER_PAGE);
$firstRow = ($get_page -1) * TIP_NUM_ROWS_PER_PAGE;
$lastRow = TIP_NUM_ROWS_PER_PAGE;
$redirect_uri = '?act='.$get_act;
// extract IP from DB
$tip_query = sprintf("SELECT id, ip, date_time FROM traceip_lists WHERE list_type='%s' ORDER BY ip ASC LIMIT %d,%d;", $get_act, $firstRow, $lastRow);
$tip_ds = MyQuery($tip_query, __LINE__);
$html .= TipDisplayPages($num_pages, $get_page, $redirect_uri);
$html .= '
ID |
Adresse IP |
Date d\'ajout à la liste |
Opérations |
';
while($tip_dr = mysql_fetch_assoc($tip_ds))
{
// prepare operations
$add_to_whitelist = '[?act=admin Administration générale] | [?act=whitelist Gérer liste blanche] | [?act=blacklist Gérer liste noire] | [?act=config Configuration] | [?act=logout Déconnexion]
<?php
echo $html;
?>
http://fearty-online.fr - http://fearty-online.fr
</html>
<?php
}; // end of if ($tip_is_admin === true)
?>
Donc le problème viens de la ligne :
-$tip_query = sprintf("DELETE FROM traceip_online WHERE (is_locked='%d' AND date_time < '%s');", 0, $tip_date_limit);
-$tip_query = sprintf("SELECT var, val FROM traceip_cfg;");
-$tip_query = sprintf("SELECT list_type FROM traceip_lists WHERE (ip='%s');", $Vip);
L'erreur affiché dit : [ERREUR] à la ligne XXX database not find.
D'après le code c'est une table qui manque, on a beau l'avoir créé rien ne change à l'erreur.
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 10 août 2011 à 03:37
j'aide un ami avec son code
- Tu dois lui conseillé de mieux structurer et fragmenter son code
- Tu dois lui conseillé de supprimer tous les points-virgules après les accolades de fermetures, c'est horrible !
Rien que ça, ça serait un bon début !
Après concernant le problème en lui même pas étonnant que vous ayez du mal à trouver la provenance de l'erreur. Ca rejoint ce que j'ai dit plus haut. L'erreur est sans doute anodine mais franchement, ça donne pas envie (personnellement)...
Satir34
Messages postés5Date d'inscriptiondimanche 24 avril 2011StatutMembreDernière intervention10 août 2011 10 août 2011 à 14:11
Merci cod57, j'essaye avec ton lien, et Kohntark + phpAnonyme, je sais bien comment il est mal foutu le code, je l'ai devant les yeux, je comprends que ça ne donne pas envie de le lire, pour aider au débogage, mais si vous n'en avez pas envie, pourquoi vous postez des réponses? Elles sont totalement inutiles, le script n'est pas de moi, je ne compte pas le modifier, juste le déboguer, donc ce n'est pas mon histoire si le code est moche, mal écrit, etc... Donc aucune utilité à vos messages.
Vous n’avez pas trouvé la réponse que vous recherchez ?
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 10 août 2011 à 23:07
Pour ma part,effectivement je ne compte pas aider au débogage dans ce cas présent; Mais dans l'ensemble, nous avons quand même au moins fournis des conseils fort utile; après si je dois répondre attaque par attaque je te dirai que je ne fais pas d'assistanat on me paye pas ici pour aider. Si je le fais c'est à mon bon vouloir... Il y a un vrai bordel dans ce code et je n'ai pas envie de...perdre mes yeux !
Par ailleurs, pourquoi c'est toi qui formule la demande d'aide ?? Ton pote ne sais pas s'exprimer ?
Notons que toi même tu t'y perds... Arf mais c'est vrai...le faite que se soit mal coder tu t'en moques, la résultante étant que tu ne peux le dépanner.
(Mes propos n'engage que moi)
______________________________________________________________________
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 11 août 2011 à 08:21
y a des fois où je crois rêver.
Le monsieur se pointe pour la toute première fois ici, balance ces 650 lignes de code (trop fatiguant de supprimer les lignes superflues), n'est pas du tout précis quant au problème rencontré (ligne de l'erreur imprécise, texte de l'erreur non générée par le code fourni, ...).
Des éléments primordiaux lui sont apportés et des compléments d'information demandés.
Plutôt que d'en tenir compte et d'avoir l'amabilité de fournir les éléments nécessaires à l'aide le monsieur ... s'en fout.
Qu'est ce que tu viens faire ici au juste si ce code n'est "pas ton histoire" et que tu ne "comptes pas le modifier" ?
Tu as cru que CS était une machine à faire le boulot des autres ?
... tu t'es trompé.
J'espère que les intervenants réguliers jugeront comme il se doit ce type de mentalité et réagiront en conséquence.
Inutile de dire que j'adhère à 100% avec les propos de PhpAnonyme
JulSoft
Messages postés354Date d'inscriptiondimanche 3 juin 2001StatutMembreDernière intervention11 mars 2013 11 août 2011 à 21:57
J rejoins tout à fait le propos de Kohntark, et j'irai même plus loin:
- Un post avec un titre qui donne aucune indication, ça donne pas envie d'aider, à moins d'avoir sérieusement du temps à perdre
- 600 lignes de code, qui plus est propre à un projet (et donc pas testables), ça rend juste impossible le debug "de tête", et comme t'as rien de générique, pas possible de laisser un interpréteur faire le boulot
- Pas de description utilisable des erreurs produites et pas possible de les reproduire, donc même avec beaucoup de bonne volonté euh...
Et oui, même si t'as l'impression que les conseils donnés servent à rien, tu/vous perdras moins de temps à factoriser un peu le code, ne serait-ce que pour localiser précisément le composant qui plante.
Une fois que t'as localisé la portion/ligne où t'as l'erreur, tu peux essayer de créer un petit composant (max 50 lignes) qui permette de tester ce qui foire, et là on pourra t'aider plus facilement.
Voila... Le but est pas de te dire "on veut pas t'aider" (si on est ici, c'est justement parce qu'on trouve ça important), mais de te donner les moyens d'être aidé dans des conditions acceptables pour tout le monde.