Aide avec un insert

  • confuzzled1234
  • Born
  • Born
  • No Avatar
  • Inscription: Fév 17, 2010
  • Messages: 1
  • Status: Offline

Message Février 17th, 2010, 12:08 pm

Salut à tous,

Im new to PHP et MySQL et ont été trébuchant dans des morceaux. Im pas bloqué sur ce que je pense que c'est un
problème stupide que je ne trouve pas la faute de l'. Tous Im essayant de faire est d'insérer quelques détails à ma base de données.

PHP Code: [ Select ]
$product = $_POST['Product'];
        $description = $_POST['Description'];
        $itemwanted = $_POST['Itemwanted'];
        $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES (". $product . "," . $_SESSION['ID'] . ",". $description . ",". $target_path . ",". $itemwanted . ")";
        echo "<br></br>";
        mysql_query($query,$link) or die("Insertion Failed:" . mysql_error());
  1. $product = $_POST['Product'];
  2.         $description = $_POST['Description'];
  3.         $itemwanted = $_POST['Itemwanted'];
  4.         $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES (". $product . "," . $_SESSION['ID'] . ",". $description . ",". $target_path . ",". $itemwanted . ")";
  5.         echo "<br></br>";
  6.         mysql_query($query,$link) or die("Insertion Failed:" . mysql_error());


et tous je serai de retour est:

Insertion échouée: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité de Racket, images/990335249.jpg, Ball) à la ligne 1.

Quelqu'un peut-il nous éclairer?

Merci

Matthew
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Février 17th, 2010, 12:08 pm

  • devilwood
  • Silver Member
  • Silver Member
  • Avatar de l’utilisateur
  • Inscription: Nov 18, 2007
  • Messages: 429
  • Status: Offline

Message Février 24th, 2010, 9:02 pm

Hey Matt,

Le mieux est d'aller de l'avant et placez toutes vos données en variables de sorte que vous pouvez faire des requêtes SQL sûr et plus facile à déboguer. La valeur pour les variables peuvent avoir des caractères qui ne sont pas autorisés dans la colonne de votre type MySQL ou la valeur est prise de la requête échouera. Bien, je peux juste vous dire au revoir requête est erronée...vous avez besoin de guillemets simples autour de vos valeurs
Code: [ Select ]

$query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES (". $product . "," . $_SESSION['ID'] . ",". $description . ",". $target_path . ",". $itemwanted . ")";

// this essentially makes the following query if you change the variables to their data


$query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES (WidgetXYZ,3,item details made in USA,file/path/to.jpg,item_wanted_value)";


// you need single quotes

$query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('". $product . "','" . $_SESSION['ID'] . "','". $description . "','". $target_path . "','". $itemwanted . "')";
  1. $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES (". $product . "," . $_SESSION['ID'] . ",". $description . ",". $target_path . ",". $itemwanted . ")";
  2. // this essentially makes the following query if you change the variables to their data
  3. $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES (WidgetXYZ,3,item details made in USA,file/path/to.jpg,item_wanted_value)";
  4. // you need single quotes
  5. $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('". $product . "','" . $_SESSION['ID'] . "','". $description . "','". $target_path . "','". $itemwanted . "')";


En outre, vérifiez votre variable PATH cible telle qu'elle mai contenir des caractères qui ne sont pas acceptables pour la requête ou de la base de données. Ce qui suit mai éclaircir certaines choses.

Code: [ Select ]
function inject_protect($value)
{
$v = mysql_real_escape_string($value);
return $v;
}
$product = inject_protect($_POST['Product']);
$description = inject_protect($_POST['Description']);
$itemwanted = inject_protect($_POST['Itemwanted']);
$sid = inject_protect($_SESSION['id']);


$query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('$product','$sid','$description','$target_path','$itemwanted')";
  1. function inject_protect($value)
  2. {
  3. $v = mysql_real_escape_string($value);
  4. return $v;
  5. }
  6. $product = inject_protect($_POST['Product']);
  7. $description = inject_protect($_POST['Description']);
  8. $itemwanted = inject_protect($_POST['Itemwanted']);
  9. $sid = inject_protect($_SESSION['id']);
  10. $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('$product','$sid','$description','$target_path','$itemwanted')";
  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Mar 12, 2007
  • Messages: 6228
  • Loc: South-Africa
  • Status: Offline

Message Février 25th, 2010, 5:48 am

devilwood a écrit:
Code: [ Select ]
function inject_protect($value)
{
$v = mysql_real_escape_string($value);
return $v;
}
$product = inject_protect($_POST['Product']);
$description = inject_protect($_POST['Description']);
$itemwanted = inject_protect($_POST['Itemwanted']);
$sid = inject_protect($_SESSION['id']);


$query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('$product','$sid','$description','$target_path','$itemwanted')";
  1. function inject_protect($value)
  2. {
  3. $v = mysql_real_escape_string($value);
  4. return $v;
  5. }
  6. $product = inject_protect($_POST['Product']);
  7. $description = inject_protect($_POST['Description']);
  8. $itemwanted = inject_protect($_POST['Itemwanted']);
  9. $sid = inject_protect($_SESSION['id']);
  10. $query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('$product','$sid','$description','$target_path','$itemwanted')";

Je ne comprends pas pourquoi vous le faites de cette façon, vous êtes ccreating une fonction, il suffit d'appeler une autre fonction, et vous déclarez des variables qui ont déjà été déclarée, vous pouvez faire tout cela en une ligne:
Code: [ Select ]
$query = "INSERT into Product (Product,UserID,Description,Picture,Itemwanted) VALUES ('" . mysql_real_escape_string($_POST["Product"]) . "','" . mysql_real_escape_string($_POST["id"]) . "','" . mysql_real_escape_string($_POST["description"]) . "','" . mysql_real_escape_string($target_path) . "','" . mysql_real_escape_string($_POST["Itemwanted"]) . "')";
Let's leave all our *plum* where it is and go live in the jungle ...
  • devilwood
  • Silver Member
  • Silver Member
  • Avatar de l’utilisateur
  • Inscription: Nov 18, 2007
  • Messages: 429
  • Status: Offline

Message Février 25th, 2010, 8:10 am

Youre droite.

Mon point était des fins de débogage et effectivement vous êtes variables ne sont pas déclarées. Youd obtenir effectivement une erreur en disant AVIS ces variables ne sont pas déclarés, mais ce n'est pas une cause grosse affaire que le signalement est désactivé sur la plupart des serveurs de production dans leur configuration d'Apache ou autre serveur à l'aide theyre. Donc, si vous définissez les valeurs POST à une variable, vous pouvez les echo pour voir exactement ce que les données ressemblent ou je devine que vous pourriez simplement votre variable echo $ query pour voir si les valeurs de variation du SQL.

La fonction est juste de faire échapper les valeurs plus facile. En fin de compte, vous pourriez faire plus de nettoyage à l'intérieur du inject_protect fonction comme parage, etc et ensuite effectivement mis cette fonction dans un fichier inclus que vous joindre à tous vos fichiers PHP.

Faites-moi savoir si cela est utile et si vous avez d'autres questions.
  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Mar 12, 2007
  • Messages: 6228
  • Loc: South-Africa
  • Status: Offline

Message Février 25th, 2010, 11:53 pm

Okay cool, maintenant je obtenir pour lesquelles vous utilisez la fonction, qui fait beaucoup de sens...

@ confuzzled1234 - Le seul problème avec votre requête est que certaines valeurs THT aller dans une base de données ont besoin d'avoir des guillemets autour d'eux parce qu'il est une valeur chaîne. Ceci est valable pour tout un peu de types de colonnes par exemple: VARCHAR, TEXT, CHAR, BLOB etc

Rappelez-vous aussi que, parfois, vos noms de colonne pourrait être MySql mots réservés et que, si une colonne est un mot réservé, vous n'avez pas nécessairement à chnge son nom, vous pourriez juste "fuite" en utilisant la touche `(qui est une clé gauche du numéro un (1) de manière par exemple

Code: [ Select ]
CREATE TABLE `table`(
`column` INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
`data` VARCHAR(255) NOT NULL DEFAULT 'Hello World'
);
  1. CREATE TABLE `table`(
  2. `column` INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
  3. `data` VARCHAR(255) NOT NULL DEFAULT 'Hello World'
  4. );


Dans cet exemple, vous pouvez voir que les mots "table", "colonne" et "données" sont des mots réservés, mais ils sont échappés ne seront donc pas causer d'erreurs.
Let's leave all our *plum* where it is and go live in the jungle ...

Afficher de l'information

  • Total des messages de ce sujet: 5 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 218 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC