[RESOLU] jQeury problème de comparaison sur un retour $.pos

Eléphanteau du PHP | 11 Messages

04 mars 2021, 14:52

Bonjour,
je fais appel vos compétences car j'ai un souci j'ai bien le retour de mes echo après la soumission par la function(data)
mais si je veux comparer le texte du retour sur un :

if(data == "mon_texte") {
alert(data);
}

que ce soit mon echo "erreur"; ou mon echo "ok";
il ignore ma condition if et le message alert s'affiche quand même avec ok si vrai ou avec erreur si faut :?:

sa fait plus d’une semaine que je recherche sur internet, j'ai essayé plein exemple différents et moyen :(
si je fais un var obj = data; avant le if cela ne change rien, donc le résultat data qui est retourner est-ce du json du string .. ?

mon but : est de récupérer le résultat data et pouvoir l'utiliser comme du texte sur une variable string et la rendre accessible
pour des comparaisons.

je vous montre les morceaux de code concernés :
<?php
	if(!empty($_POST['mailform1']) && !empty($_POST['mdpform1'])) {
		$mailform1 = htmlspecialchars($_POST['mailform1']);
		$mdpform1 = sha1($_POST['mdpform1']);
		include('bdcon.php');
		$verif=mysqli_query($bdd1, "select * from 	membres where mail like '".$mailform1."' AND motdepasse like '".$mdpform1."'");
			$exi = $verif->num_rows;
			if($exi == 1)
			{
				$userinfo = mysqli_fetch_array($verif, MYSQLI_ASSOC);
				$mcom = $userinfo['pseudo'];
				echo $mcom;
			} else {
				echo "Erreur";
			}		
		} else {
            echo "Erreur";
		}				
?>
Ici tous fonctionne bien, après interrogation de la base je fait echo du pseudo pour le récupérer
dans data .


<?php						
          var mailform1 = $("#mailform1").val();
					var mdpform1 = $("#mdpform1").val();
					$.post("connexion.php",{mailform1: mailform1, mdpform1: mdpform1},function(data){
						var obj = data;
						if(obj != "Erreur" ) {
							alert(obj);
						}						
					});	
					return false;
					});						
?>
Ici le pseudo ou l'erreur s'affiche dans la boite alerte, la comparaison du if est ignorer :?:

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 16:02

Salut , tu dois avoir un retour à la ligne ou autre caractère invisible avant ou après le "Erreur" qui fait que obj est toujours différent de "Erreur". Essaie de voir le retour de l'appel ajax avec les outils de développement de ton navigateur.

PS : perso à moins de renvoyer du html, généralement je retourne du json.
echo json_encode([
  'success' => 1,
  'pseudo' => $userinfo['pseudo']
]);
// ou
echo json_encode([
  'success' => 0,
  'message' => 'Erreur'
]);
// dans le js
if (data.success) alert(data.pseudo);

PPS : normal que le code javascript soit dans des balises php ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 11 Messages

04 mars 2021, 20:06

bonjours et merci pour la réponse oui en faite pour une organisation esthétique avec Notepad++
je peut comme sa me créer des région de code avec echo 'le code '; exenple :

<?php // pour php
?>
<?php // pour java
{ // présentation code java
echo '
';
} // fin présentation code java

etc.
?>

ceci me permet d'étiqueter et de baliser et replier mes morceaux de codes et trouver directement se qui m'intéresse.

pour en revenir a mes moutons ^^
je suppose que tu m'invite à mettre le code sur ma page php de réception des envoi en remplacement de mes echo et sous java si data.success est 1 ou true la condition est bonne et si data.success est 0 ou false la condition est fausse, j'espère avoir bien compris je vais essayer et te remercie.

Eléphanteau du PHP | 11 Messages

04 mars 2021, 20:57

voila j'ai tester et rien même si en js
if (data.success) alert(data.pseudo); aucune réaction
je fait juste alert(data.success); réponse undefined
si je fait alert(data); réponse {"success":1,"pseudo":"nom_pseudo"} donc ses bien valide
si je fait une erreur pour alert(data); réponse {"success":0,"message":"Erreur"}

donc pour le moment sa ne marche toujours pas
il me faut que je puisse tester le retour en gardant le speudo, si Erreur je renvoi au formulaire et si le pseudo est valide le garder dans une variable et continuer le déroulement du programme .

si vous avez des idées merci à l'avance

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 21:41

En fait il n'interprète pas la réponse comme du json mais comme une chaîne. Alors soit tu ajoutes un quatrième paramètre 'json' au $.post soit tu fais un data = JSON.parse(data); soit tu corriges ce problème de caractère invisible qui empêche jquery de déterminer intelligemment le type de retour.

jQuery.post( url [, data ] [, success ] [, dataType ] )

url
Type: String
A string containing the URL to which the request is sent.
data
Type: PlainObject or String
A plain object or string that is sent to the server with the request.
success
Type: Function( PlainObject data, String textStatus, jqXHR jqXHR )
A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
dataType
Type: String
The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1564 Messages

04 mars 2021, 21:51

Salut,

fait des tests sans code PHP dans ta page connexion.php pour apprendre, ecrit seulement le mot "Erreur" par exemple, sans code, sans rien, sans retour, sans espace (#mode chanson: "partir un jour, sans retour..." OK je sors!)

Ensuite, un conseil, utilise mysqli_fetch_assoc directement plutôt que mysqli_fetch_array (voir la doc pour plus d'infos: https://www.php.net/manual/fr/mysqli-re ... -assoc.php )

Plutôt que d'utiliser like qui est est gourmand en ressource (d'après ce que j'ai pu comprendre depuis que je code) met un signe = et basta, like est plutôt pour rechercher un terme parmi une chaine de caractères.

Autre conseil:
      $exi = $verif->num_rows;
      if($exi == 1)

//tu t'embête pour rien, met directement le num_rows dans ta condition si tu te sert pas de ta variable $exi ensuite

// pareil pour ton:
 echo $mcom;
Autre conseil:

met ton résultat dans la console plutôt que dans un alert(), avec console.log(), en général c'est F12 la console du navigateur ;)

Puis ne pas confondre JAVA et JavaScript, deux langage différents.

Si tu veux, dans Notepad++ pour te retrouver plus facilement tu peut mettre des petites boules bleues sur le côté gauche, met la souris sur les numéros de chaque lignes et clic, une boule sera placée (entre le numéro et le code).

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 22:33

PS : si tu n'as aucun retour à la ligne ou espace indésirable dans ta sortie, cela peut venir d'un marqueur BOM.
https://www.ionos.fr/digitalguide/sites ... rder-mark/
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1564 Messages

05 mars 2021, 00:59

PS : si tu n'as aucun retour à la ligne ou espace indésirable dans ta sortie, cela peut venir d'un marqueur BOM.
https://www.ionos.fr/digitalguide/sites ... rder-mark/
Oui, si ça peut aider, dans Notepad++ > Préférences > nouveau document > Encodage > UTF-8 (sélectionne cet encodage et applique aux documents ouverts)

Eléphanteau du PHP | 11 Messages

08 mars 2021, 10:01

merci a tous j'ai résolu mon problème en refaisant mon code ligne par ligne et avec la console.

je voudrais aussi savoir pour la sécurité tout mon code apparaît avez vous des moyen pour cacher a par rendre complexe le code?
j'ai rechercher sur le net mais en faite rien ne peut empêcher de visionner a la console

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2021, 12:25

On appel cela "obfusquer" le code source, la technique consiste à renommer les fonctions et les variables avec plein de lettres et de chiffres afin que le code soit difficilement compréhensible.

Attention pour le débogage parce que celui qui va devoir le débugueur ny comprendra rien aussi!