Les liens dans une base de donné mysql

aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -  
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,
en faite j'ai un probleme assez ennuyeux, je dois mettre des liens dans une base de donnée mysql, je les mets dans un endroit de type text et en html (ex: <a href="page1.html> Page 1 </a>) mais le seul probleme est que la base me rajoute des slash (ex:<a href=/"page1.html"/> Page1 </a>) et donc cela rend mon lien inutil... Il est possible de modifier ca structure de la base mais y aurait il un moyen que ca soit juste du premier coup ?
A voir également:

11 réponses

le père
 
Bonjour

Ça m'étonnerait beaucoup que mysql ajoute des slashes à tes données. Je pense que c'est plutôt toi qui les ajoute en enregistrant tes données avec addslashes au lieu de mysql_real_escape_string.
Peux-tu montrer le code qui fait l'insertion ?
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
<?php
mysql_connect("localhost", "utilisateur", "mot_passe");
mysql_select_db("base");
if (isset($_GET['modifier_hitg']))
{

$_GET['modifier_hitg'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_hitg']));

$retour = mysql_query('SELECT * FROM hitg WHERE id=\'' . $_GET['modifier_hitg'] . '\'');
$donnees = mysql_fetch_array($retour);


$id = stripslashes($donnees['id']);
$chanteur = stripslashes($donnees['chanteur']);
$chanson = stripslashes($donnees['chanson']);
$votes = stripslashes($donnees['votes']);
$id_hitg = $donnees['id'];
}
else
{

$id = '';
$chanteur = '';
$chanson = '';
$votes = '';
$id_hitg = 0;
}
?>
<form action="liste_hitg.php" method="post">
<p>numero : <input type="text" size="30" name="id" value="<?php echo $id; ?>" /></p>
<br>
chanteur :<br />
<input type="text" size="30" name="chanteur" value="<?php echo $chanteur; ?>" />
<br>
Chanson: <br/>
<input type="text" size="30" name="chanson" value="<?php echo $chanson; ?>" />
<br>
Nmbr de votes:<br/>
<input type="text" size="30" name="votes" value="<?php echo $votes; ?>" />

<input type="hidden" name="id_hitg" value="<?php echo $id_hitg; ?>" />
<input type="submit" value="Envoyer" />
</p>
</form>
</body>
</html>
0
le père
 
Euh.. ça c'est le formulaire de saisie. L'insertion des données dans la base semble faite dans liste_hitg.php.
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
<?php
mysql_connect("localhost", "", "");
mysql_select_db("");

if (isset($_POST['id']) AND isset($_POST['chanteur']) AND isset($_POST['chanson']) AND isset($_POST['votes']))
{
$id = addslashes($_POST['id']);
$chanteur= addslashes($_POST['chanteur']);
$chanson = addslashes($_POST['chanson']);
$votes = addslashes($_POST['votes']);


if ($_POST['id_hitg'] == 0)
{

mysql_query("INSERT INTO hitg VALUES('', '" . $id . "', '" . $chanteur . "', '" . $chanson . "', '" . $votes . "', '" . time() . "')");
}
else
{

$_POST['id_hitg'] = addslashes($_POST['id_hitg']);
mysql_query("UPDATE hitg SET id='" . $id . "', chanteur='" . $chanteur . "', chanson='" . $chanson . "', votes='" . $votes . "' WHERE id='" . $_POST['id_hitg'] . "'");
}
}

if (isset($_GET['supprimer_hitg']))
{

$_GET['supprimer_hitg'] = addslashes($_GET['supprimer_hitg']);
mysql_query('DELETE FROM hitg WHERE id=\'' . $_GET['supprimer_hitg'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>numero</th>
<th>chanteur</th>
<th>chanson</th>
<th>nmbr de votes</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM hitg ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_hitg.php?modifier_hitg=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_hitg.php?supprimer_hitg=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['id']); ?></td>
<td><?php echo stripslashes($donnees['chanteur']); ?></td>
<td><?php echo stripslashes($donnees['chanson']); ?></td>
<td><?php echo stripslashes($donnees['votes']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
}
?>
</table>
<br>
<p><a href="protection.php">Retour a la partie moderateur</a></p>
</body>
</html>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
le père
 
C'est là que tu ajoutes les slashes qui te posent un problème.
$id = addslashes($_POST['id']);
$chanteur= addslashes($_POST['chanteur']);
$chanson = addslashes($_POST['chanson']);
$votes = addslashes($_POST['votes']);

Il est possible que tu aies de plus un problèmes de magic_quotes_gpc : dans certaines configurations, c'est PHP lui-même qui ajoute les slashes au niveau des variables $_GET, $_POST et $_COOKIE (g,p,c)
Comme tu as aussi des stripslashes au niveau de ton affichage, c'est peut-être bien le cas.

Il faut alors utiliser une fonction qui fait un stripslashes ou non des données $_POST selon la valeur de magic_quotes_gpc, comme ça ça marche dans tous les cas de figure :

Dès le début de ton script :

function RecupChaine($chaine) {
if (get_magic_quotes_gpc()==1) return stripslashes($chaine); // il y avait magic
return $chaine; // il n'y avait pas magic
}

puis, pour récupérer tes variables

$id = mysql_real_escape_string(RecupChaine($_POST['id']));
$chanteur= mysql_real_escape_string(RecupChaine($_POST['chanteur']));
$chanson = mysql_real_escape_string(RecupChaine($_POST['chanson']));
$votes = mysql_real_escape_string(RecupChaine($_POST['votes']));

Et par ailleurs aucun autre addslahes ni stripslashes, qui n'ont aucun sens avec mysql.

(Note que ça ne va malheureusement rien changer pour les données déjà enregistrées dans ta base)
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
Ca va, j' ai trouvé grace aux inications que vous avez placée ci-dessous, merci beaucoup.
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
n changeant simplement les :
$id = addslashes($_POST['id']);
$chanteur= addslashes($_POST['chanteur']);
$chanson = addslashes($_POST['chanson']);
$votes = addslashes($_POST['votes']);
en:
$id = mysql_real_escape_string(RecupChaine($_POST['id']));
$chanteur= mysql_real_escape_string(RecupChaine($_POST['chanteur']));
$chanson = mysql_real_escape_string(RecupChaine($_POST['chanson']));
$votes = mysql_real_escape_string(RecupChaine($_POST['votes']));

Ca a marché... Mais merci beaucoup
0
le père
 
C'est que magic_quotes_gpc est à 0. Ce qui est le cas normal, mais j'ai pris l'habitude d'utiliser cette fonction parce qu'un hébergeur que j'ai eu autrefois avait cette variable à 1
0
le père
 
Tu devrais quand même retirer les stripslahes de l'affichage. Essaye de saisir un titre avec un slash suivi d'un apostrophe (pourquoi pas ?), il sera correctement enregistré dans la base, mais le stripslahes les effacera.
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
<?php
mysql_connect("localhost", "", "");
mysql_select_db("");

function RecupChaine($chaine) {
if (get_magic_quotes_gpc()==1) return stripslashes($chaine); // il y avait magic
return $chaine; // il n'y avait pas magic
}

if (isset($_POST['id']) AND isset($_POST['chanteur']) AND isset($_POST['chanson']) AND isset($_POST['votes']))
{
$id = addslashes($_POST['id']);
$chanteur= mysql_real_escape_string($_POST['chanteur']);
$chanson =mysql_real_escape_string($_POST['chanson']);
$votes = addslashes($_POST['votes']);


if ($_POST['id_hitg'] == 0)
{

mysql_query("INSERT INTO hitg VALUES('', '" . $id . "', '" . $chanteur . "', '" . $chanson . "', '" . $votes . "', '" . time() . "')");
}
else
{

$_POST['id_hitg'] = addslashes($_POST['id_hitg']);
mysql_query("UPDATE hitg SET id='" . $id . "', chanteur='" . $chanteur . "', chanson='" . $chanson . "', votes='" . $votes . "' WHERE id='" . $_POST['id_hitg'] . "'");
}
}

if (isset($_GET['supprimer_hitg']))
{

$_GET['supprimer_hitg'] = addslashes($_GET['supprimer_hitg']);
mysql_query('DELETE FROM hitg WHERE id=\'' . $_GET['supprimer_hitg'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>numero</th>
<th>chanteur</th>
<th>chanson</th>
<th>nmbr de votes</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM hitg ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_hitg.php?modifier_hitg=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_hitg.php?supprimer_hitg=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['id']); ?></td>
<td><?php echo stripslashes($donnees['chanteur']); ?></td>
<td><?php echo stripslashes($donnees['chanson']); ?></td>
<td><?php echo stripslashes($donnees['votes']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
}
?>
</table>
<br>
<p><a href="protection.php">Retour a la partie moderateur</a></p>
</body>
</html>

Ca donne ca?
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
Re-bonjour tout le monde,
je viens de remarquer que les liens ne fonctionne tjrs po il rejoute des slashs mais ce qui est bizare c'est que les liens sur liste_hitg.php marche mais nul part ailleur alors que leur utilité principal est sur une autre page et pas sur ma page d'administration...
0