Aller au contenu

Script php génère une erreur php5 ? ou php4 ?


Sujets conseillés

Posté

Bonjour,

j'ai un problème curieux, je cherche à faire tourner un script en php sur un serveur php4 qui me donne une erreur et en cherchant l'erreur sur mon ami gg, je lis que probablement le script est prévu pour du php5, mais que dois-je modifier pour qu'il tourne en php4 ?

<?php
class cTypoGenerator
{
static $keyboard = array(
'1' => array( '2', 'q' ),
'2' => array( '1', 'q', 'w', '3' ),
'3' => array( '2', 'w', 'e', '4' ),
'4' => array( '3', 'e', 'r', '5' ),
'5' => array( '4', 'r', 't', '6' ),
'6' => array( '5', 't', 'y', '7' ),
'7' => array( '6', 'y', 'u', '8' ),
'8' => array( '7', 'u', 'i', '9' ),
'9' => array( '8', 'i', 'o', '0' ),
'0' => array( '9', 'o', 'p' ),
'-' => array( '0', 'p' ),

'q' => array( '1', '2', 'w', 'a' ),
'w' => array( 'q', 'a', 's', 'e', '3', '2' ),
'e' => array( 'w', 's', 'd', 'r', '4', '3' ),
'r' => array( 'e', 'd', 'f', 't', '5', '4' ),
't' => array( 'r', 'f', 'g', 'y', '6', '5' ),
'y' => array( 't', 'g', 'h', 'u', '7', '6' ),
'u' => array( 'y', 'h', 'j', 'i', '8', '7' ),
'i' => array( 'u', 'j', 'k', 'o', '9', '8' ),
'o' => array( 'i', 'k', 'l', 'p', '0', '9' ),
'p' => array( 'o', 'l', '0' ),

'a' => array( 'z', 's' , 'w', 'q' ),
's' => array( 'a', 'z', 'x', 'd', 'e', 'w' ),
'd' => array( 's', 'x', 'c', 'f', 'r', 'e' ),
'f' => array( 'd', 'c', 'v', 'g', 't', 'r' ),
'g' => array( 'f', 'v', 'b', 'h', 'y', 't' ),
'h' => array( 'g', 'b', 'n', 'j', 'u', 'y' ),
'j' => array( 'h', 'n', 'm', 'k', 'i', 'u' ),
'k' => array( 'j', 'm', 'l', 'o', 'i' ),
'l' => array( 'k', 'p', 'o' ),

'z' => array( 'x', 's', 'a' ),
'x' => array( 'z', 'c', 'd', 's' ),
'c' => array( 'x', 'v', 'f', 'd' ),
'v' => array( 'c', 'b', 'g', 'f' ),
'b' => array( 'v', 'n', 'h', 'g' ),
'n' => array( 'b', 'm', 'j', 'h' ),
'm' => array( 'n', 'k', 'j' )
);
}

echo "test";
?>

L'erreur générée est

PHP Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/.../monscript.php on line 4, referer: http://...

En vous remerciant

Amicalement

Patrick

Posté (modifié)
<?php
class cTypoGenerator
{
var keyboard = array(
...

;)

Modifié par dièse
Posté

Merci Diese, je suis une larve :P

Je croyais en être sorti, j'ai donc ajouté la première fonction

	
function getWrongKeyTypos( $word )
{
$word = strtolower( $word );
$typos = array();
$length = strlen( $word );

for( $i = 0; $i < $length; $i++ )
{

if( cTypoGenerator::$keyboard[$word{$i}] )
{

$tempWord = $word;
foreach( cTypoGenerator::$keyboard[$word{$i}] as $char )
{
$tempWord{$i} = $char;
array_push( $typos, $tempWord );
}
}
}

return $typos;
}

Il me génère encore une erreur sur la ligne if( cTypoGenerator::$keyboard[$word{$i}] )

PHP Parse error: parse error, unexpected ')', expecting '(' in /home/.../monscript.php on line 57, referer: http://../

Je suppose que c'est la façon d'appeller la fonction dans la classe qui ne convient pas, mais déjà que je n'ai pas l'habitude des classes en PHP4, je vais devoir m'y mettre pour le php5 :wacko:

En te remerciant de ta première réponse.

Amicalement

Patrick

Posté
Qu'essaies-tu de faire avec "$word{$i}" ? :shutup:

C'est un script qu'on m'a donné, mais si je comprends bien le fonctionnement général, je donne un mot 'test' par exemple et toutes ces fonctions me donnent les divers fautes de frappe possibles.

$word contient donc mon mot 'test' et cette fonction prend chaque lettre contenue dans $word donc $word{$i} puisque $i est une variable qui boucle lettre par lettre, pour aller chercher une correspondance dans $keyboard dans ma classe

Heu j'ai été clair ? :(

Patrick

Posté (modifié)
						 $talettre = $word{$i};
foreach( cTypoGenerator::$keyboard[$talettre] as $char )

Peut-être, mais je ne suis vraiment pas sûr :blush:.

En tout cas ton appel à ton tableau $keyboard est bon.

Edit : après recherche le problème vient peut-être de l'utilisation des accolades sur tes chaines de caractères qui serait obsolète, même en PHP4 :/. Essaie avec des crochets ;)

Modifié par dièse
Posté

Merci, j'ai encore tenté un truc en plus en mettant également dans le if, je n'ai plus d'erreur mais la fonction ne donne rien.

Le petit bout de code suivant complet

<?php
class cTypoGenerator
{
var $keyboard = array(
'1' => array( '2', 'q' ),
'2' => array( '1', 'q', 'w', '3' ),
'3' => array( '2', 'w', 'e', '4' ),
'4' => array( '3', 'e', 'r', '5' ),
'5' => array( '4', 'r', 't', '6' ),
'6' => array( '5', 't', 'y', '7' ),
'7' => array( '6', 'y', 'u', '8' ),
'8' => array( '7', 'u', 'i', '9' ),
'9' => array( '8', 'i', 'o', '0' ),
'0' => array( '9', 'o', 'p' ),
'-' => array( '0', 'p' ),

'q' => array( '1', '2', 'w', 'a' ),
'w' => array( 'q', 'a', 's', 'e', '3', '2' ),
'e' => array( 'w', 's', 'd', 'r', '4', '3' ),
'r' => array( 'e', 'd', 'f', 't', '5', '4' ),
't' => array( 'r', 'f', 'g', 'y', '6', '5' ),
'y' => array( 't', 'g', 'h', 'u', '7', '6' ),
'u' => array( 'y', 'h', 'j', 'i', '8', '7' ),
'i' => array( 'u', 'j', 'k', 'o', '9', '8' ),
'o' => array( 'i', 'k', 'l', 'p', '0', '9' ),
'p' => array( 'o', 'l', '0' ),

'a' => array( 'z', 's' , 'w', 'q' ),
's' => array( 'a', 'z', 'x', 'd', 'e', 'w' ),
'd' => array( 's', 'x', 'c', 'f', 'r', 'e' ),
'f' => array( 'd', 'c', 'v', 'g', 't', 'r' ),
'g' => array( 'f', 'v', 'b', 'h', 'y', 't' ),
'h' => array( 'g', 'b', 'n', 'j', 'u', 'y' ),
'j' => array( 'h', 'n', 'm', 'k', 'i', 'u' ),
'k' => array( 'j', 'm', 'l', 'o', 'i' ),
'l' => array( 'k', 'p', 'o' ),

'z' => array( 'x', 's', 'a' ),
'x' => array( 'z', 'c', 'd', 's' ),
'c' => array( 'x', 'v', 'f', 'd' ),
'v' => array( 'c', 'b', 'g', 'f' ),
'b' => array( 'v', 'n', 'h', 'g' ),
'n' => array( 'b', 'm', 'j', 'h' ),
'm' => array( 'n', 'k', 'j' )
);

function getWrongKeyTypos( $word )
{
$word = strtolower( $word );
$typos = array();
$length = strlen( $word );
echo "<br>Longueur:".$length;

for( $i = 0; $i < $length; $i++ )
{

$talettre = $word{$i};
echo "<br>(".$talettre.")";
echo "<br>(".$i.")";
if( cTypoGenerator::$keyboard($talettre) )
{

$tempWord = $word;
foreach( cTypoGenerator::$keyboard($talettre) as $char )
{
$tempWord{$i} = $char;
array_push( $typos, $tempWord );
}
}
}

return $typos;
}
}

echo "le formulaire contient " . $_POST['word'];
$word = $_POST['word'];
$typos = array();
$typos = cTypoGenerator::getWrongKeyTypos( $word );
foreach ($typos as $value){
$sign1.= "$value,";
}
echo "sign1 ".$sign1;
?>

Comme tu vois, j'ai affiché quelques variables pour voir ... j'ai testé le mot 'ecole'

$length est bien égale à 5

Mais ma boucle commence à 0 et s'arrête ....

le formulaire contient ecole
Longueur:5
(e)
(0)

Donc déjà dans ma boucle un truc ne va pas, et pourtant cela m'a l'air correct ? :(

Amicalement

atrick

Posté (modifié)

Utilise le mot réservé self pour faire appel static à une variable ou une méthode de ta classe courante ;)

   if( self::$keyboard($talettre) )

Modifié par dièse
Posté
Utilise le mot réservé self pour faire appel static à une variable ou une méthode de ta classe courante ;)

   if( self::$keyboard($talettre) )

Hélas, ca ne change rien ... :unsure: on dirait que l'appel à la variable de la classe vire $i...et la boucle s'arrête

Merci quand même

Pat

Posté (modifié)

Dernières corrections avant d'aller me coucher, je suis creuvé j'arrive plus du tout à réfléchir... mais il y avait une erreur dans le dernier bout de code que je t'ai donné, ça m'embête un peu :blush:

   for( $i = 0; $i < $length; $i++ )
{

$talettre = $word{$i};
if( self::$keyboard[$talettre] )
{
$tempWord = $word;
foreach( self::$keyboard[$talettre] as $char )
{
$tempWord[$i] = $char;
array_push( $typos, $tempWord );
}
}
}

bonne nuit (ou bon courage plutôt ;) )

Modifié par dièse
Posté

J'avais fais également la correction pour le 2eme self, ca changeait rien ...

Bon tans pis, merci de ton aide et je te souhaite la bonne nuit, je vais abandonner pour ce soir également

Amicalement

Patrick

allez, je post une dernière avant d'aller coucher :P

je viens d'enlever le bout de code suivant

					if( self::$keyboard($talettre) )
{

$tempWord = $word;
foreach( self::$keyboard($talettre) as $char )
{
$tempWord{$i} = $char;
array_push( $typos, $tempWord );
}
}

du coup le résultat de ma boucle est bon ...

le formulaire contient ecole
Longueur:5
(e)
(0)
(c)
(1)
(o)
(2)
(l)
(3)
(e)
(4)sign1

Il y a donc bien quelque chose dans le bout de code qui fait merder la boucle..... argh le php5 quel poisse :nonono:

Quand je pense qu'en acceptant le script, je me suis dit que ce serait un jeu d 'enfant de le faire tourner en php4 :rolleyes:

Amicalement

Patrick

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...