Suicide par PHP(pg_escape_string-PDO) même combat

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 : Suicide par PHP(pg_escape_string-PDO) même combat

par Maitrepylos » 18 janv. 2007, 12:43

En désespoir de cause, j'ai contacté le mainteneur des binaires Debian que j'utilisai.

Après plusieurs mail et log, voici la conclusion
Il semblerait que le problème vienne d'un conflit de version des librairies postgre.

A savoir : mes paquets sont compilés par rapport aux versions de librairies de Debian Sarge. Celle de Ubuntu sont plus récentes et ne contiennent pas les mêmes fonctions avec les mêmes prototypes, et au final pas les mêmes symboles.

La solution serait de recompiler mes paquets par rapport aux librairies de votre système. Ce problème est assez rare, mais là... pas de chance!
Solution plus adéquate pour moi, retour à la 5.1 avec les librairies Ubuntu.

Peut-être qu'au mois d'Avril.......


Merci de ton aide

MaitrePylos

par Maitrepylos » 17 janv. 2007, 12:19

Ben oui,

J'ai un serveur de production, et un de test.

Les deux ayant la même configuration, mais le serveur de production ne pouvant être plus longtemps inactif, j'ai bien du palier en attendant à une solution provisoire.

Donc maintenant tu dois te fier que sur mon pc, j'ai le même serveur sauf que les magic_quote sont à OFF.

et que je fais mes test sur le serveur de test :)

par Ajoloca » 17 janv. 2007, 12:10

Re,
Il ne faut pas que les magic_quote soit activé, sinon ça plante.

N'oublie pas de redémarrer Apache après la modif
Je viens de regarder ton phpinfo() et les magic_quotes_gpc sont activées.

par Maitrepylos » 17 janv. 2007, 11:42

ben dés que j'arrive à une ligne de code de ce type.
$pdo->quote($civilite);
de nouveau il veut ouvrir le fichier.

C'est fou ça quand même

par Ajoloca » 17 janv. 2007, 11:28

Re,

Tu as essayé de voir avec $pdo->quote() ou pas ?

Si oui, as-tu isolé comme avant les lignes en cause ?

Si oui, sont-elles celles de $pdo->quote() ?

par Maitrepylos » 17 janv. 2007, 11:15

Bon clairement je ne peux plus utiliser de système d'échappement, la question est Pourquoi?

Quelles sont les possible cause à ce phénomène?

par Ajoloca » 17 janv. 2007, 10:49

Bonjour,

Si tu veux utiliser $pdo->exec() tu dois utiliser $pdo->quote() et c'est à ce moment que ça va planter.

par Maitrepylos » 17 janv. 2007, 10:03

bonjour,

je reviens à la charge.

j'ai tenter ceci :
$pdo->exec("parcivilite,parnom,parprenom,parlieunaissance,pardatenaissance) VALUES ('".$civilite."','".$nom."','".$prenom."','".$LieuNaissance."',$datenaissance)");
Mais cela n'insère rien, mais au moins cela ne me demande pas d'ouvrir un fichier!

par Maitrepylos » 16 janv. 2007, 16:10

donc, dés que j'arrive dans ce bloc
try {
   $stmt->bindParam(':civilite', $civilite);
   $stmt->bindParam(':nom', $nom);
   $stmt->bindParam(':prenom', $prenom);
   $stmt->bindParam(':LieuNaissance', $LieuNaissance);
   $stmt->bindParam(':datenaissance', $datenaissance);
   $stmt->execute();
} catch (PDOException $e) {
    die('Erreur ! : ' . $e->getMessage() . '<br />');
}
Il veut ouvrir un fichier, et non pas s'exécuter!

[edit]: je dois partir, a demain, merci de ton aide

par Maitrepylos » 16 janv. 2007, 16:04

Toujours pas.

Je vais commenter chaque ligne et défaire au fur et a mesure, pour voir ce qui déclenche la non interprétation.

par Ajoloca » 16 janv. 2007, 15:43

Re,

Non, mon premier exemple a des erreurs.

Avec le "prepare" il ne faut pas échapper les chaines de caractères (d'après la doc).
C'est justement le but de "prepare".

Alors reprends-le sans les $pdo->quote().
EDIT :
Il ne faut pas que les magic_quote soit activé, sinon ça plante.

N'oublie pas de redémarrer Apache après la modif

par Maitrepylos » 16 janv. 2007, 15:39

Pas mieux.

je pense que ton premier exemple est bon, il faut juste trouver pourquoi, il ne veut pas interpréter le code!

par Ajoloca » 16 janv. 2007, 15:29

Re,
Essaie comme ça
try {
	$pdo = new PDO('pgsql:dbname=******* host=localhost','*****','******');
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
	die('Erreur ! : ' . $e->getMessage() . '<br />';
}

$sql="INSERT INTO participant (parcivilite,parnom,parprenom,parlieunaissance,pardatenaissance) 
     VALUES ('" . $pdo->quote($civilite) . "','" . $pdo->quote($nom) . "','" .
        $pdo->quote($prenom). "','" . $pdo->quote($LieuNaissance) . "','" .
        $pdo->quote($datenaissance) . "')";
try {
   $pdo->exec($sql);
}
catch (PDOException $e) {
	die('Erreur ! : ' . $e->getMessage() . '<br />';
}
C'est sans trop de conviction, mais...

par Maitrepylos » 16 janv. 2007, 15:14

Oui, tout fonctionnent nikel.

En fait :

si je prend la méthode classique d'insertion
pg_query()
et que je n'utilise pas pg_escape_string(), cela fonctionne bien(mais cela suppose que magic_quote soit à On ).

Par contre je fais également des insertions, mais via une procédure stocké, et là cela ne me pose pas de problème.

Bienvenu dans mon monde :)

par Ajoloca » 16 janv. 2007, 15:07

Re,

Les autres fichiers avec extension .php, sont-ils pris en compte ou bien il te demande de les télécharger aussi ?