Deprecated: Function get_magic_quotes_gpc()

Petit nouveau ! | 3 Messages

13 juin 2022, 01:16

Bonjour à tous,

Voici le message que j'ai sur un vieux script que j'employais il y a 10ans... A ce temps là il fonctionnais bien lol
J'ai déjà cherché un peu sur le net... Je sais que cette erreur est due a la mise a jour de php mais n'étant pas du tout du domaine je ne sais pas comment régler ce problème par une autre façon que de demander de l'aide... Car j'y connais pas grand chose au Php en vérité.

C'est un script de recommandation de site par mail...
Voilà l'erreur...
Deprecated: Function get_magic_quotes_gpc() 
Je vais d'ailleurs coller tout le script ainsi peut-etre que ce serra plus facile pour vous pour savoir m'aider ou me dire quoi changer exactement pour qu'il refonctionne avec le php de maintenant...

Voici la page recommandation.php
<?php
ini_set( 'display_errors', true ); 
error_reporting( E_ALL ); 
	// Configuration basique du script

	// ETAPE 1 : renseignez les valeurs ci-dessous
	$subject = "Recommandation d'un site"; // sujet de l'email
	$url_site = 'www.'; // L'adresse de votre site
	$sitename = "Nom de votre site"; // nom de votre site
	$recevoir_copie = 'oui'; // si 'oui', vous recevrez une copie de chaque mail de recommandation
	$mon_mail = 'Votre email'; // votre email pour recevoir les copies

	// ETAPE 2 : renseignez le chemin relatif vers le fichier antispam.php
	require_once('recommandation_antispam.php'); // pour définir les questions et les réponses

	// C'EST TOUT :-)


	// Rec récupère un  message textuel
	function Rec($text)
	{
		$text = htmlspecialchars(trim($text), ENT_QUOTES);
		if (1 === get_magic_quotes_gpc())
		{
			$text = stripslashes($text);
		}

		$text = nl2br($text);
		return $text;
	};

	// IsEmail vérifie la syntaxe d'un email
	function IsEmail($email)
	{
		$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
		return (($value === 0) || ($value === false)) ? false : true;
	}

	// Envoie le mail
	function SendRecommandMail($recipient, $subject, $message, $exp_nom, $exp_mail)
	{
		$headers  = 'From:'.$exp_nom.' <'.$exp_mail.'>' . "\r\n";
		$headers .= 'Reply-To: '.$exp_mail. "\r\n";
		$message = html_entity_decode($message);
		$message = str_replace('&#039;',"'",$message);
		$message = str_replace('&#8217;',"'",$message);
		$message = str_replace('<br>','',$message);
		$message = str_replace('<br />','',$message);

		return mail($recipient,$subject,$message,$headers);
	};

	// récuperation des variables
	$origine_nom   = (isset($_POST['origine_nom']))   ? Rec($_POST['origine_nom']) : '';
	$origine_email = (isset($_POST['origine_email'])) ? Rec($_POST['origine_email']) : '';
	$desti_nom     = (isset($_POST['desti_nom']))     ? Rec($_POST['desti_nom']) : '';
	$desti_email   = (isset($_POST['desti_email']))   ? Rec($_POST['desti_email']) : '';
	$message       = (isset($_POST['message']))       ? Rec($_POST['message']) : '';
	$errform = false;

	// n'oublions pas les 2 variables du captcha :
	$code  = (isset($_POST['code']))  ? strtolower(Rec($_POST['code'])) : ''; // contient la réponse du visiteur
	$nospam_question = (isset($_POST['nospam_question'])) ? $_POST['nospam_question'] : ''; // contient un nombre : le numéro de la vraie réponse

	if (isset($_POST['submit'])) // formulaire validé, on le traite
	{
		// Vérification des emails
		$origine_email = (IsEmail($origine_email)) ? $origine_email : '';
		$desti_email = (IsEmail($desti_email)) ? $desti_email : '';

		// On demande la vraie réponse
		$verif_spam = NoSpamQuestion('ans', $nospam_question);

		// on compare la 'vraie' réponse et celle du visiteur
		if ($code != strtolower($verif_spam['answer']))
		{
		?><p class='attention'><?php
			// le formulaire s'arrête ici
			echo 'Vous n\'avez pas r&eacute;pondu correctement &agrave; la question Anti-Spam...<br />Votre message n\'a donc pas &eacute;t&eacute; envoy&eacute;, merci de r&eacute;essayer.</p>'."\n";
		}
		else // code OK : c'est un humain
		{
			// valeurs obligatoires : mail de l'expéditeur, mail du destinataire.
			if (($origine_email != '') && ($desti_email != ''))
			{
				// les 2 emails sont remplis ... On peut envoyer ce qu'il faut !
				$final_message = 'Bonjour';

				// Ajout du nom du destinataire si existant :
				$final_message .= ($desti_nom != '') ? ' '.$desti_nom : '';

				// Ajout du nom de l'expéditeur si existant
				$final_message .= ($origine_nom != '') ? "\n".$origine_nom : "\nUn visiteur";

				// message générique
				$final_message .= ' voudrait vous recommander ce site : '.$url_site;

				// Ajout du message personnalisé si existant
				if ($message != '')
				{
					$final_message .= "\n\n-------------------------\nIl (Elle) a ajouté le message suivant :\n".nl2br(stripslashes($message));
				}

				// Fin du contenu du mail
				$final_message .= "\nA bientôt sur ".$url_site."\nL'équipe ".$sitename.".";

				// Envoi du message
				$exp_nom = $sitename;
				$exp_mail = $origine_email;
				if ($origine_nom != '')
				{
					$exp_nom = $origine_nom.' (depuis '.$sitename.')';
				};

				if ($recevoir_copie == 'oui')
					$destinataires = $desti_email.','.$mon_mail;
				else
					$destinataires = $desti_email;

				if (SendRecommandMail($destinataires, $subject, $final_message, $exp_nom, $exp_mail))
				{
				?><p class='attention'><?php
					echo 'Votre message est bien parti, merci d\'avoir recommandé notre site !</p>'."\n";
				}
				else
				{
				?><p class='attention'><?php
					echo 'Votre message n\'a pu être envoyé : il y a une erreur au niveau du serveur de mail. Veuillez nous excuser et réessayer sous peu.</p>'."\n";
				};

				echo '<p style="text-align:center;"></p>'."\n";
			}
			else
			{
				$errform = true;
			};
		};
	};

	if ($errform)
	{
	?><p class='attention'><?php
		echo 'Erreur constatée dans le formulaire... Vérifiez que vous avez bien mis un seul email de destination et que le vôtre soit correctement écrit.</p>';
	};

	$tabindex = 1;
	if ((!isset($_POST['submit'])) || ($errform)) // formulaire non validé ou avec une erreur
	{
		// on tire au sort une question
		$nospam = NoSpamQuestion();

		echo '<form id="recommander" method="post" action="">'."\n";
		echo '	<fieldset><legend>A propos de vous ...</legend>'."\n";
		echo '		<p><label for="origine_nom">Votre nom :</label><input type="text" id="origine_nom" name="origine_nom" value="'.$origine_nom.'" tabindex="'.$tabindex.'" /></p>'."\n"; $tabindex++;
		echo '		<p><label for="origine_email">Votre email* :</label><input type="text" id="origine_email" name="origine_email" value="@"'.$origine_email.'" tabindex="'.$tabindex.'" /></p>'."\n"; $tabindex++;
		echo '	</fieldset>'."\n";

		echo '	<fieldset><legend>Envoyer &agrave; ...</legend>'."\n";
		echo '		<p><label for="desti_nom">Nom du destinataire :</label><input type="text" id="desti_nom" name="desti_nom" value="'.$desti_nom.'" tabindex="'.$tabindex.'" /></p>'."\n"; $tabindex++;
		echo '		<p><label for="desti_email">Email du destinataire* :</label><input type="text" id="desti_email" name="desti_email" value="@"'.$desti_email.'" tabindex="'.$tabindex.'" /></p>'."\n"; $tabindex++;
		echo '	</fieldset>'."\n";

		echo '	<fieldset><legend>Message + Contr&#244;le Anti-Spam</legend>'."\n";
		echo '		<p><label for="message">Votre message :</label><textarea id="message" cols="30" rows="8" name="message" tabindex="'.$tabindex.'">'.$message.'</textarea></p>'."\n"; $tabindex++;
		echo '		<p><label for="code">Calcul Anti-Spam* : '.$nospam['question'].'?</label><input type="text" name="code" id="code" /><input type="hidden" name="nospam_question" value="'.$nospam['num'].'" /></p>'."\n";
		echo '	</fieldset>'."\n";
		echo '	<div style="text-align:center;"><input type="submit" name="submit" value="Envoyer mon mail !" /></div>'."\n";
		echo '</form>'."\n";
		echo '<p style="font-style:italic;">* Les champs marqu&eacute;s d\'une ast&eacute;risque sont obligatoires.</p>'."\n";
	};
?>
    </div>
Voici la page : recommandation_antispam.php
<?php
    /*
    * NoSpamQuestion affiche une question pour la validation d'un formulaire ...
    * $mode, mode question ou réponse par défaut tirage au sort de question {string}
    * $answer, lors de la demande d'une réponse à la question numero tant ... {int}
    *
    * @returns array
    *
    * Ajouter une question :
    * copier/coller ces lignes et remplir le contenu entre guillemets doubles :
    *
    * $array_pictures[$j]['num'] = $j; // ne pas changer cette ligne
    * $array_pictures[$j]['question'] = "mettre ici la question (correspondant à l'image si vous utilisez une image)";
    * $array_pictures[$j]['answer'] = "mettre ici la réponse à l'énigme";
    * $j++; // ne pas oublier cette ligne dans la copie :-)
    *
    * C'est tout. Question suivante ? :-)
    *
    */
    function NoSpamQuestion($mode = 'ask', $answer = 0)
    {
    $array_pictures = array(); $j = 0;
    $array_pictures[$j]['num'] = $j;
    $array_pictures[$j]['question'] = "1 + 3 ...";
    $array_pictures[$j]['answer'] = "QUATRE";
    $j++;
    $array_pictures[$j]['num'] = $j;
    $array_pictures[$j]['question'] = "8 x 2 ...";
    $array_pictures[$j]['answer'] = "SEIZE";
    $j++;
    if ($mode != 'ans')
    {
    // on est en mode 'tirer au sort', on tire une image aléatoire
    $lambda = rand(0, count($array_pictures)-1);
    return $array_pictures[$lambda];
    }
    else
    {
    // on demande une vraie réponse
    foreach($array_pictures as $i => $array)
    {
    if ($i == $answer)
    {
    return $array;
    break;
    };
    };
    }; // Fin if ($mode != 'ans')
    };
    ?>
Merci à vous, vraiment pour votre aide
Fred

Mammouth du PHP | 2703 Messages

13 juin 2022, 01:33

supprimer :

if (1 === get_magic_quotes_gpc())
{
$text = stripslashes($text);
}

Petit nouveau ! | 3 Messages

13 juin 2022, 01:47

Whaaa un vrai champion (MERCIII) je n'ai plus d'erreur de code affiché...
Par contre le formulaire ne s'envoie pas et j'ai ce message...

Votre message n'a pu être envoyé : il y a une erreur au niveau du serveur de mail. Veuillez nous excuser et réessayer sous peu.

Cela peut-etre du à quoi ?
Je dois demander quelque chose à mon hébergeur One ?
Si oui quoi vous pensez ? J'ai bien installé une boite mail avec mon nom de domaine pourtant...

Mammouth du PHP | 2703 Messages

13 juin 2022, 02:04

https://help.one.com/hc/fr/articles/115 ... -site-web-
"Notez que l'adresse « À » ou « De » doit être un compte de messagerie électronique actif sur votre domaine auprès de One.com."

il faudrait savoir à qui est destiné cet email et à quoi.

Petit nouveau ! | 3 Messages

13 juin 2022, 02:17

Merci à toi pour ta réactivité.
En fait le script de recommandation est placé sur mon site pour que les gens puissent aller sur cette page en question, là il y met sont nom et sont adresse mail, le nom et l'adresse mail de la personne a qui il veux faire la recommandation du site, il a la possibilité de placer un petit mot, et moi je devrais recevoir une copie de la recommandation faite également par mail... En tout cas il y a 10ans ce script fonctionnait super bien... On dirait comme si le serveur acceptais pas que le site envoie des mails en fait... Je pense qu'a l’époque ily avait une manip a faire ou a demander au niveaux serveur mais je ne me rappel plus... Je n'avais plus vu une ligne de code avant 10ans en fait... Là je dois faire un mini site mais galere après toute ces années et tout ces changements dans le codage...

Avatar du membre
Eléphanteau du PHP | 41 Messages

13 juin 2022, 10:46

je répond pas vaiment à ton sujet mais je te propose un regex plus simple pour ta fonction IsEmail :
$re = '/([[:ascii:]]*)\@([[:ascii:]]*)\.(\w+)/';
$str = '[email protected]';

preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);

// Print the entire match result
var_dump($matches);
ça prend en charge les . - et _ et ça récup chaque partie mais à toit de tester
---
j'ai pas trop le temps de tout revoir dans ton code.
mais déjà je te donne des conseils qui sont plus dans mon style technique de codage
ça ne veux pas dire que tous les Dev PHP seront d'accord avec moi. mais tu auras une
Idée de comment certain travail.

0 - on ne mélange pas les torchons et les serviettes et encore moins les torchons-serviette :)

1 - déjà pour moi je ne mélange jamais, jamais, jamais du HTML et du PHP
ou tu as une page PHP qui produit du HTML ou tu as du HTLM Pure sans PHP
donc en amont c'est une page PHP et elle va générer du HTML.
2 - après pour la lisibilité j'utilise les Monades on est dans du Design pattern enfin c'est l'idée est là et là encore comme dans le premier point
on ne met pas de HTML dans du PHP et tu vas me dire mais ou on va foutre les balises à un moment je dois bien mettre <truc muche
c'est justement là qu'intervient les Monades si tu veux c'est comme encapsuler du texte ou du contenu voila un exemple
  private function endtag($tag, $value)
    {
        return ["</$tag>", $value[1]];
    }

    private function startHTML($value, $injection, $arbre_noms, $argument, $no_aid)
    {
        return $this->gentag('html', $value, $argument);
    }
du coup tu peux fabriqué des balises que tu vas construire mais dans ton php ou une page dédier à cela.

3 - la réponse est oui je reviens au point 1 il existe pour moi 1 seul cas de figure ou j'ai le droit de mélanger du HTML et du PHP
c'est une page contenant du code générer par php. il y a des étapes aussi à respecter quand on produit un contenu.
produit -> stocker->mise en ligne 3 étape différentes. la page mise en ligne c'est la v1 visible par le client qui est sur la page.
la version stocker c'est possible que ça soit la V2 non visible encore et quand ça le sera le V1 sera écrasé.
c'est pour cela qu'on en arrive à donné la capacité à php de produire du contenu qui peut mélanger du php et du html.
mais c'est purement par finalité du genre toi jamais tu vas y mettre les mains. tu ne travail que coté PHP et jamais jamais jamais tu n'écris une balise HTML <truc muche> non comme plus haut tu as déjà une fonction qui fabrique tes balises.
tout cela c'est de l'automatisation et tu retrouve ce genre de concept dans beaucoup de framework.
est donc c'est bien ? oui pour la lisibilité et la maintenance du code.

maintenant pareil la page qui va contenir ce code PHP et qui va produire du HTML en usant de tout les avantage de PHP
on ne la mélange pas avec du pure code PHP aussi on va lui dédier une page à elle avec un nom spécifique du genre : interface_1_page.php (le _page mais ça peut être un autre nom ) sera là pour reconnaitre que c'est du code spécifique à la production d'un contenu HTML
bon alors à quoi ça ressemble des Monades du PHP qui produit du html : voici un exemple rapide
use Eukaruon\configs\CMD;
use Eukaruon\modules\Modules_actions as AC;
use Eukaruon\modules\Modules_objets as MO;
use Eukaruon\pilote;

define('THEMEUSE', 'grey');

AC::debutTempTest();
MO::doctype();
MO::tete();

MO::meta(['charset' => 'UTF-8']);
if (MO::session('utilisateur', 'inscript'))
    MO::autoload('page_produits');

MO::titre('{{TITRE}}');
MO::css(THEMEUSE, true);
MO::js(src: 'https://code.jquery.com/jquery-3.6.0.min.js');

MO::corp();
MO::debutDiv(id: 'page');

if (MO::session('utilisateur', 'inscript')) {
    // finir ici : si utilisateur inscrit
} else {

    MO::debutHeader('TITRE');


    MO::debutDiv(id: 'colone_menu');


    MO::boutton_ajustable(
        texte: '',
        image: 'svg/fi-rr-chart-tree.svg',
        class: 'logo_boutton_ajustable',
        theme: THEMEUSE,
        lien: '',
        injecter: ['tag' => 'img', 'injecter' => 'test_dinjection']
    );
...
bon c'est un petit exemple rapide et dans un éditeur avec de la couleur il y aura une bonne lisibilité.
alors bon là c'est un exemple il en existe une multitude d’approche et d’utilisation de PHP je te partage mon style.
c'est ma vision de PHP mais c'est peut être pas ainsi que d'autre personnes travail.

en espérant que cela t'aide :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 juin 2022, 18:20

Pour vérifier que le format d'une adresse mail est valide, le mieux est encore d'utiliser la fonction clé-en-main de PHP, car avec les regex c'est quasi certain que vous allez oublier des cas de figures :
filter_var('[email protected]', FILTER_VALIDATE_EMAIL)
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Eléphanteau du PHP | 41 Messages

13 juin 2022, 22:32

Pour vérifier que le format d'une adresse mail est valide, le mieux est encore d'utiliser la fonction clé-en-main de PHP, car avec les regex c'est quasi certain que vous allez oublier des cas de figures :
filter_var('[email protected]', FILTER_VALIDATE_EMAIL)
Oui complétement j'allais le dire ne relisant mon message, filter_var fait encore mieux le taf. Le Regex c'est une aventure , un jeu de défit quand vous y entrez c'est un périple éternel... à mi-chemin entre l'enfer et le paradis.
et on veut tout faire avec, malheureusement on oubli que PHP à déjà des fonctions efficace.

merci pour se rappel

Petit nouveau ! | 2 Messages

16 sept. 2022, 11:40

Bonjour à tous j'ai un problème similaire, un message d'erreur sur ma page de connexion (page session) :

Deprecated: Function get_magic_quotes_gpc() is deprecated in /home/mweorigi/public_html/ENT/page_session.php on line 60

Je suis en PHP 7.4

voici le code de la ligne question :
function remove_magic_quotes($array)
{
	/*
	 * fonction :	nettoyage des \ dans une chaîne
	 * in :		$array : tableau de valeurs
	 */

	// On n'exécute la boucle que si nécessaire
	if ( $array AND get_magic_quotes_gpc() == 1 )
		foreach($array as $key => $val) {
			// Si c'est un array, recursion de la fonction, sinon suppression des slashes
			if ( is_array($val) )
				remove_magic_quotes($array[$key]);
			else
				if ( is_string($val) )
					$array[$key] = stripslashes($val);
			}

	return $array;
}
Si je passe en version 7.3, plus d'erreur.
Vraiment, merci par avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 sept. 2022, 12:51

Tu peux supprimer toute cette fonction, et partout où elle est appelée.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

16 sept. 2022, 13:10

Ok je teste.

Merci beaucoup