2010-12-14 4 views
0

Je ne sais pas pourquoi cela m'a bloqué. J'ai le code suivantEnvoyer une barre oblique à travers mysql

$website = "http://www.google.com"; 
$name = "Person"; 

if(!empty($website) { 
    $name = "[url=$website]$name[/url]"; 
} 

Puis j'essaye d'insérer cela dans mysql. J'ai essayé d'ajouter mysql_real_escape_string à $ website et $ name (après l'instruction if), en pensant que "/ url" pourrait aussi causer des problèmes.

$name  = mysql_real_escape_string($name); 

Toujours pas de chance cependant. Aucun conseil? Qu'est-ce que je rate? Il me donne cette erreur

"Parse error: syntax error, unexpected '/', attendant T_STRING ou T_VARIABLE ou T_NUM_STRING"

+1

Quel est le problème? Ce qui se produit? –

+0

'mysql_real_escape_string' devrait protéger la chaîne indépendamment de ce qui se passe. Si vous avez encore des problèmes, cela peut être une application erronée de mysql_real_escape_string (comment l'appelez-vous?) Ou un script mal interprété les données correctes stockées dans la base de données (comment le lisez-vous?). –

+0

Pourriez-vous fournir la requête SQL et l'erreur que vous obtenez? – Catalin

Répondre

5

essayer

if(!empty($website)) { 
    $name = "[url={$website}]{$name}[/url]"; 
} 

utilisez,

mysql_real_escape_string ($name); 
+0

+1: D'oh, j'aurais dû voir ça venir. Bien fait! –

+0

Merde, ça a marché. Pouvez-vous me dire pourquoi? Qu'ont fait les parenthèses? – Andelas

+1

Eh bien, la parenthèse entre guillemets indique php sur les variables. Cela signifie que les moteurs zend le traitent comme une variable PHP et incluent sa valeur. Parfois, sans parenthèses, ça gâche avec d'autres choses. – Nik

0

Il n'y aura aucun problème du tout. Lors de la lecture de la base de données, vous devez ensuite mettre stripslashes() autour de votre valeur.
par exemple.

$query = "SELECT field FROM table"; 
$row = mysql_fetch_array(mysql_query($query)); 

echo(stripslashes($row['field'])); 

Et votre sortie sera la même comme votre entrée.

1

Ceci est un problème de syntaxe PHP. L'analyseur pense $ nom [est le début d'une référence de tableau que vous devez ajouter des bracelets frisés pour dire à l'analyseur où le nom de la variable commence et se termine: "[url = {$ website}] {$ name} [/ url] "

0

Assurez-vous que vous citez les valeurs que vous envoyez dans une requête, comme suit:

$sql = "INSERT INTO table (column) VALUES ('$value')"; 

Quelle que soit la valeur de $ est transmis dans la requête. Si vous omettez les citations, de mauvaises choses peuvent arriver même si vous utilisez mysql_real_escape_string(). A l'intérieur des chaînes, les barres obliques n'ont aucune signification particulière dans MySQL, et donc mysql_real_escape_string() les laisse intactes. Ce n'est pas un bug, mais le comportement correct et documenté. Fondamentalement, vous devez citer toutes les valeurs dans votre requête. Cependant, la meilleure solution IMHO consiste à utiliser PDO et ses requêtes paramétrées à la place de l'API mysql_XXX. C'est un peu plus compliqué (pas grand chose), et cela vous permet de passer des paramètres dans une requête via un tableau associatif, en faisant tous les échappements et les citations dont vous avez besoin pour vous.

0

Mettez-vous des guillemets autour de la valeur que vous voulez insérer? Cela fonctionne

INSERT INTO table_name (column_name) 
VALUES ('[url=$website]http://www.google.com[/url]') 

Cela échouera

INSERT INTO table_name (column_name) 
VALUES ([url=$website]http://www.google.com[/url]) 

Alors vous pourriez avoir en vous php

$query = "INSERT INTO table_name (column_name) VALUES ('$name')"; 
// DO MYSQL_QUERY 
Questions connexes