String echo ne s'affiche pas.

Eléphanteau du PHP | 22 Messages

18 juin 2019, 17:59

Bonjour à tous, une petite aide de la part des pros. J'ai un soucis pour afficher un echo après une vérification URL. Il doit avoir un problème de structure ou de position car ce qui suit mon echo fonctionne mais pas l'affiche lui même. Est-il mal mis dans mon code HTML ? Je bloque depuis plus de 1h sans trouver. Merci pour votre aide.
Après : if(filter_var($url, FILTER_VALIDATE_URL))

J'ai mis un dans le code pour le trouver facilement.
// Message
echo 'URL valide !';


<?php

// Test connexion DB
 try 	{
			$bdd=new PDO
			('mysql:host=localhost;
			dbname=bitly;
			charset=utf8','root',''
			);
			echo "Connection DB OK ! ";
		}

catch(Exception $e)

		{
			die('Message Erreur : '.$e->getMessage());
		}
?>


<!DOCTYPE html>
<html>
<head>
<title>Check URL</title>
</head>
<body>

<form action="?" method="post">
<input name="url" type="url" required placeholder="Coller votre lien ..." />
<input type="submit" value="Raccourcir"/>	
<div><em>Checker un URL : </em>
</div>
</form>


<?php

// Après form // 
if (!empty($_POST['url']))
	{

				// Désigne la variable
				$url=$_POST['url'];
				// Vérifier si url valide

				if(filter_var($url, FILTER_VALIDATE_URL)) 
				
					{
					
[b]					// Message
					echo 'URL valide !';[/b]

				    // si url valide on continue :

				    		// Variable et le sel (salt) qui permet de rendre unique le shortcut pour empêcher de décrypter + paramètre variable ici ranmdom
							$shortcut=crypt($url, time());

							// Requète qui prépare la DB avant l'envoi. Compte tous (dans x) dans la db links dans la table url
							$req=$bdd->prepare('SELECT COUNT(*) AS x FROM links WHERE url = ?');
							// ? ne jamais rentrer à la main la valeur dans la requète.


							// On execute la requète en créant un tableau
							$req->execute(array($url));
		
							// Lire chaque ligne de la DB
							// Pour le résultat on crée un tableau array en faisant une boucle. $req va aller chercher l'info (fetch) à mettre dans result

								while ($result=$req->fetch()) 

									{
									// si occurence est différent de 0 (url existe déjà)
								
											if($result['x'] !=0)
												{
													header('location: test2.php?error=true&message=Adresse déjà raccourcie');
													// test2.php?error=true&message=Adresse%20déjà%20raccourcie //
																	
											exit();

												}
									}


				// Préparer -> insérer valeur url, shortcut
				$req=$bdd->prepare('INSERT INTO links(url,shortcut) VALUE (?, ?)');

				// Envoi DB -> exécuter
				$req->execute(array($url, $shortcut));
				
				// redirection vers un lien à générer
				header('location: test2.php?short='.$shortcut);
				// test2.php?short=95Hn9hJhZYPSA

				exit();
					} 


		// Si c'est pas un URL Valide

		else 
				{

				echo("$url n'est PAS une URL valide ! ");

				}

// Fin envoi URL				

	}

?>

</body>
</html>

Mammouth du PHP | 1967 Messages

18 juin 2019, 20:35

vérifie dans le code source (ctrl + U) si tu vois l'affichage de ton message.

Sinon tu peux tenter de lui mettre un peu de mise en page du genre
echo '<h1>Ca marche !!!</h1>';

par contre c'est ton premier echo

echo "Connection DB OK ! ";
qui n'est pas bien placé. mais il vaudra mieux l'enlever au passage en prod
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Mammouth du PHP | 1609 Messages

18 juin 2019, 20:43

Salut, dans tous les cas tu fais un header location après le echo ce qui explique que tu ne vois pas le message puisque tu fais une redirection.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 22 Messages

20 juin 2019, 11:21

Salut, dans tous les cas tu fais un header location après le echo ce qui explique que tu ne vois pas le message puisque tu fais une redirection.
Merci de ta réponse. Je l'avais mis justement avant le header, je remarque quand je mets un exit() le résultat de l'écho apparaît mais quelle est la solution pour le voir avant et ensuite ma redirection ?

Mammouth du PHP | 1967 Messages

20 juin 2019, 11:24

soit tu fais une redirection en javascript
soit tu enregistre ta variable en _SESSION et tu l'affiche après redirection.

mais le mieux est de se poser la question : as tu besoin de cet affichage ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 22 Messages

20 juin 2019, 11:30

Besoin, non. Il doit 'exécuter mais est directement rediriger donc pas le temps de le voir à mon avis. Je pense que je devrais créer une variable et l'afficher. Un script juste pour ça c'est chaud ;). Merci de ta réponse.

Mammouth du PHP | 1967 Messages

20 juin 2019, 11:44

la bonne pratique est de ne rien avoir en sortie de fichier avant un header()

donc même pas un espace ou retour à la ligne avant le <?php

ta config semble le tolèrer mais pas sur que tous les environnement soit aussi tolérant.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 22 Messages

20 juin 2019, 13:53

Merci beaucoup pour cette info !!!
la bonne pratique est de ne rien avoir en sortie de fichier avant un header()

donc même pas un espace ou retour à la ligne avant le <?php

ta config semble le tolèrer mais pas sur que tous les environnement soit aussi tolérant.