PATH_INCLUDE undefined constant

Répondre
jackbocar
le 21/01/2010 à 16:40
jackbocar
Bonjour,

Comment puis-je règler ce problème ?

Je suppose que c'est dans php INI.

Notice: Use of undefined constant PATH_INCLUDE - assumed 'PATH_INCLUDE'

Merci

Jack Bocar
jackbocar
le 21/01/2010 à 18:51
jackbocar
Je fais comme ceci et cela ne fonctionne pas

<?php
define('PATH_HTTP', 'http:www.monsite-net');
define('PATH_INCLUDE', 'C:/www/www.monsite-net');
?>


Autre chose :

Je ne sais pas comment on construit un code UPDATE avec une méthode préparée. Pouvez-vous corriger ma copie.

<?php
$stmt = $dbh->prepare('UPDATE mabase SET (col1, col2, col3) VALUES (:col1, :col2, :col3)');
$stmt->bindParam(':col1', $_POST['col1']);
$stmt->bindParam(':col2', $_POST['col2']);
$stmt->bindParam(':col3', $_POST['col3']);
$stmt->execute();
?>


Merci

Jack Bocar
jackbocar
le 21/01/2010 à 19:23
jackbocar
Pour mon code UPDATE, ceci ne fonctionne pas plus :

<?php
$col2 = col2("Y-m-d H:i:s");
$stmt = $dbh->prepare('UPcol2 commanderies_A SET id, date, col3, col4, col5, col6 WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->bindParam(':date', $date);
$stmt->bindParam(':col3', $col3);
$stmt->bindParam(':col4', $col4);
$stmt->bindParam(':col5', $col5);
$stmt->bindParam(':col6', $col6);
$stmt->execute();
?>


Jack Bocar
LA GLOBULE
le 22/01/2010 à 00:34
LA GLOBULE
Quand tu fais ton define define('PATH_INCLUDE', 'C:/www/www.monsite-net'); tu as toujours l'erreur undefined constant ?

Si oui, fais tu bien ton define avant d'appeler la constante ?
moogli
le 22/01/2010 à 09:04
moogli
pour la reque SQL
UPcol2 commanderies_A SET id, date, col3, col4, col5, col6 WHERE id = :id

UPcol2 je ne pense pas que ça existe en SQL :)

la requete c'est UPDATE table SET value=xxx where truc=machin

dans la doc de mysqli::prepare y a

Note: Les marques sont autorisées uniquement dans certaines endroits des requêtes SQL. Par exemple, elles le sont dans la liste VALUES() d'une requête INSERT (pour spécifier les valeurs des colonnes pour une ligne), ou dans une comparaison d'une clause WHERE pour spécifier une valeur de comparaison.
Cependant, elles ne sont pas autorisées pour les identifiants (comme les noms de tables ou de colonnes), dans une liste de sélection où les noms des colonnes doivent être retournés par une requête SELECT, ou pour spécifier un opérateur tel que le signe égal (=). La dernière restriction est nécessaire, car il est impossible de déterminer le type de paramètre. Il n'est pas non plus autorisé de comparer les marqueurs avec NULL par ? IS NULL. En général, les paramètres ne sont autorisés que dans les requêtes DML ("Data Manipulation Language") et non dans les requêtes DDL ("Data Definition Language").

cela m'insite à penser que ce n'est pas bon pour l'update. Ceci dit je ne suis pas un spécialiste de mysqli je ne l'utilise pas (jene vois pas l'interet ;) )

@+
Il en faut peu pour être heureux !!!!!
jackbocar
le 22/01/2010 à 15:30
jackbocar
Bonjour moogli

Ca fonctionne comme ceci, mais j'ai des problèmes lorsque j'envoie une information avec des guillemets comme "ceci" at pas du tout lorsqu'ils son comme cela « qui ne sont pas ceux-ci » et j'ai les mêmes problèmes avec les mises à jour.

<?php
$sql = $dbh->exec('UPDATE matable SET date="'.$date.'", nom="'.$_POST['nom'].'", dep="'.$_POST['dep'].'", infos="'.$_POST['infos'].'" ouvert="0", WHERE id="'.$_POST['id'].'"');
?>




Avec ce code, aucun problème si j'envoie des infos avec des guillemets comme "ceci"
<?php
$sql = 'INSERT INTO matable (ouvert, nom, dep, infos) VALUES (:ouvert, :nom, :dep, :infos)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':ouvert', $_POST['ouvert']);
$stmt->bindParam(':nom', $_POST['nom']);
$stmt->bindParam(':dep', $_POST['dep']);
$stmt->bindParam(':infos', $_POST['infos']);
$stmt->execute();
?>


Donc, je me dis, que si ça fonctionne bien avec ce code INSERT, le même code UPDATE devait aussi bien fonctionner avec des guillemets comme "ceci".

<?php
$stmt = $dbh->prepare('UPDATE matable SET (ouvert, nom, dep, infos) VALUES (:ouvert, :nom, :dep, :infos) WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->bindParam(':ouvert', $ouvert);
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':infos', $infos);
$stmt->execute();
?>


Jack



Bonjour LA GLOBULE

Voilà comme est réalisé mon DEFINE
<?php
/* ------------------------------------------ */
define('PATH_HTTP', 'http:www.monsite-net');
define('PATH_INCLUDE', 'C:/www/www.monsite-net');
/* ------------------------------------------ */
?>


Y a t'il une autre façon de faire ?

Pour le moment j'ai ajouté cette ligne à mon PHP.INI
include_path = "c:\php-5\pear"

Ca a l'air de fonctionner maintenant.

Jack
moogli
le 26/01/2010 à 16:19
moogli
pour l'update :
je ne suis pas certain que mysqli supporte l'update préparé.
ton problème vient du fait que tu n'échappe aucune caractère, (alors que le prépare de mysqli doit le faire (bien que je ne le sache pas).

essai avec mysql_real_escape_string($var) dans ta requete afin d'échapper les " et autre truc du genre !

pour le define c'est bien comme cela que l'on définit une constante. ceci dit c:\php-5\pear ne sera pas utilisé dans un contexte web (peu de change que tu puisse inclure des fichiers en dehors du www).

ce que tu fait est correct dans le sens ou s'agit d'ajouter un "librairie" à php (par exemple mysql, msql etc).

@+
Il en faut peu pour être heureux !!!!!
LupusMic
le 27/01/2010 à 01:45
LupusMic
Remplace localhost par 127.0.0.1 (ou localhost.) : c'est un bogue connu de PHP.

MySQL supporte évidement les requêtes préparées, même avec update. Le système de requêtes préparées est une surcouche des requête, indépendamment de la sémantique de la requête).

Il est inutile, et même éventuellement dangereux d'échapper les données soumises à bindParam : le mécanisme de requêtes préparées le gère.

Pour la constante inconnue, je pencherais pour un include qui n'est pas vraiment inclus. Émets une erreur après la définition des constantes. Ça devrait nous dire si le fichier qui contient les définitions des constantes est vraiment interprété, ou non.

(Et j'aime pas PDO, comme ça c'est dit)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
moogli
le 27/01/2010 à 11:53
moogli
bon ben j'aurais appris un truc, mais ça écroule toute ma théorie.

Par contre dans le même optique, peut être que les données sont déja échappées par PHP, ce qui fait que l'échappement de mysqli fait des \\" au lieu de \" et ça met de le brin dans la requete.

Bref faut voir si tu a un message d'erreur :)

@+
Il en faut peu pour être heureux !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours