[RESOLU] mon script php 5 ne fonctionne pas en php 7

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] mon script php 5 ne fonctionne pas en php 7

Re: mon script php 5 ne fonctionne pas en php 7

par pascalromico » 26 août 2018, 17:08

MERCI :-)

Re: mon script php 5 ne fonctionne pas en php 7

par correlatif » 26 août 2018, 17:06

C'est correct oui.

Bonne continuation :)

Re: mon script php 5 ne fonctionne pas en php 7

par pascalromico » 26 août 2018, 17:04

oui, mais je ne sais pas ce que c'est une patern! c'est limite du chinois pour moi le php!!! lol

j'ai donc changé 3 lignes dans lesquelles il y avait energi même si la première ne me renvoyait pas l'erreur ??!!
soit:
if (eregi('\.?([a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]+)$', $string, $values)) { (qui ne renvoyait pas l'erreur)
par
if (preg_match("/([a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]+)$/i", $string, $values)){

if (eregi('^' . $value . '$', $input)) {
par
if (preg_match('/^' . $value . '$/i', $input)) {

et la dernière en tatonnant.... j'ai laissé le ! et ajouté / et /i
if (!eregi('^([a-zA-Z0-9\.\_\-]+)\@((([a-zA-Z0-9\-]+)\.)+([a-zA-Z]+))$', $value)) {
par
if (!preg_match('/^([a-zA-Z0-9\.\_\-]+)\@((([a-zA-Z0-9\-]+)\.)+([a-zA-Z]+))$/i', $value)) {

et ça marche à présent, merci de ton aide, mais oserais-je te demander de vérifier quand même mon dernier changement ? ;-/

Re: mon script php 5 ne fonctionne pas en php 7

par correlatif » 26 août 2018, 16:30

L'exemple que j'ai donné n'est valable que pour la première occurrence eregi. Tu dois remplacé chaque ligne qui contient eregi par preg_match et la bonne patern.

Pour la ligne que tu mentionnes cela devient:
if (preg_match('/^' . $value . '$/i', $input)) {
Il te reste un autre eregi à modifier, si tu suis mes deux exemples cela ne devrait pas être compliqué.

Re: mon script php 5 ne fonctionne pas en php 7

par pascalromico » 26 août 2018, 15:23

Bonjour,
merci de votre aide, mais que dois-je mettre à la place de la ligne où il y a eregi dans l'extrait code ci-dessous?
en mettant:
if (preg_match("/([a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]+)$/i", $string, $values)){
ça marche pas!
il semblerait que le ^ dans la ligne 65 du code ou il y a le erigi pose problème....

# Basic pattern matching on an entire array
#
function pattern_grep($input, $array) {
foreach ($array as $value) {
$value = addcslashes($value, '^.[]$()|{}\\');
$value = str_replace('*', '.*', $value);
$value = str_replace('?', '.?', $value);
$value = str_replace('+', '.+', $value);

if (eregi('^' . $value . '$', $input)) {
return TRUE;
}
}

return FALSE;
}

Re: mon script php 5 ne fonctionne pas en php 7

par correlatif » 26 août 2018, 14:50

Bonjour,

La fonction eregi à été supprimé sur php 7, tu dois donc utilisé une alternative tel que preg_match par exemple.

http://php.net/manual/fr/function.preg-match.php

Exemple, remplacer la ligne :
if (eregi('\.?([a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]+)$', $string, $values)) {
par
if (preg_match("/([a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]+)$/i", $string, $values)){
La même chose doit être fait pour chaque ligne ou "eregi" apparait dans ton script.

mon script php 5 ne fonctionne pas en php 7

par pascalromico » 26 août 2018, 13:36

Bonjour,
j'utilise depuis plusieurs années un script php qui me permet de recevoir par email les informations d'un formulaire html
Mon hébergeur me conseil vivement de passer en php7
Quand je règle chez mon hébergeur l'option sur php7, mon script php renvoie l'erreur suivante mais j'y connais vraiment pas grand chose en php, quelqu'un peut il m'aider à savoir ce qui cloche?

Merci de votre aide!

Voilà l'erreur recu quand j'envoie le formulaire avec mon hebergeur réglé en php7:
Fatal error: Uncaught Error: Call to undefined function eregi() in /home/clients/9c699b5756b813e5fc08e42765026348/web/2015form-cible-sta.php:65 Stack trace: #0 /home/clients/9c699b5756b813e5fc08e42765026348/web/2015form-cible-sta.php(166): pattern_grep('3', Array) #1 {main} thrown in /home/clients/9c699b5756b813e5fc08e42765026348/web/2015form-cible-sta.php on line 65

Mon php: (qui fonctionne sans problème en php5)

<?


header( 'content-type: text/html; charset=utf-8' );

$post = NULL;
$http = NULL;
$message ="";



########################################################################
# #
# PARAMETRES #
# #
########################################################################

# Domaines Autorisés ==> sécurité
#
$auth = "*@travauxacrobatiques.ch";



# Les adresses emails qui doivent etre interdites ==> securite
#
$deny = "nobody@*, anonymous@*, postmaster@*, [email protected]";


#
########################################################################



########################################################################
#
# Functions
#

# Supprime les espaces (ou d'autres caractères) en début et fin de chaîne
#
function array_trim(&$value, $key) {
$value = trim($value);
}

# Retourne le hostname
#
function get_domain($string) {
if (eregi('\.?([a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]+)$', $string, $values)) {
return $values[1];
}

return NULL;
}


# Basic pattern matching on an entire array
#
function pattern_grep($input, $array) {
foreach ($array as $value) {
$value = addcslashes($value, '^.[]$()|{}\\');
$value = str_replace('*', '.*', $value);
$value = str_replace('?', '.?', $value);
$value = str_replace('+', '.+', $value);

if (eregi('^' . $value . '$', $input)) {
return TRUE;
}
}

return FALSE;
}

# Fonction qui affiche les erreurs et fait la mise en page du message
#
function error_msg($error, $required = FALSE) {
global $post;


echo "<html>\r\n";
echo "\t<META content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;\" name=\"viewport\">\r\n";
echo "\t\t<head>\r\n";
echo "\t<title>Erreur sur le formulaire</title>\r\n";
echo "\t<style type=\"text/css\">
div.centre {text-align: center;
font-family: Helvetica, Arial;
padding-top: 50px;
padding-right: 10px;
padding-left: 10px;
font-size: 16px;
max-width: 630px;
margin:auto;
}

p{
text-align: center;
}
p.error{
color:black;
}
</style>\r\n";
echo "\t</head>\r\n";
echo "\t<body>\r\n";
echo "\t<div class=\"centre\"><p class=\"error\">${error}</p><p><a href=\"javascript: history.back();\">Retourner au formulaire</a></p></div>\r\n";
echo "\t</body>\r\n";
echo "\t</html>\r\n";


exit();
}


#
########################################################################

########################################################################
#
# Programme Principal
#


if ($_SERVER['REQUEST_METHOD'] == 'POST' ) { // SECURITE : on teste si on est bien en POST et que ce n'est pas un robot


$post = array( // on défini les varibales que l'on code en dur
'recipient' => $_POST['recipient'],
'email' => $_POST['email'],
'env_report' => $_POST['env_report'],
'required' => $_POST['required'],
'subject' => $_POST['subject'],
'redirect' => $_POST['redirect'],
'Envoi' => $_POST['Envoi'],
);

$http = array(
'REMOTE_USER' => $_SERVER['REMOTE_USER'],
'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'],
'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT']
);


if (($auth = explode(',', $auth))) {
array_walk($auth, 'array_trim');
}
if (($deny = explode(',', $deny))) {
array_walk($deny, 'array_trim');
}

# On teste si le champs caché jedoisetrevide, si non, c'est un robot
if(!empty($_POST['jedoisetrevide'])){
exit("Bye Robot, ce formulaire n'est pas pour toi... ");
}


# On teste les champs requis, si plusieurs champs sont requis il faut les séparer par une virgule et sans espace, par exemple: "TEL,DEMANDE_PARTICULIERE", de plus les rubriques ne peuvent pas avoir d_espace_dans_leur_nom

if ((!empty($post['required'])) && ($list = explode(',', $post['required']))) {
foreach ($list as $value) {
if (!empty($value) && empty($_POST["$value"])) {
error_msg("Veuillez remplir la rubrique ".$value, TRUE);
}
}
}

# On teste l'email fourni
#(interdit un email qui serait dans $deny, tout en haut du script ligne 24. Précéder les lignes de dièse pour le rendre inactif. J'ai changé error_msg par exit, 2 lignes ci-dessous, afin que le message d'erreur ne contienne pas le lien Retourner au formulaire.
if (pattern_grep($post['email'], $deny)) {
exit("L'email rentré ne peut pas être utilisé. Retournez au formulaire en utilisant le bouton précédent de votre navigateur");
}

#
#(oblige la bonne redaction de l email mais ici non actif car cet ordre est précédé de dièse, enlever les dièses ci-dessous pour l'activer)
# if (!eregi('^([a-zA-Z0-9\.\_\-]+)\@((([a-zA-Z0-9\-]+)\.)+([a-zA-Z]+))$', $post['email'])) {
# error_msg("L'email doit être du type [email protected].");
# }


# On teste si l'adresse recipient est correcte et autorisé dans Domaines Autorisés de la ligne 18
#
if ((!empty($post['recipient'])) && ($list = explode(',', $post['recipient']))) {
array_walk($list, 'array_trim');

foreach ($list as $value) {
if (!eregi('^([a-zA-Z0-9\.\_\-]+)\@((([a-zA-Z0-9\-]+)\.)+([a-zA-Z]+))$', $value)) {
error_msg("L'adresse est invalide.");
}
if (!pattern_grep($value, $auth)) {
error_msg("Cette adresse n'est pas autorisé.");
}
}
}
else {
error_msg("Une erreur inconnue est survenue lors de la vérification de l'adresse recipient.");
}


# On crée le message
#


$subject = $post['subject'];



foreach ($_POST as $key => $value) {

if (!array_key_exists($key, $post) && $value!="") {
$key=str_replace('_', ' ', $key); # On remplace le underscore par un espace vide
$message .= "${key}: ${value}\r\n\r\n";
}

}

if (!empty($post['env_report'])) {
if (($list = explode(',', $post['env_report']))) {
array_walk($list, 'array_trim');
foreach ($list as $value) {
if (array_key_exists($value, $http)) {
$message .= "${value}:\r\n" . $http["$value"] . "\r\n\r\n";
}
}
}
}


if(mail($post['recipient'], $subject, $message, "From: " . $post['email'] . "\r\nReply-To: " . $post['email'] . "\r\nX-Mailer: PHP FormMail")){

header('Location: ' . $_POST['redirect']);
}

else {
error_msg("Un problème est survenu lors de l'envoi de mail.");
}


} //fin du IF Programme principale

else {
error_msg("La mauvaise méthode a été appelée.");

}




?>