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

Langage PHP Discussion :

[Système] Pb d'exécution de la fonction getlist


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut [Système] Pb d'exécution de la fonction getlist
    Bonjours à tous, je suis nouveau, aussi bien sur Developpez.com, que dans le monde de la création Web.
    et je rencontre évidament un Pb, la Fonction Getlit me plante mon site,
    y aurait-il un Ame charitable pour m'aider à débuger mon site, je nage complêtement, je désespére, bref, je péte un plomb...
    voici cette fonction:
    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
    function getList($lst,$sep){
    	$i=0;
    	$p1=0;
    	$p2=0;
    	$seplen=strlen($sep);
    	$lst.=$sep;
    	while(1){
    		$p2=strpos($lst,$sep,$p1);
    		if (is_string($p2) && !$p2){
    			break;
    		}
    		$newstr=substr($lst,$p1,$p2-$p1);
    		if ($newstr != ""){
    			$ab[$i]=$newstr;
    			$i++;
    		}
    		$p1=$p2+$seplen;
    	}
    voila, si cela m'est autorisé, je vous donnerez l'url de mon site pour constater le plantage.

    Merci par avance.
    Jean

  2. #2
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut
    je vois vite un risque élevé de boucle infinie...

    l'objectif de la fonction semble assez similaire à explode, pourquoi ne pas utilisé explode?

    sinon, elle est censée faire quoi getList?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Haa, c quand même plus lisible avec la balise et du code structuré ...

    Sinon comme l'a dit Daniel, tu pars en boucle infinie parce que strpos() ne te renverra jamais un string:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		$p2=strpos($lst,$sep,$p1);
    		if (is_string($p2) && !$p2){
    			break;
    		}

    Et puis c vrai que ça ressemble fort à explode..

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut re moia
    slt, merci pour cet éclairci, mais je ne suis pas capable de résoudre le PB, en fait, le script, ben, c un pot qui me la fait, et il n'est plus joignable, il à changer de taff, mais le PB et bien que au final cela me fait un timeout, et là patatra ....
    bref, l'url, si les modo l'accepte, http://www.yakadonner.fr

    je serrai heureux d'avoir la solution, si il vous faut la page entiere je vous la ferrai passer

    @pluch

    ( pour voir le pb essayer de deposer une annonce, et la boum timeout)

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Par défaut
    Essaie en utilisant la fonction explode() à la place, c les même.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    bon, sa n'a pas résolu le PB, sa à généré d'autre erreur , il y a des souci maintenant sur la pages d'accueil...

    si quelqu'un peut analiser le souci, je lui file le site en entier,( les fichier script des pages concerné,
    petite question, quelqu'un ne résiderais pas sur montauban ou aux alentour, cela

    serrait plus simple que de noyer le Forum...
    enfin je pense
    merci encore je laisse le plantage pour que vous puissiez voir
    il y a des annonces, mais je les ai intégré directement avec le gestionnaire de base
    la question que je me pose, le site actuel est en fait une copie conforme de www.kitrouvetou.com, et la cela fonctionne trés bien !!! je me demande si le fait
    que je ne sois pas chez le même hébergeur génére des soucis, du fait également que je suis sur un serveur mutualisé, et le PHPini ,n'est pas modifiable sur se type de bécane, (mutalisé oblige, je suis chez OVH)...

  7. #7
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut constante au lieu de variable
    Citation Envoyé par jeannot_31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function getList($lst,$sep){
    	...
    	while(1){
    		...
    	}
    Evidemment que ça te fait un time out. Dans ton while tu as une constante et non une variable... Comment espère-tu sortir de la boucle while???

    Il faut une variable par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($variable == 1){
        // instructions
    }
    while signifie 'tant que', donc dès que $variable ne sera plus égal à 1, tu sortiras de la boucle

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    salut, je vien de faire la modif, mais ceci me lance une erreur sur getParent

    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
    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
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    <?PHP
     
    include("pages/location/common.php");
     
    function getSibiling($num){
    	//Donc tout ce qui a num > au courant est < au suivant
    	//Pour ça, on prend le parent de num, on énumere ses enfants et dès qu'on trouve num, on prend le suivant
    	if ($num==0) return -1;
    	global $id;
     
    	//Trouve le parent de num
    	$parent=getParent($num);
     
    	//Cherche tout les freres de num	
    	$query="Select num from cats WHERE parent=$parent ORDER BY num";
    	$result = mysql_query($query);
    	while($row=mysql_fetch_row($result)){
    		list($num2)=$row;
    		if ($num2==$num){
    			if ($row=mysql_fetch_row($result)){
    				//Il y a un suivant
    				list($num2)=$row;
    				mysql_freeresult($result);
    				return $num2;
    			}else{
    				//Pas de suivant !
    				mysql_freeresult($result);
    				return -1;
    			}
    		}
    	}
    	mysql_freeresult($result);	
    }
     
    function getAction($num){
    	global $id;
    	$query="Select nom from actions WHERE num=$num";
    	$result = mysql_query($query);
    	$row=mysql_fetch_row($result);
    	mysql_freeresult($result);
    	list($nom)=$row;
    	if ($nom=="zzAutres") $nom="Autres";
    	return $nom;
    }
     
    function children($num){  //Utilisé pour connaître le nombre d'annonces dans une catégories
    	global $id;
    	$futurquery="parent>=$num";//La borne inferieure est toujours la même
    	while(1){
    		$sibiling=getSibiling($num);
    		if ($sibiling==-1){
    			//On n'a pas la condition entière donc on prend le parent de num et le frere cadé du parent de num comme borne superieure
    			$num=getParent($num);
    			if ($num==0) {
    				//Si le num qu'on a passé a get parent n'avait pas de suivant et qu'il n'a pas de parent, c le last
    				//Donc la condition minimale suiffie
    				break;
    			}
    		}else{
    			$futurquery.=" and parent <$sibiling";
    			break;
    		}
    	}
    	//A Partir de là, on construit la requete pour avoir le nb d'annonces correspondant	
     
    	//Cherche toutes les annonces dans num et sous num
    	$query="Select num from annonces Where $futurquery and invalide!=-1";
    	$result = mysql_query($query);
    	$count=mysql_num_rows($result);
    	mysql_freeresult($result);
    	return $count;
    }
     
    	//Remet tout les strings en 'mode' lisible
    	if (isset($keywords)){
    		$keywords=stripslashes($keywords);
    		$keywordsshow=htmlspecialchars($keywords);
    	}
    	if (isset($searchstr)){
    		$searchstr=stripslashes($searchstr);
    		$searchstrshow=htmlspecialchars($searchstr);
    	}
     
    if ($subpage==2){
    	//On regarde si on pas voulu répondre à un message
    	if (isset($HTTP_POST_VARS["msgid"])){
    		//Ok, on a un post message à traiter !
    		$msg=stripslashes($msg);
    		$msgshow=htmlspecialchars($msg);
     
    		/*if (isset($name)){//Normalement, on s'en sert pas
    			$name=stripslashes($name);
    			$nameshow=htmlspecialchars($name);
    		}
    		
    		$fnomerr=false;
    		$fnomerr2=false;*/
    		$fmessageerr=false;
    		$fmessageerr2=false;
     
    		//On vérifi la validitée du message
    		$msg=trim($msg);
    		if (strlen(urlencode($msg))>255){
    			$fmessageerr=true;
    		}
    		if ($msg != ""){
    			$msg2=$msg;
    			$msg2=str_replace(",", " ", $msg2);
    			$msg2=str_replace(":", " ", $msg2);
    			$msg2=str_replace(";", " ", $msg2);
    			$msg2=str_replace("#", " ", $msg2);
    			$msg2=str_replace("?", " ", $msg2);
    			$msg2=str_replace("!", " ", $msg2);
    			$msg2=str_replace(".", " ", $msg2);
    			$msg2=str_replace("*", " ", $msg2);
    			$msg2=str_replace("@", " ", $msg2);
    			$msg2=str_replace("'", " ", $msg2);
    			unset($abeachwords);
    			$abeachwords=getList($msg2," ");
    			$eachwords="";
    			while(list(,$word)=each($abeachwords)){
    				$eachwords.="mot='$word' or ";
    			}
    			$eachwords=substr($eachwords,0,strlen($eachwords)-4);
    			$query="Select mot from words WHERE ($eachwords) and level=0";
    			$result = mysql_query($query);
    			$numrows=mysql_num_rows($result);
    			if ($numrows!=0){
    				$fmessageerr2=true;
    			}
    			mysql_freeresult($result);
    		}
    		if (strlen(urlencode($msg))>255 or $msg==""){
    			$fmessageerr=true;
    		}
     
    		if (!$fmessageerr and !$fmessageerr2){ //and !$fnomerr2 and !$fnomerr
    			$query="select num from messages where ip='$REMOTE_ADDR' and randid=$msgid";
    			$result=mysql_query($query);
    			$dup=true;
    			if (mysql_num_rows($result)==0){
    				$dup=false;
    			}
    			mysql_free_result($result);
     
    			if (!$dup){
    				//Plus qu'à ajouter dans la bd
    				$query = "INSERT INTO messages VALUES($annonceID,$sujet,'".urlencode($msg)."',0,".(floor(time()/3600/24)).",'$REMOTE_ADDR',$msgid)";
    				$result = mysql_query($query);
    			}else{
    				unset($msg);
    			}
    			//C ok
    			$subpage=1;
    			unset($annonceID);		
    		//}else{ Y'a une erreur
    		}
    	}else if (isset($invalide)){ //On vérifi si on pas voulu supprimer l'annonce
    		//On incrémente le nombre d'invlalide si ce n'est pas toujours la même personne qui vote invalide !
    		$query="UPDATE annonces SET invalide=invalide+1,ip='$REMOTE_ADDR' WHERE num=$annonceID and ip!='$REMOTE_ADDR' and invalide!=-1";
    		$result = mysql_query($query);
     
    		$query="select invalide,viewed from annonces where num=$annonceID";
    		$result = mysql_query($query);
    		$row=mysql_fetch_row($result);
    		mysql_free_result($result);
    		list($ninvalide,$nviewed)=$row;
    		if ($ninvalide >10 and $ninvalide*100/$nviewed >= 60){ //Plus de 10 invalide et que les invalides représentent au moins 60% des visites
    			//On vire l'annonce
    			$query="UPDATE annonces SET invalide=-1 WHERE num=$annonceID";
    			$result = mysql_query($query);
    			$query = "INSERT INTO suppr VALUES($annonceID,".(time()).",2)";
    			$result = mysql_query($query);
    			$subpage=1;
    			unset($annonceID);
          $result=mysql_query("SELECT num FROM suppr WHERE cause=2");
          if (mysql_num_rows($result)==20){
            email('bot','postmaster@yakadonner.fr','ATTENTION ! 20 annonces ou plus ont étées jugées invalides','Il faut aller contrôler tout ça au plus vite !!!!');
          }
          mysql_free_result($result);
    		}else if ($ninvalide==-1){
    			$subpage=1;
    			unset($annonceID);
    		}
    	}
    }
     
     
    //Pour afficher où on est, on fait un getParent jusqu'a avoir 0
    if ($node==0 and !isset($keywords) and $subpage==1){
    	//On est sur recherche (le début)
    	if ($browsername=="Netscape6"){
    		echo " : Recherche";
    	}else{
    		echo "&nbsp;:&nbsp;Recherche</td><td valign='top'>&nbsp;";
    	}
    }else{
    	if ($browsername=="Netscape6"){
    		echo " : <a href=/?page=2>Recherche</a> : ";
    	}else{
    		echo "&nbsp;:&nbsp;<a href=/?page=2>Recherche</a>&nbsp;:&nbsp;</td><td>";
    	}
    	echo "<font $smallfont>";
    	if ($node !=0){
    		$parent=getParent($node);
    		if ($parent==""){
    			$page=1010;
    			include("pages/gotoerr.php3");
    		}
    		while ($parent!=0){
    			$location="<a href=/?page=2&node=$parent>".getNom($parent)."</a> : ".$location;
    			$parent=getParent($parent);
    		}
    		echo "$location";
    		unset($location);
    	}
    	//On ajoute le courant
    	//Si on a fait une recherche, ce n'est pas le dernier, donc il faut y faire un lien
    	if (isset($keywords)){ //&& !haveChild($node)
    		if ($node !=0){
    			echo "<a href=/?page=2&node=$node>".getNom($node)."</a> : ";
    		}
    		if ($subpage==2){
    			if (isset($dep)){
    				$advancedStr="&dep=$dep&section=$section&ftitle=$ftitle&fannonce=$fannonce&fphoto=$fphoto";
    			}
    			if (isset($subresult)){//Réusltat multi page
    				$linkback="&subresult=$subresult&fp=$fp";
    			}
    			echo "<a href=/?page=2&node=$node&keywords=".urlencode($keywords).$linkback.$advancedStr.">Recherche</a> : ";
    			echo "Lecture&nbsp;&&nbsp;Réponse";
    		}else{
    			echo "Recherche";
    		}
    	}else{
    		if ($subpage==2){
    			echo "<a href=/?page=2&node=$node>".getNom($node)."</a> : ";
    			echo "Lecture & Réponse";
    		}else{
    			echo getNom($node);
    		}
    	}
    	echo "</font>";
    }
     
     
    ?>
    ceci est ma pages du module de recherche, j'en perd mon latin !!!!

    encore beaucoup de travail, mais je suis en week-end, vendredi à 12h00, enfin du temps pour travailler sur le site, et vous lire et répondre !!!
    @ plus

  9. #9
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut


    j'aimerais voir la page qui était en timeout au tout début. getParent n'est pas directement liée à getList pour le moment.

    dans ton code précédent j'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    			$abeachwords=getList($msg2," ");
    			$eachwords="";
    			while(list(,$word)=each($abeachwords)){
    				$eachwords.="mot='$word' or ";
    			}
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    			$abeachwords=getList($msg2," ");
    			$eachwords="";
    			foreach($abeachwords as $word) {
    				$eachwords.="mot='$word' or ";
    			}
    ce qui donne

    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
    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
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
     
    <?php
     
    include("pages/location/common.php");
     
    function getSibiling($num){
    	//Donc tout ce qui a num > au courant est < au suivant
    	//Pour ça, on prend le parent de num, on énumere ses enfants et dès qu'on trouve num, on prend le suivant
    	if ($num==0) return -1;
    	global $id;
     
    	//Trouve le parent de num
    	$parent=getParent($num);
     
    	//Cherche tout les freres de num
    	$query="Select num from cats WHERE parent=$parent ORDER BY num";
    	$result = mysql_query($query);
    	while($row=mysql_fetch_row($result)){
    		list($num2)=$row;
    		if ($num2==$num){
    			if ($row=mysql_fetch_row($result)){
    				//Il y a un suivant
    				list($num2)=$row;
    				mysql_freeresult($result);
    				return $num2;
    			}else{
    				//Pas de suivant !
    				mysql_freeresult($result);
    				return -1;
    			}
    		}
    	}
    	mysql_freeresult($result);
    }
     
    function getAction($num){
    	global $id;
    	$query="Select nom from actions WHERE num=$num";
    	$result = mysql_query($query);
    	$row=mysql_fetch_row($result);
    	mysql_freeresult($result);
    	list($nom)=$row;
    	if ($nom=="zzAutres") $nom="Autres";
    	return $nom;
    }
     
    function children($num){  //Utilisé pour connaître le nombre d'annonces dans une catégories
    	global $id;
    	$futurquery="parent>=$num";//La borne inferieure est toujours la même
    	while(1){
    		$sibiling=getSibiling($num);
    		if ($sibiling==-1){
    			//On n'a pas la condition entière donc on prend le parent de num et le frere cadé du parent de num comme borne superieure
    			$num=getParent($num);
    			if ($num==0) {
    				//Si le num qu'on a passé a get parent n'avait pas de suivant et qu'il n'a pas de parent, c le last
    				//Donc la condition minimale suiffie
    				break;
    			}
    		}else{
    			$futurquery.=" and parent <$sibiling";
    			break;
    		}
    	}
    	//A Partir de là, on construit la requete pour avoir le nb d'annonces correspondant
     
    	//Cherche toutes les annonces dans num et sous num
    	$query="Select num from annonces Where $futurquery and invalide!=-1";
    	$result = mysql_query($query);
    	$count=mysql_num_rows($result);
    	mysql_freeresult($result);
    	return $count;
    }
     
    	//Remet tout les strings en 'mode' lisible
    	if (isset($keywords)){
    		$keywords=stripslashes($keywords);
    		$keywordsshow=htmlspecialchars($keywords);
    	}
    	if (isset($searchstr)){
    		$searchstr=stripslashes($searchstr);
    		$searchstrshow=htmlspecialchars($searchstr);
    	}
     
    if ($subpage==2){
    	//On regarde si on pas voulu répondre à un message
    	if (isset($HTTP_POST_VARS["msgid"])){
    		//Ok, on a un post message à traiter !
    		$msg=stripslashes($msg);
    		$msgshow=htmlspecialchars($msg);
     
    		/*if (isset($name)){//Normalement, on s'en sert pas
    			$name=stripslashes($name);
    			$nameshow=htmlspecialchars($name);
    		}
    
    		$fnomerr=false;
    		$fnomerr2=false;*/
    		$fmessageerr=false;
    		$fmessageerr2=false;
     
    		//On vérifi la validitée du message
    		$msg=trim($msg);
    		if (strlen(urlencode($msg))>255){
    			$fmessageerr=true;
    		}
    		if ($msg != ""){
    			$msg2=$msg;
    			$msg2=str_replace(",", " ", $msg2);
    			$msg2=str_replace(":", " ", $msg2);
    			$msg2=str_replace(";", " ", $msg2);
    			$msg2=str_replace("#", " ", $msg2);
    			$msg2=str_replace("?", " ", $msg2);
    			$msg2=str_replace("!", " ", $msg2);
    			$msg2=str_replace(".", " ", $msg2);
    			$msg2=str_replace("*", " ", $msg2);
    			$msg2=str_replace("@", " ", $msg2);
    			$msg2=str_replace("'", " ", $msg2);
    			unset($abeachwords);
    			$abeachwords=getList($msg2," ");
    			$eachwords="";
    			foreach($abeachwords as $word) {
    				$eachwords.="mot='$word' or ";
    			}
    			$eachwords=substr($eachwords,0,strlen($eachwords)-4);
    			$query="Select mot from words WHERE ($eachwords) and level=0";
    			$result = mysql_query($query);
    			$numrows=mysql_num_rows($result);
    			if ($numrows!=0){
    				$fmessageerr2=true;
    			}
    			mysql_freeresult($result);
    		}
    		if (strlen(urlencode($msg))>255 or $msg==""){
    			$fmessageerr=true;
    		}
     
    		if (!$fmessageerr and !$fmessageerr2){ //and !$fnomerr2 and !$fnomerr
    			$query="select num from messages where ip='$REMOTE_ADDR' and randid=$msgid";
    			$result=mysql_query($query);
    			$dup=true;
    			if (mysql_num_rows($result)==0){
    				$dup=false;
    			}
    			mysql_free_result($result);
     
    			if (!$dup){
    				//Plus qu'à ajouter dans la bd
    				$query = "INSERT INTO messages VALUES($annonceID,$sujet,'".urlencode($msg)."',0,".(floor(time()/3600/24)).",'$REMOTE_ADDR',$msgid)";
    				$result = mysql_query($query);
    			}else{
    				unset($msg);
    			}
    			//C ok
    			$subpage=1;
    			unset($annonceID);
    		//}else{ Y'a une erreur
    		}
    	}else if (isset($invalide)){ //On vérifi si on pas voulu supprimer l'annonce
    		//On incrémente le nombre d'invlalide si ce n'est pas toujours la même personne qui vote invalide !
    		$query="UPDATE annonces SET invalide=invalide+1,ip='$REMOTE_ADDR' WHERE num=$annonceID and ip!='$REMOTE_ADDR' and invalide!=-1";
    		$result = mysql_query($query);
     
    		$query="select invalide,viewed from annonces where num=$annonceID";
    		$result = mysql_query($query);
    		$row=mysql_fetch_row($result);
    		mysql_free_result($result);
    		list($ninvalide,$nviewed)=$row;
    		if ($ninvalide >10 and $ninvalide*100/$nviewed >= 60){ //Plus de 10 invalide et que les invalides représentent au moins 60% des visites
    			//On vire l'annonce
    			$query="UPDATE annonces SET invalide=-1 WHERE num=$annonceID";
    			$result = mysql_query($query);
    			$query = "INSERT INTO suppr VALUES($annonceID,".(time()).",2)";
    			$result = mysql_query($query);
    			$subpage=1;
    			unset($annonceID);
          $result=mysql_query("SELECT num FROM suppr WHERE cause=2");
          if (mysql_num_rows($result)==20){
            email('bot','postmaster@yakadonner.fr','ATTENTION ! 20 annonces ou plus ont étées jugées invalides','Il faut aller contrôler tout ça au plus vite !!!!');
          }
          mysql_free_result($result);
    		}else if ($ninvalide==-1){
    			$subpage=1;
    			unset($annonceID);
    		}
    	}
    }
     
     
    //Pour afficher où on est, on fait un getParent jusqu'a avoir 0
    if ($node==0 and !isset($keywords) and $subpage==1){
    	//On est sur recherche (le début)
    	if ($browsername=="Netscape6"){
    		echo " : Recherche";
    	}else{
    		echo "&nbsp;:&nbsp;Recherche</td><td valign='top'>&nbsp;";
    	}
    }else{
    	if ($browsername=="Netscape6"){
    		echo " : <a href=/?page=2>Recherche</a> : ";
    	}else{
    		echo "&nbsp;:&nbsp;<a href=/?page=2>Recherche</a>&nbsp;:&nbsp;</td><td>";
    	}
    	echo "<font $smallfont>";
    	if ($node !=0){
    		$parent=getParent($node);
    		if ($parent==""){
    			$page=1010;
    			include("pages/gotoerr.php3");
    		}
    		while ($parent!=0){
    			$location="<a href=/?page=2&node=$parent>".getNom($parent)."</a> : ".$location;
    			$parent=getParent($parent);
    		}
    		echo "$location";
    		unset($location);
    	}
    	//On ajoute le courant
    	//Si on a fait une recherche, ce n'est pas le dernier, donc il faut y faire un lien
    	if (isset($keywords)){ //&& !haveChild($node)
    		if ($node !=0){
    			echo "<a href=/?page=2&node=$node>".getNom($node)."</a> : ";
    		}
    		if ($subpage==2){
    			if (isset($dep)){
    				$advancedStr="&dep=$dep&section=$section&ftitle=$ftitle&fannonce=$fannonce&fphoto=$fphoto";
    			}
    			if (isset($subresult)){//Réusltat multi page
    				$linkback="&subresult=$subresult&fp=$fp";
    			}
    			echo "<a href=/?page=2&node=$node&keywords=".urlencode($keywords).$linkback.$advancedStr.">Recherche</a> : ";
    			echo "Lecture&nbsp;&&nbsp;Réponse";
    		}else{
    			echo "Recherche";
    		}
    	}else{
    		if ($subpage==2){
    			echo "<a href=/?page=2&node=$node>".getNom($node)."</a> : ";
    			echo "Lecture & Réponse";
    		}else{
    			echo getNom($node);
    		}
    	}
    	echo "</font>";
    }
     
    ?>
    il serait préférable de passer en revue les scripts contenant un appel à getList d'abord. les boucles sur getParent me paraissent étranges mais bien balisées.

    Citation Envoyé par jeannot_31
    a question que je me pose, le site actuel est en fait une copie conforme de www.kitrouvetou.com, et la cela fonctionne trés bien !!! je me demande si le fait
    que je ne sois pas chez le même hébergeur génére des soucis, du fait également que je suis sur un serveur mutualisé, et le PHPini ,n'est pas modifiable sur se type de bécane, (mutalisé oblige, je suis chez OVH)...
    comme billoum te l'a expliqué, il y avait bien boucle infinie dans getList parcequ'il est impossible à $p2 d'être une chaine de caractère. Il y a donc au moins une différence entre les 2 sites. si tu es capable de récupérer les sources actuels du site qui est fonctionnel, tu gagneras beaucoup de temps.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    re, aprés réflexion, si cela intéresse quelqu'un, je pense pouvoir vous fournir le site au complet, et le créer ainsi, un site Open source, bref, je ne sais pas si cela va intéresser quelqu'un, pour le voir en fonctionnement allez sur www.kitrouvetou.com, lui il fonctionne malgré le défaut reconnu, car le site actuelement monté etait une copie conforme, bref si cela interesse quelqu'un de s'y mettre dessus, à savoir que il faut modifier quelque fichier, vouv en doutez, le fichier "Config", acces base, etc...

    je pense que cela peut etre positif, en effet, je pense qu'il manque de fonction utile de nos jour sur un site de petite annonce, reply lors de réponse au annonce via un mail d'avertissement pour le déposeur, etc, plein d'idé, mais je ne suis malheureusement pas aussi bon que vous...

    le site ne fonctionne toujours pas, si quelqu'un à une idée, si il faut que je monte un serveur dédié pour les tests, dite le moi, g je pense, avoir suffisament de matériel pour le faire chez moi.

    @++
    jean

  11. #11
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Mise à par quelque petit problème de conception (pourquoi faire du php lorsque SQL peut te donner la réponse)
    tu utilise beaucoup while (1) avec des if et autre test pour en sortir
    un while est une boucle conditionnelle alors utilise là comme tel

    pour les exemple que tu donnes il existe un design patern qui date des année 50 (oui ça existait déjà on n'avait jus pas donné de nom)
    ta boucle relève du modèle "tanque non fin et non trouvé ..."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $find = false;
    while (!endOfList() && !$find) {
      $current =  nextElement();
      $find = (condition recherchée);
    }
    // ici on sort en ayant tout parcouru et find = false ou en ayant trouvé et find = true
    un principe simple une boucle n'a qu'un seul point d'entrée et un seul point de sortie explicite dans sa contiontion. avec ça tu éviteras des difficultés.

    Un bon bouquin d'algo sur les boucle et tu verras qu'on peut toujours faire en respectant ce principe et en restat propre et lisible

    A+JYT

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/03/2007, 17h59
  2. Réponses: 3
    Dernier message: 03/01/2007, 21h43
  3. Réponses: 2
    Dernier message: 24/08/2006, 10h46
  4. [Système] Exécution d'un fonction
    Par grumly22 dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2006, 12h25
  5. Exécution d'une fonction...
    Par mickeliette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/11/2004, 16h59

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