Traitement formulaire, erreur sql

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 : Traitement formulaire, erreur sql

par albat » 17 janv. 2009, 19:40

Il en existe certainement.
Faudrait demander à :google:... ;)

par Stef » 17 janv. 2009, 19:35

ok, je comprends!

quant aux benchmarks dont tu parles (l'a fallu que je cherche ce que ça signifie en informatique...), y a aucun test qui a été fait pour mesurer les différences de performances?

par albat » 17 janv. 2009, 19:29

Le point est un opérateur de concaténation.

Lorsque le code suivant s'exécute :
echo 'Hello' . ' ' . 'world !';
l'opération de concaténation est effectuée en premier
et son résultat Hello world ! est stocké dans une variable en mémoire.
Puis le contenu de cette variable est affiché par la fonction echo().

La virgule est un séparateur de paramètres.

orsque le code suivant s'exécute :
echo 'Hello' , ' ' , 'world !';
la fonction echo() va afficher Hello, puis l'espace, puis World !
À l'écran, la phrase s'affiche comme si elle avait été concaténée,
mais il n'y a eu aucune opération de cette nature
et aucune allocation mémoire n'a été requise.

Plus économique, donc.

Reste à vérifier avec des benchmarks le réel impact de cette méthode... ;)

par Stef » 17 janv. 2009, 18:33

J'me rends compte que je m'étais à moitié posé ces questions, j'avais bien été interpelé par l'histoire des ' et des ", ainsi que par l'opération de concaténation mais sans pour autant approfondir suffisamment le sujet... merci pour vos réponses, ça m'amène à apprendre de nouvelles choses! :wink:

Encore une question:
$var = 'world';
echo 'Hello'.$var; // affiche : Hello world --> MIEUX
echo 'Hello',$var; // affiche : Hello world --> LE TOP !
Pourquoi la virgule est mieux que le point? :?

par albat » 17 janv. 2009, 16:44

Histoire de compléter :
$var = 'world';
echo 'Hello $var'; // affiche : Hello $var  --> MAL
echo "Hello $var"; // affiche : Hello world --> PASSABLE
echo "Hello".$var; // affiche : Hello world --> BIEN
echo 'Hello'.$var; // affiche : Hello world --> MIEUX
echo 'Hello',$var; // affiche : Hello world --> LE TOP !

par Ryle » 17 janv. 2009, 16:30

C'est surtout pour plus de lisibilité (et donc de maintenabilité) et éviter les risques d'erreur.

En effet, une variable placée entre guillemets (") est interprétée, alors qu'entre apostrophes (') elle ne le sera pas :
$var = 'world';
echo "Hello $var"; // affiche : Hello world
echo 'Hello $var'; // affiche : Hello $var
En sortant les variables des chaines, tu rends ton code plus lisible grace à la coloration syntaxique (de ton éditeur ou même de ce forum), et tu limites le risque d'erreur ci-dessus :)

par Stef » 17 janv. 2009, 16:15

ok merci! :)

Mais juste une question: quel et l'intérêt?

par albat » 17 janv. 2009, 15:12

Ça signifie quoi extraire les chaînes? en tous cas c'est en concaténant que ça se fait.... oui?
Oui, oui, c'est bien une concaténation.
Extraire les variables, ça revient à ça :
$req = "DELETE FROM mb_tunes WHERE tune = '$tune' AND refid_user = '$refid'";          // variables non extraites

$req = "DELETE FROM mb_tunes WHERE tune = '".$tune."' AND refid_user = '".$refid."'";  // variables extraites  
La 2e écriture est recommandée.

par Stef » 17 janv. 2009, 14:09

Ha ben oui, j'm'en doute que c'est pas juste un détail.... aussi j'vais corriger mes fichiers

Merci pour l'info!

par blof » 17 janv. 2009, 12:18

Bonjour,

fais attention aux injections SQL.

Pour les éviter :
$refid = mysql_real_escape_string($_POST['user']);
( c'est pas juste un détail ;) )

par Stef » 17 janv. 2009, 11:14

Mdr, ben voui j'm'en suis rendu compte quand d'un coup j'ai eu un déclic avec ce * qui me chiffonnait, et du coup... ben fa marfe!: :shock:

Merci Albat!!

Ça signifie quoi extraire les chaînes? en tous cas c'est en concaténant que ça se fait.... oui?

par albat » 17 janv. 2009, 10:01

La syntaxe SQL est DELETE FROM et non DELETE * FROM.
$req = "DELETE * FROM mb_tunes WHERE tune = '$tune' AND refid_user = '$refid'"; // Non
$req = "DELETE FROM mb_tunes WHERE tune = '$tune' AND refid_user = '$refid'";    // Oui
Simultanément, profites-en pour extraire tes variables des chaînes :
$req = "DELETE FROM mb_tunes WHERE tune = '$tune' AND refid_user = '$refid'";
$req = "DELETE FROM mb_tunes WHERE tune = '".$tune."' AND refid_user = '".$refid."'";  

Traitement formulaire, erreur sql

par Stef » 17 janv. 2009, 06:25

Bien l'bonjour!

J'ai besoin d'un peu d'aide pour résoudre une question qui me parait énigmatique... je traite un formulaire avec le code ci-dessous:
$refid = $_POST['user'];
				$tune = $_POST['del_tunes'];
				$req = "DELETE * FROM mb_tunes WHERE tune = '$tune' AND refid_user = '$refid'";
                mysql_query ($req) or die(mysql_error());
Et j'ai cette erreur:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM mb_tunes WHERE tune = '02-Roller-Skates.mp3' AND refid_user = '5'' at line 1
Je ne vois vraiment pas ce qui cloche dans mon code... Vous avez une idée? merci grandement :)