Bug incompréhensible

Satir34 Messages postés 5 Date d'inscription dimanche 24 avril 2011 Statut Membre Dernière intervention 10 août 2011 - 9 août 2011 à 23:53
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 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.'&amp;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.'&amp;p='.$a.' '.$a.'] | ';
};

// away from last page ?
if ($current_page != $nb_pages)
$html .= '['.$redirect_uri.'&amp;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.

7 réponses

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
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)...


______________________________________________________________________
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
10 août 2011 à 08:02
Salut,

Mêmes commentaires que PhpAnonyme, ça ne donne pas très envie.

Plutôt que de fournir les 650 lignes de ton script fournis l'essentiel et précise clairement le pb.

L'erreur affiché dit : [ERREUR] à la ligne XXX database not find.

Quelle est cette ligne XXX ? Au dessus tu indiques 3 lignes différentes.
Quelle est la fonction chargée de l'affichage de l'erreur ?

D'après le code c'est une table qui manque

D'après l'erreur c'est la base de données qui n'est pas trouvée.
D'ailleurs tu ne contrôles pas ton mysql_select_db()

Et puis quand on galère le premier réflexe à avoir est d'afficher toutes les erreurs => supprime, le temps du débogage, ton error_reporting(0)

Cordialement,


Kohntark -
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
10 août 2011 à 09:01
bonjour

ligne 156 environ

http://php.net/manual/fr/function.sprintf.php

? les arguments args.

$tip_query = sprintf("SELECT var, val FROM traceip_cfg;");



Bonne programmation !
0
Satir34 Messages postés 5 Date d'inscription dimanche 24 avril 2011 Statut Membre Dernière intervention 10 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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
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)
______________________________________________________________________
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
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



Kohntark -
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 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.
0
Rejoignez-nous