Page 1 sur 1

Problème INSERT INTO

Posté : 03 avr. 2012, 09:23
par Fredouzz
Bonjour à tous,

Je rencontre actuellement un problème sur une insertion de données depuis PHP vers un serveur iSeries. En effet, dans le code suivant il semblerait qu'il y ait un problème au niveau de l'insertion des variables $lignes[0], $lignes[1]... Ces données proviennent d'un formulaire pré-rempli.

Voici mon code :
<?php


	
if(isset($_POST['sujet']))      $sujet=$_POST['sujet'];
else      $sujet="";	

$date_msg = date("Ymd");

// On passe le message dans $msg
$msg=$_POST['msg'];

// On saute une ligne tous les 30 caractères
$msg_ok = wordwrap($msg, 30, "<br />\n");

// On spécifie que chaque ligne correspondra à une ligne d'un tableau et ceux à chaque retour à la ligne
$lignes = explode("\n", $msg_ok);

// Pour chaque éléments retournés on va faire une requête
foreach($_POST['envoi_msg'] as $ID_VRP)

//Connexion As400
	$server = '192.168.150.1';
	$dsn = 'as400';  
	$user = 'fco';
	$passwd = 'pouet';
	$conn = odbc_connect($dsn,$user,$passwd);

// Insertion du message dans MS101
 	$insert_msg = "INSERT INTO TEST.MS101P(
			MBSUJ,
			MBMS1,
			MBMS2,
			MBMS3,
			MBMS4,
			MBMS5,
			MBBTQ,
			MBDAT,
			MBDEV) VALUES
		(
				'$sujet',
				'$lignes[0]',
				'$lignes[1]',
				'$lignes[2]',
				'$lignes[3]',
				'$lignes[4]',
				'$ID_VRP',
				'$date_msg',
				'$date_msg'
		)";
		
$as400_insert_msg = odbc_exec($conn,$insert_msg);
L'insertion fonctionne très bien sans les $lignes[x]. Qu'est ce que je rate je n'arrive pas à m'y retrouver ! #-o

Merci de vos réponses !

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 09:33
par albat
Essaie avec cette syntaxe.
$insert_msg = "INSERT INTO TEST.MS101P(
                       MBSUJ,
                       MBMS1,
                       MBMS2,
                       MBMS3,
                       MBMS4,
                       MBMS5,
                       MBBTQ,
                       MBDAT,
                       MBDEV)
             VALUES(
                    '".$sujet."',
                    '".$lignes[0]."',
                    '".$lignes[1]."',
                    '".$lignes[2]."',
                    '".$lignes[3]."',
                    '".$lignes[4]."',
                    '".$ID_VRP."',
                    '".$date_msg."',
                    '".$date_msg."')";

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 09:42
par Mazarini
Tu devrais utiliser les fonctions odbc_errormsg() et odbc_error() pour controler la bonne exécution.
En cas d'erreur, affiche le message d'erreur et le code SQL. Tu pourras certainement voir le problème immédiatement. Dans ton cas "...$ligne[0]..." ne doit pas se comporter comme tu le penses (d'ou la solution proposée ci-dessus).

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 10:05
par Fredouzz
Merci pour vos réponses. Cette syntaxe ne fonctionne pas non plus.

J'ai regardé les logs httpd et voici l'erreur retournée :

Code : Tout sélectionner

SQL error: [unixODBC], SQL state S1000 in SQLExecDirect .... on line 51
La ligne 51 correspond à la dernière instruction
$as400_insert_msg = odbc_exec($conn,$insert_msg);

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 10:43
par Fredouzz
J'ai avancé un peu et il semblerait que les variables provenant de $lignes[x] ne soit pas reconnues comme STRING. Y-a-t-il un moyen pour convertir tout le tableau (toutes les cellules du tableau) en string pour que l'insertion fonctionne ?

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 11:29
par moogli
affiche le contenue de la requete.

PHP est un langage dit peu typé donc une une chiffre c'est une chaîne et vice versa !

vérifier ce qu'il y a dans tes variables avant de les utiliser.
Est ce qu'elle existe ?

quand a ton code que vient faire le foreach ? ($_POST['envoi_msg' c'est un tableau ?)

ajout un var_dump($lignes); avant le foreach

ajoute un var_dump($insert_msg ); dans le foreach

@+

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 13:34
par Mazarini
Comme dit précédemment, tu devrais utiliser les fonctions odbc_errormsg() et odbc_error() pour controler la bonne exécution et afficher le message d'erreur ainsi que l'ordre SQL. L'affichage de la requete SQL permet de vérifier qu'elle correspond bien à ce que tu veux générer.

Il est possible que ODBC interprete 2 simples quotes comme un caractère spécial (pour $ligne[4] qui est vide). A moins que la zone ne puisse pas être vide. Essayes à tout hasard de mettre un blanc lorsque $ligne[x] est vide.

Re: Problème INSERT INTO

Posté : 03 avr. 2012, 15:44
par Fredouzz
Bon j'ai trouvé !
En fait je ne cherchais pas au bon endroit. Merci moogli! j'ai donc fait un var_dump($lignes); de mes variables et je me suis aperçu que la 1ère ligne était composée de 34 caractères alors que je le l'avais configuré pour 30.
L'erreur se trouvait dans le wordwrap, j'ai donc remplacé :
$msg_ok = wordwrap($msg, 30,< \br> "\n");
par
$msg_ok = wordwrap($msg, 30, "\n");
Après ça la découpe était ok et l'insertion également.

Merci pour le var_dump ça m'a permis de tilter sur le nombre de caractères !

En tout cas merci pour vos réponses.