2011-05-08 4 views
0

Je souhaite enregistrer le code HTML dans la base de données MySQL. Il n'y a pas de problème quand je le sauvegarde, mais j'ai un champ dans lequel je veux mettre une valeur.Utilisation de la variable PHP dans la base de données

<input type="text" size="18" value="$user" /> 

Quand je le récupérer à partir de la base de données et de l'envoyer au navigateur, la valeur du champ texte n'est pas la valeur de la variable $user.

Voici mon code php pour enregistrer:

function SaveHTML(){ 
    global $cn; 
    $content=mysql_real_escape_string($_POST["html"],$cn); 
    $url=mysql_real_escape_string("http://www.google.com/",$cn); 
    mysql_query("Insert into HTML(content,URL) values('$content','$url')"); 
} 
+3

N'utilisez pas mysql_query en concaténant du code SQL avec des données lues sur le réseau. C'est un foyer pour les injections SQL. Utilisez 'prepare' à la place: http://php.net/manual/de/pdo.prepared-statements.php – ceving

+0

Vous devriez utiliser des instructions préparées (PHP PDO) au lieu de mysql_real_escape_string. http://php.net/manual/fr/book.pdo.php. EDIT: dang, m'a obtenu par 29 secondes, je vais laisser le lien PDO pour référence. – PiZzL3

Répondre

3

Vous devez faire écho à la valeur pour l'afficher:

<input type="text" size="18" value="<?php echo htmlspecialchars($user, ENT_QUOTES, 'UTF-8'); ?>" /> 

Comme vous pouvez voir que j'ai également utilisé htmlspecialchars() pour prévenir contre XSS attacks.

Veuillez également ne pas utiliser les fonctions mysql_* pour nouveau code. Ils ne sont plus maintenus et la communauté a commencé le deprecation process. Voir le red box? Au lieu de cela, vous devriez en apprendre davantage sur prepared statements et utiliser soit PDO ou MySQLi. Si vous ne pouvez pas décider, this article aidera à choisir. Si vous voulez apprendre, here is a good PDO tutorial.

Une autre chose que je remarque est que vous utilisez le mot-clé global. Il serait préférable d'injecter la connexion en tant que paramètre dans la fonction:

function SaveHTML($cn){ 
    $content=mysql_real_escape_string($_POST["html"],$cn); 
    $url=mysql_real_escape_string("http://www.google.com/",$cn); 
    mysql_query("Insert into HTML(content,URL) values('$content','$url')"); 
} 

Edit (mort):

Ce que je voulais le folllowing:

Supposons que vous avez un varivle $user et la pièce du code HTML comme ci-dessous:

$html = <<<'Death' 
<input type="text" size="18" value="$user" /> 
Death; 

Si je sauve cette variable ($html) à une base de données et dans une autre page j'envoyer ce code html pour l'utilisateur, que devrais-je faire au $user en code html avoir la valeur de $user en deuxième page?

Réponse: J'ai sauvé la chaîne (telle quelle) à la base de données, puis utilisé la fonction eval() pour remplacer le $user avec sa valeur!

EDIT PeeHaa

Notez que dans la plupart cas, il est considéré comme une mauvaise pratique d'avoir HTML dans votre base de données (à moins que vous). Je ne suis pas aussi heureux avec eval() choses (ce qui est toujours une mauvaise pratique).

0

Vous devez préciser que son code PHP.

<input type="text" size="18" value="<?php echo $user ?>" /> 
+1

Vous devrez également 'eval()' la chaîne. –

+0

Bien, j'ai mal lu la question. – JJJ

0

Si vous souhaitez enregistrer la valeur de l'entrée, vous devez d'abord lui donner un nom:

<input name="user" type="text" value="<?php echo $user?>" /> 

maintenant pour le récupérer et l'enregistrer dans votre base de données que vous devez obtenir de la variable POST

$content = mysql_real_escape_string($_POST['user']); 

vous obtiendrez la valeur dont vous avez besoin.

1

vous pouvez utiliser des balises personnelles et après avoir lu la base de données remplacer cette étiquette avec la variable php
comme ceci:

$html = '<input type="text" class="class" value="{user}">'; 
save $html to database 
$gethtml = get $html from database ; 

$last_html = str_replace('{user}',$user,$gethtml); 
Questions connexes