comparer deux chaînes de caractères

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 : comparer deux chaînes de caractères

Re: comparer deux chaînes de caractères

par atari54 » 07 juin 2012, 12:13

J'ai posté trop vite : effectivement, l'opération consistant à comparer les deux chaines de caractères (le nom du lien que poste l'utilisateur, et le nom du lien qui lui correspond se trouvant dans une table de la BDD) ne sert à rien si on utilise des listes déroulantes. J'avais pondu ce code uniquement dans le cas où l'utilisateur rentrerait ses liens à supprimer dans un champ, à la main. C'est tellement évident, que dans la précipitation...j'ai laissé comme ça. On va mettre ça sur le compte de la fatigue. :wink:
Concernant la clause "where" d'une requête SQL, je l'ai utilisée, et même postée dans mon précédent message :
$req = $bdd->prepare('DELETE FROM la_renaissance_liens_1 WHERE nom_lien_1 = :nom_lien1_supp');

Re: comparer deux chaînes de caractères

par xTG » 07 juin 2012, 11:36

Pourquoi un break ? Pourquoi récupérer tous les liens alors que tu n'en veux qu'un ?
Clause WHERE d'une requête SQL cela te parle ? :P

Re: comparer deux chaînes de caractères

par atari54 » 07 juin 2012, 10:56

J'ai parlé un peu vite quand j'ai dit que ça fonctionnait : en fait, avec le code que j'ai mis plus haut, on ne pouvait supprimer que le dernier lien à chaque fois (puisque j' "attendais" que la boucle fasse le tour des données de la table, pour s'arrêter à la dernière ligne). Donc, j'ai mis tout simplement un "break" dans la boucle, qui est appliqué seulement si le nom du lien choisit par l'utilisateur correspond bien à un des liens listés dans la table de la base de données.
Ce qui donne :
if(isset($_POST['nom_lien1_supp']) && !empty($_POST['nom_lien1_supp']) ){
		include 'connexion_bdd.php';
		$requete = $bdd->query('SELECT nom_lien_1 FROM la_renaissance_liens_1');
            While($ligne = $requete->fetch())
            {            
                $lien1 = $ligne['nom_lien_1'];
				if($_POST['nom_lien1_supp']===$lien1){
				break;
				}
            }
            $requete->closeCursor();	

	if($_POST['nom_lien1_supp']===$lien1){
        //reste du code...
Aussi, j'ai changé la façon dont l'utilisateur choisit les liens à supprimer. J'ai fait une liste déroulante pour chaque thématique, listant les noms des liens présents dans la BDD. C'est en effet plus pratique...

Formulaire permettant de choisir les liens sous forme de listes déroulantes :
<form action="javaTest.php" method="POST" name="formulaire">

			<p>SUPPRESSION DE LIENS</p>
						
		 	<aside>
			<p>SITES GENERALISTES</p>
                       <table>                     
                       <tr><td><select name="nom_lien1_supp" id="liens" >
			
		
	               <?php 	include 'connexion_bdd.php';
			$requete = $bdd->query('SELECT nom_lien_1 FROM la_renaissance_liens_1');
                        while($ligne = $requete->fetch())
                        echo "<option value='".$ligne['nom_lien_1']."'>".$ligne['nom_lien_1']."</option>";
                        }
                        $requete->closeCursor();  ?>					
			
			</select></td></tr>
                       <tr><td><input type="submit" value="Validation" /></td></tr>            
                        </table>  
			</aside>
</form>
Fichier de comparaison des chaînes de caractères et de demande de confirmation (suppression du lien ou non)
if(isset($_POST['nom_lien1_supp']) && !empty($_POST['nom_lien1_supp']) ){
		include 'connexion_bdd.php';
		$requete = $bdd->query('SELECT nom_lien_1 FROM la_renaissance_liens_1');
            While($ligne = $requete->fetch())
            {            
                $lien1 = $ligne['nom_lien_1'];
				if($_POST['nom_lien1_supp']===$lien1){
				break;
				}
            }
            $requete->closeCursor();
			
		

	if($_POST['nom_lien1_supp']===$lien1){
	
?>
	<article>
        <form action="javaTest2.php" method="POST" name="formulaire">
            
			<!--[if (gt IE 6)&(lt IE 9)]>
				<div id="article">
				<![endif]-->
			<p>SUPPRESSION DE LIENS</p>
			<aside>
			<p>SITES GENERALISTES</p>
           <table>                 
			<p>Voulez-vous vraiment supprimer le lien "<?php echo $_POST['nom_lien1_supp'] ?>" ?</p>
			</td><td><input type="hidden" name="nom_lien1_supp" id="nom" value="<?php echo $_POST['nom_lien1_supp'] ?>" required/></td></tr>            
            <tr><td><input type="submit" value="Supprimer" /></td></tr> 
			
			<tr><td><a href="javaTest_form.php">                    					
			<p><-Ne pas supprimer et retourner au formulaire</p>
			</a></td></tr>
			
            </table>
			
			
		</aside>
		 
		</form>
	</article>
	
<?php
			}
			else
			{
				?>
				<script>
					alert('Le lien n\'existe pas');
					document.location.replace('javaTest_form.php');
				</script>
				<?php
			}
		}
Enfin, fichier contenant la requête de suppression du lien en question si l'utilisateur a confirmé la suppression.
if(isset($_POST['nom_lien1_supp']) && !empty($_POST['nom_lien1_supp'])){
			include 'connexion_bdd.php';
            
            $req = $bdd->prepare('DELETE FROM la_renaissance_liens_1 WHERE nom_lien_1 = :nom_lien1_supp');
            $req->execute(array(                				
				'nom_lien1_supp' => strip_tags($_POST['nom_lien1_supp'])				
            ));?>
			<script>
			alert('Le lien a été supprimé.');
			document.location.replace('javaTest_form.php');
			</script>
			<?php
            
            

		}
Ne faites pas attention à la présentation (indentation), qu'il faut que je soigne plus.

Re: comparer deux chaînes de caractères

par atari54 » 03 juin 2012, 19:26

Merci pour ta réponse rapide xTG.
Donc, d'après ce que tu dis, j'en déduis qu'il serait plus commun de sélectionner les données du champ en question, en affichant chaque enregistrement avec un "echo" (en faisant une boucle). C'est vrai que du coup, l'utilisateur aurait la liste directement sous les yeux dans la page admin, ce qui est plus pratique.
En fait, mon but est de faire une page admin pour une personne qui pourrait effectuer des changements sur un site, de manière la plus simple possible, et c'est pour cela que j'ai eu l'idée de mettre à sa disposition des formulaires pour qu'elle puisse rajouter et supprimer des liens présents sur le site à sa guise.
Je teste ton idée en tout cas. Merci encore.

Re: comparer deux chaînes de caractères

par xTG » 03 juin 2012, 19:00

Cela dépend de ton contexte.
Mais j'avoue que c'est assez bizarre de devoir rentrer le lien manuellement.
Généralement on liste le contenu de la table et on fait un lien de suppression pour chaque ligne en prenant la clé primaire comme référence.

comparer deux chaînes de caractères

par atari54 » 03 juin 2012, 18:28

Bonjour,

Le but de de mon "bidouillage", est de faire en sorte de comparer deux chaînes de caractères, mais dans un contexte bien précis.
L'utilisateur rentre le nom du lien qu'il souhaite voir supprimé d'un site internet. Pour vérifier que le lien rentré dans le champ correspond bien à un des liens qui existe dans la base de données, j'effectue une requête pour extraire la colonne de la table en question, puis je passe en revue les données ligne par ligne. Ensuite, je compare la donnée entrée par l'utilisateur avec chacune des lignes, ce qui donne :
if($_POST['nom_lien1_supp']===$lien1)

Je souhaiterai savoir si cette façon de faire est bonne, voire "conventionnelle" (en tout cas de mon côté, ça fonctionne), ou si ma façon de coder est maladroite.
Je mets ici le code en entier pour qu'il n'y ait pas de confusion :
include 'connexion_bdd.php';
$requete = $bdd->query('SELECT nom_lien_1 FROM la_renaissance_liens_1');
While($ligne = $requete->fetch())
{            
   $lien1 = $ligne['nom_lien_1'];
}
$requete->closeCursor();
		
if(isset($_POST['nom_lien1_supp']) && !empty($_POST['nom_lien1_supp']) ){
	if($_POST['nom_lien1_supp']===$lien1){	
?>

<article>
<form action="javaTest2.php" method="POST" name="formulaire">            
<p>SUPPRESSION DE LIENS</p>
<aside>
<p>SITES GENERALISTES</p>		
           <table>                 
			<p>Voulez-vous vraiment supprimer le lien "<?php echo $_POST['nom_lien1_supp'] ?>" ?</p>
			</td><td><input type="hidden" name="nom_lien1_supp" id="nom" value="<?php echo $_POST['nom_lien1_supp'] ?>" required/></td></tr>            
                        <tr><td><input type="submit" value="Supprimer" /></td></tr> 		
			<tr><td><a href="javaTest_form.html">                    					
			<p><-Ne pas supprimer et retourner au formulaire</p>
			</a></td></tr>
			
           </table>		
</aside>
</form>		 
</article>	

<?php
			}
			else
			{
				?>
				<script>
					alert('Le lien n\'existe pas');
					document.location.replace('javaTest_form.html');
				</script>
				<?php
			}
		}
Merci !