Problème de warning.
Résolu/Fermé
A voir également:
- Problème de warning.
- Warning zone telechargement - Accueil - Services en ligne
- Quota warning free - Guide
- Pcl xl error warning illegal media type - Forum Imprimante
- Téléchargement direct : les bonnes adresses des sites pirates - Accueil - Outils
- Cpu fan fail warning control - Forum Windows
10 réponses
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
19 déc. 2019 à 14:06
19 déc. 2019 à 14:06
Bonjour,
A quelle ligne de code correspond ta ligne 486 ?
Quelle variable s'y trouve ?
Quelle est la "valeur" de cette variable au moment où il t'affiche l'erreur ( visiblement pas un nombre.. vu le message d'erreur )
La ligne de code concernée contient certainement une opération mathématique.... et faire une addition/soustraction/division/multiplication....;; sur autre chose qu'un nombre...ben..ça ne marche pas.
A quelle ligne de code correspond ta ligne 486 ?
Quelle variable s'y trouve ?
Quelle est la "valeur" de cette variable au moment où il t'affiche l'erreur ( visiblement pas un nombre.. vu le message d'erreur )
La ligne de code concernée contient certainement une opération mathématique.... et faire une addition/soustraction/division/multiplication....;; sur autre chose qu'un nombre...ben..ça ne marche pas.
Voici le ligne 486:
Voici comment j'obtiens les valeurs des variables $files, $ep, et $epSqr :
(Ligne 10 à 17 incluse ci dessous)
Avec le résultat en gras que voici:
abcdefgh
-
-8
Stop
Merci au passage pour :
Que tu m'as inculqué il y a déjà quelques temps.
Cela m'a toujours été très utile!!!
Et encore cette fois ci.
@ $epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);//PHP 7.1 n'accepte plus les valeurs non numériques.
Voici comment j'obtiens les valeurs des variables $files, $ep, et $epSqr :
(Ligne 10 à 17 incluse ci dessous)
// clear out the previous capture vars unset($captIdx); $thisFEN = explode(' ', $FENarray[$i]); $thatFEN = explode(' ', $FENarray[$i - 1]); $thisBoard = expandFEN($thisFEN[0]); $thatBoard = expandFEN($thatFEN[0]); $ep = $thatFEN[3]; echo $files ; echo "</br>"; echo $ep ; echo "</br>"; @ $epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);//PHP 7.1 n'accepte plus les valeurs non numériques. echo $epSqr; echo "</br>"; exit("<br/> Stop"); if (0 <= $epSqr && 63 >= $epSqr) idx2sqr($epSqr,$epIdx);
Avec le résultat en gras que voici:
abcdefgh
-
-8
Stop
Merci au passage pour :
exit("Stop");
Que tu m'as inculqué il y a déjà quelques temps.
Cela m'a toujours été très utile!!!
Et encore cette fois ci.
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
20 déc. 2019 à 09:44
20 déc. 2019 à 09:44
Ce code est exécuté dans une boucle.. ton "exit" fait que ça sort dès le premier tour...
mais, vu que tu es dans une boucle, le souci n'apparait peut-être qu'au tour d'apres, ou celui encore d'apres...ou au dernier...
A un moment, l'une des valeurs que prend une des variables n'est pas compatibles avec une opération mathématique.
Il faut également regarder chaque partie de l'instruction pour voir si l'erreur ne vient pas de là
le
et le
mais, vu que tu es dans une boucle, le souci n'apparait peut-être qu'au tour d'apres, ou celui encore d'apres...ou au dernier...
A un moment, l'une des valeurs que prend une des variables n'est pas compatibles avec une opération mathématique.
Il faut également regarder chaque partie de l'instruction pour voir si l'erreur ne vient pas de là
le
strpos( $files, substr($ep,0,1) )
et le
( ( substr($ep,1,1) - 1) * 8)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour la boucle voici le script modifié pour lires les variables $files, $ep et $epSqr pour tous les tours de celle ci:
En voici le résultat concrêt:
abcdefgh
-
-8
abcdefgh
e3
20
abcdefgh
e6
44
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
a3
16
abcdefgh
d6
43
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
Stop
Pour :
Nous connaissons la valeur de $files qui est abcdefgh et de $ep qui est -
Concernant strpos, j'ai trouver ce lien en français expliquant sa fonction:
https://www.php.net/manual/fr/function.strpos.php
qui cherche à déterminer la position numérique d'un caractère dans une chaîne à ce qu'il me semble.
Pour
J'ai trouvé ce dont il s'agit en ce qui concerne substr sur ce site:
https://www.php.net/manual/fr/function.substr.php
C' est une fonction retournant un segment de chaîne à partir d'une position numérique dans celle ci.Si j'ai bien compris.
A partir de toutes ces informations, comment les mettre en adéquation avec le message d'erreur stipulant que la ligne 486 n'est pas numérique.
Une idée?
for ($i = 1; $i < count($FENarray); $i++) // start at 1 because the first FEN is the start position / commencer à 1 car le premier FEN est la position de départ { // clear out the previous capture vars unset($captIdx); $thisFEN = explode(' ', $FENarray[$i]); $thatFEN = explode(' ', $FENarray[$i - 1]); $thisBoard = expandFEN($thisFEN[0]); $thatBoard = expandFEN($thatFEN[0]); $ep = $thatFEN[3]; echo $files ; echo "</br>"; echo $ep ; echo "</br>"; @$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);//PHP 7.1 n'accepte plus les valeurs non numériques. echo $epSqr; echo "</br>"; if (0 <= $epSqr && 63 >= $epSqr) idx2sqr($epSqr,$epIdx); else $epIdx = 75; // nothing near the board // start by checking for a castle move // this may not be the best way to go about it, but it's all i've got right now if ('w' == $thatFEN[1] // it was white's move && ( false !== strpos($thatFEN[2],'K') || false !== strpos($thatFEN[2],'Q')) // and they could have castled && ( false === strpos($thisFEN[2],'K') && false === strpos($thisFEN[2],'Q'))) // and now they can't { $backRank = substr($thisBoard,-8,8); // check for proper piece position if ('K' == substr($backRank,2,1) && 'R' == substr($backRank,3,1) && false !== strpos($thatFEN[2],'Q')) { $movesArray[$i]['piece'] = 'K'; $movesArray[$i]['extra'] = 'O-O-O'; $fromIdx = strpos($thatBoard,'K'); // the king's starting position $toIdx = 58; // the king's final position } elseif ('K' == substr($backRank,6,1) && 'R' == substr($backRank,5,1) && false !== strpos($thatFEN[2],'K')) { $movesArray[$i]['piece'] = 'K'; $movesArray[$i]['extra'] = 'O-O'; $fromIdx = strpos($thatBoard,'K'); // the king's starting position $toIdx = 62; // the king's final position } } elseif ('b' == $thatFEN[1] // it was black's move && ( false !== strpos($thatFEN[2],'k') || false !== strpos($thatFEN[2],'q')) // and they could have castled && ( false === strpos($thisFEN[2],'k') && false === strpos($thisFEN[2],'q'))) // and now they can't { $backRank = substr($thisBoard,0,8); // check for proper piece position if ('k' == substr($backRank,2,1) && 'r' == substr($backRank,3,1) && false !== strpos($thatFEN[2],'q')) { $movesArray[$i]['piece'] = 'k'; $movesArray[$i]['extra'] = 'O-O-O'; $fromIdx = strpos($thatBoard,'k'); // the king's starting position $toIdx = 2; // the king's final position } elseif ('k' == substr($backRank,6,1) && 'r' == substr($backRank,5,1) && false !== strpos($thatFEN[2],'k')) { $movesArray[$i]['piece'] = 'k'; $movesArray[$i]['extra'] = 'O-O'; $fromIdx = strpos($thatBoard,'k'); // the king's starting position $toIdx = 6; // the king's final position } } if ( ! isset($movesArray[$i]['extra'])) // if not castling, get the FROM square and TO square { // check for en passant captures first if ('w' == $thatFEN[1]) { if (75 != $epIdx && 'P' == substr($thisBoard,$epIdx,1)) // white capture black en passant { $captIdx = $epIdx + 8; $captPiece = 'p'; $movesArray[$i]['extra'] = 'ep'; } } else // black's turn { if (75 != $epIdx && 'p' == substr($thisBoard,$epIdx,1)) // black capture white en passant { $captIdx = $epIdx - 8; $captPiece = 'P'; $movesArray[$i]['extra'] = 'ep'; } } // then go through every square for ($j = 0; $j < 64; $j++) { // exclude any en passant capture squares from the search, and look for differences if (( ! isset($captIdx) || $j != $captIdx) && substr($thisBoard,$j,1) != substr($thatBoard,$j,1)) { // if the current board has a 1, then it must be the from square if ('0' == substr($thisBoard,$j,1)) $fromIdx = $j; else // it is the to square { $toIdx = $j; $movesArray[$i]['piece'] = substr($thisBoard,$j,1); } } } // check for pawn promotions if ((((56 <= $toIdx && 63 >= $toIdx) && 'p' == substr($thatBoard,$fromIdx,1)) || ((0 <= $toIdx && 7 >= $toIdx) && 'P' == substr($thatBoard,$fromIdx,1))) && (substr($thatBoard,$fromIdx,1) != substr($thisBoard,$toIdx,1))) { $movesArray[$i]['promo'] = strtoupper(substr($thisBoard,$toIdx,1)); $movesArray[$i]['piece'] = substr($thatBoard,$fromIdx,1); } // check for all other captures (skip if we already have an en passant capture) if (! isset($captIdx) && '0' != substr($thatBoard,$toIdx,1)) { $captIdx = $toIdx; $captPiece = substr($thatBoard,$toIdx,1); } } // test for checks or mates # echo __FILE__ . ' : ' . __LINE__ . '<br />'; $chess->init_gamestate($FENarray[$i]); $state = $chess->get_status_string($thisFEN[1]); // get the current game state if ('' != $state) { $movesArray[$i]['check'] = strtolower($state); } // put all data into the array idx2sqr($fromIdx,$movesArray[$i]['fromSq']); $movesArray[$i]['fromRow'] = floor($movesArray[$i]['fromSq'] / 8); $movesArray[$i]['fromCol'] = $movesArray[$i]['fromSq'] % 8; idx2sqr($toIdx,$movesArray[$i]['toSq']); $movesArray[$i]['toRow'] = floor($movesArray[$i]['toSq'] / 8); $movesArray[$i]['toCol'] = $movesArray[$i]['toSq'] % 8; if (isset($captIdx)) { idx2sqr($captIdx,$movesArray[$i]['captSq']); $movesArray[$i]['captRow'] = floor($movesArray[$i]['captSq'] / 8); $movesArray[$i]['captCol'] = $movesArray[$i]['captSq'] % 8; $movesArray[$i]['captPiece'] = $captPiece; } } exit("<br/> Stop");
En voici le résultat concrêt:
abcdefgh
-
-8
abcdefgh
e3
20
abcdefgh
e6
44
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
a3
16
abcdefgh
d6
43
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
abcdefgh
-
-8
Stop
Pour :
strpos( $files, substr($ep,0,1) )
Nous connaissons la valeur de $files qui est abcdefgh et de $ep qui est -
Concernant strpos, j'ai trouver ce lien en français expliquant sa fonction:
https://www.php.net/manual/fr/function.strpos.php
qui cherche à déterminer la position numérique d'un caractère dans une chaîne à ce qu'il me semble.
Pour
( ( substr($ep,1,1) - 1) * 8)
J'ai trouvé ce dont il s'agit en ce qui concerne substr sur ce site:
https://www.php.net/manual/fr/function.substr.php
C' est une fonction retournant un segment de chaîne à partir d'une position numérique dans celle ci.Si j'ai bien compris.
A partir de toutes ces informations, comment les mettre en adéquation avec le message d'erreur stipulant que la ligne 486 n'est pas numérique.
Une idée?
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
Ambassadeur
1 555
20 déc. 2019 à 17:46
20 déc. 2019 à 17:46
bonjour, dans quel cas strpos va-t-il retourner une valeur non numérique?
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
1 555
>
Max747
20 déc. 2019 à 19:01
20 déc. 2019 à 19:01
oui, en lisant https://www.php.net/manual/fr/function.strpos.php
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
20 déc. 2019 à 18:58
20 déc. 2019 à 18:58
On va debuguer un peu mieux :
<?php
Donc :
A remplacer par :
<?php
Donc :
echo $files ; echo "</br>"; echo $ep ; echo "</br>"; @$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);//PHP 7.1 n'accepte plus les valeurs non numériques. echo $epSqr; echo "</br>";
A remplacer par :
$sub0 = is_numeric($ep) ? substr($ep,0,1) : 0; $sub1 = is_numeric($ep) ? substr($ep,1,1) : 0; if(is_numeric($ep)){ $epSqr = strpos( $files, $sub0 ) + ( ( $sub1 - 1) * 8);//PHP 7.1 n'accepte plus les valeurs non numériques. }else{ echo "<pre><br>Fichier " . $files ; echo "<br>ep :"; var_dump($ep) ; echo "<br>substr(ep,0,1):"; var_dump(substr($ep,0,1)); echo "<br>substr(ep,1,1):"; var_dump(substr($ep,1,1)); echo "<br> substr(ep,1,1) - 1 : "; var_dump(substr($ep,1,1) - 1); echo "Ici.. on est dans le cas de l'erreur !"; echo "<br> Apres correction, sub0 et sub1 valent : "; echo "sub0: " . $sub0 . " sub1: ". $sub1; echo "</pre>"; exit(" ERREUR !!");; }
Merci Jordane45.
J'ai bien apporté une modification au débugage comme tu me l'indiques.
Voici le résultat avec var_dump:
Fichier abcdefgh
ep :string(1) "-"
substr(ep,0,1):string(1) "-"
substr(ep,1,1):string(0) ""
substr(ep,1,1) - 1 :
Warning: A non-numeric value encountered in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/includes/chessutils.inc.php on line 495
int(-1)
Ici.. on est dans le cas de l'erreur !
Apres correction, sub0 et sub1 valent : sub0: 0 sub1: 0
ERREUR !!
Voici la ligne 495 indiquée par le warning:
var_dump(substr($ep,1,1) - 1);
int(-1) ne serait pas la bonne valeur attendue pour être conforme à PHP 7.1 ?
J'ai bien apporté une modification au débugage comme tu me l'indiques.
Voici le résultat avec var_dump:
Fichier abcdefgh
ep :string(1) "-"
substr(ep,0,1):string(1) "-"
substr(ep,1,1):string(0) ""
substr(ep,1,1) - 1 :
Warning: A non-numeric value encountered in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/includes/chessutils.inc.php on line 495
int(-1)
Ici.. on est dans le cas de l'erreur !
Apres correction, sub0 et sub1 valent : sub0: 0 sub1: 0
ERREUR !!
Voici la ligne 495 indiquée par le warning:
var_dump(substr($ep,1,1) - 1);
int(-1) ne serait pas la bonne valeur attendue pour être conforme à PHP 7.1 ?
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
Ambassadeur
1 555
20 déc. 2019 à 19:55
20 déc. 2019 à 19:55
je suggère de remplacer
par
$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8); if (0 <= $epSqr && 63 >= $epSqr) idx2sqr($epSqr,$epIdx); else $epIdx = 75; // nothing near the board
par
if ( strpos($ep , "-" ) === false) $epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8); if (0 <= $epSqr && 63 >= $epSqr) idx2sqr($epSqr,$epIdx); else $epIdx = 75; else $$epIdx = 75; // no en passant target square
Merci yg_be de prêter attention à mon problème warning.
J'ai effectué la modif comme vous me l'avez indiqué en supprimant ces lignes:
else
$$epIdx = 75; // no en passant target square
Et en ajoutant les { } comme ceci:
if ( strpos($ep , "-" ) === false){
$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);
if (0 <= $epSqr && 63 >= $epSqr)
idx2sqr($epSqr,$epIdx);
}else{
$epIdx = 75;
}
(Je voudrai annoncer au passage que les lignes syntaxiques ne sont pas fonctionnelles lorqu' on répond en sélectionnant le bouton Commenter.Tout au moins en ce qui me concerne aujourd' hui.)
Sinon à part cela votre "formule" fonctionne car je n'ai plus le message warning.
La question semble désormais résolue.
J'ai effectué la modif comme vous me l'avez indiqué en supprimant ces lignes:
else
$$epIdx = 75; // no en passant target square
Et en ajoutant les { } comme ceci:
if ( strpos($ep , "-" ) === false){
$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);
if (0 <= $epSqr && 63 >= $epSqr)
idx2sqr($epSqr,$epIdx);
}else{
$epIdx = 75;
}
(Je voudrai annoncer au passage que les lignes syntaxiques ne sont pas fonctionnelles lorqu' on répond en sélectionnant le bouton Commenter.Tout au moins en ce qui me concerne aujourd' hui.)
Sinon à part cela votre "formule" fonctionne car je n'ai plus le message warning.
La question semble désormais résolue.
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
1 555
>
Max747
Modifié le 21 déc. 2019 à 10:44
Modifié le 21 déc. 2019 à 10:44
je pense qu'il est important d'ajouter
else
$epIdx = 75; // no en passant target square
Max747
>
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
21 déc. 2019 à 11:15
21 déc. 2019 à 11:15
Je ne comprends pas.
Car ces deux lignes existes déjà comme ci dessous dans mon fichier en "production" qui fonctionne:
if ( strpos($ep , "-" ) === false){
$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);
if (0 <= $epSqr && 63 >= $epSqr)
idx2sqr($epSqr,$epIdx);
}else{
$epIdx = 75;
}
????????
Car ces deux lignes existes déjà comme ci dessous dans mon fichier en "production" qui fonctionne:
if ( strpos($ep , "-" ) === false){
$epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8);
if (0 <= $epSqr && 63 >= $epSqr)
idx2sqr($epSqr,$epIdx);
}else{
$epIdx = 75;
}
????????
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
1 555
>
Max747
21 déc. 2019 à 11:24
21 déc. 2019 à 11:24
il y a deux if, il est utile d'avoir deux else.
Je voudrai remercier particulièrement Jordane45 ainsi que yg_be pour m'avoir consacré de leurs temps à la résolution de mon problème de warning désormais résolu.
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
Ambassadeur
1 555
Modifié le 21 déc. 2019 à 12:12
Modifié le 21 déc. 2019 à 12:12
if ( strpos($ep , "-" ) === false) { $epSqr = strpos( $files, substr($ep,0,1) ) + ( ( substr($ep,1,1) - 1) * 8); if (0 <= $epSqr && 63 >= $epSqr) idx2sqr($epSqr,$epIdx); else $epIdx = 75; } else $epIdx = 75; // no en passant target square
Bon. C'est ok également.
Ainsi donc je suis votre conseil d'utiliser ce dernier script.
Cependant je suis quand même surpris de constater que cette ligne :
$$epIdx = 75;
Comporte deux dollars l'un à côté de l'autre et que cela n'engendre même pas de message d'erreur.
Il serait donc possible d'écrire ainsi la désignation d'une variable php pour lui attribuer une valeur?
Ainsi donc je suis votre conseil d'utiliser ce dernier script.
Cependant je suis quand même surpris de constater que cette ligne :
$$epIdx = 75;
Comporte deux dollars l'un à côté de l'autre et que cela n'engendre même pas de message d'erreur.
Il serait donc possible d'écrire ainsi la désignation d'une variable php pour lui attribuer une valeur?
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
1 555
>
Max747
21 déc. 2019 à 13:04
21 déc. 2019 à 13:04
il faut retirer un des $
Max747
>
yg_be
Messages postés
23357
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 novembre 2024
21 déc. 2019 à 16:23
21 déc. 2019 à 16:23
Ok.
C'est bien ce que je pensais.
Enfin ça fonctionne aussi comme ça.
C'est bien ce que je pensais.
Enfin ça fonctionne aussi comme ça.