probleme apres migration

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 : probleme apres migration

Re: probleme apres migration

par moogli » 12 avr. 2011, 00:34

le type de table est assez suspect Table de type Memory il n'y aucune garantie de pérennité des données avec ce type de table.

ensuite, après test il s'avère qu'effectivement rien de n'est inséré dans la table.
Pourquoi ?
c'est assez simple:
- La requête d'insertion n'est effectuée que si $forcode == 'C' (ligne 64, enfin environ c'est le dernier if)
- $forcode est définie ligne 45 avec $forcode = substr ($enr, 116, 1);, il s'agit donc du 116 ème caractère de la ligne, hors (d'après ton exemple de fichier) il n'y a pas de caractère 116 la ligne la plus longue trouvé possède 99 caractères (avec strlen)
- le "problème" est donc dû au code ;)
- Je ne comprend même pas comment ce script a pu fonctionner (sachant que la longueur des champs n'est pas fixe, pour au moins le nom de la localité)
- vu le format de donnée utiliser les fonctions csv serait une bonne idée !

Perso je ferais ça
<html>
    <head>
        <style type="text/css">
            .erreurSQL {
                border: solid 2px red;
                margin: 5px;
                width: auto;
                padding: 3px 5px;
                font-weight: bold;
                color: red;
}
        </style>
    </head>
    <body>
<?php
error_reporting(E_ALL|E_STRICT);

$host = 'localhost';
$user = 'root';
$password = 'yyRu2TKEvyYpzFLK';
$database = 'test';
mysql_connect($host, $user, $password);
mysql_select_db($database);

$date = gmdate("Y-m-d");
$del   = gmdate("Y-m-d", mktime(0,0,0,date("m"),date("d")-370,date("Y")));
echo "Suppression des expedition anterieures au $del";
echo '<br />';
$sql = 'delete from histo where date < \''.mysql_real_escape_string($del).'\'';
$r = mysql_query ($sql);
if ($r === false){
    echo '<p class="erreurSQL">Erreur SQL ';
}
$file = file('netexp.txt');
$requete = 'insert into histo
    (codecli,date, recep,indice,desti,dept,ville,nbcolis,situation,datesituation,dateretour,reference,urlemarge,`comment`)
    values ';
foreach($file as $line){
    //
    list($codecli,$datel,$recep,$indice,$desti,$dept,$ville,$nbcolis,$situation,$datesituation,
            $dateretour, $reference, $urlmarge, $comment) = str_getcsv($line,';');
    $requete .= '(\''.  mysql_real_escape_string($codecli).'\',
        \''.  mysql_real_escape_string($datel).'\',
        \''.  mysql_real_escape_string($recep).'\',
        \''.  mysql_real_escape_string($indice).'\',
        \''.  mysql_real_escape_string($desti).'\',
        \''.  mysql_real_escape_string($dept).'\',
        \''.  mysql_real_escape_string($ville).'\',
        \''.  mysql_real_escape_string($nbcolis).'\',
        \''.  mysql_real_escape_string($situation).'\',
        \''.  mysql_real_escape_string($datesituation).'\',
        \''.  mysql_real_escape_string($dateretour).'\',
        \''.  mysql_real_escape_string($reference).'\',
        \''.  mysql_real_escape_string($urlmarge).'\',
        \''.  mysql_real_escape_string($comment).',\'),';
}
$requete = substr($requete, 0, strlen($requete)-1) . ';';
echo $requete;
$ret = mysql_query($requete);
if ($ret === false) {
    echo '<p class="erreurSQL">Erreur SQL : '.mysql_error().'<br />'.htmlentities($requete).'</p>';
}
mysql_close();
?>
    </body>
</html>
Ça te permet aussi de ne pas limiter la taille des champs et d'avoir quelque chose de plus lisible ;)

@+

Re: probleme apres migration

par jojolapine » 11 avr. 2011, 15:02

Bonjour,

La fonction mysql_db_query() est obsolète depuis php5.3 ( http://www.php.net/mysql_db_query ) il se peut que ce soit la version que tu utilises?
Ensuite s'il n'y a pas d'erreurs, et bien c'est qu'elles sont cachées... Il faut donc les afficher ( http://php.net/manual/fr/book.errorfunc.php )

Re: probleme apres migration

par stcrea » 11 avr. 2011, 13:43

je ne comprend pas pourquoi avant CA fonctionner et pas maintenant

Re: probleme apres migration

par stcrea » 10 avr. 2011, 00:33

Bonjour,

Tous les champs par ligne sont dans l'ordre de créa de la BDD.
Merci pour ton aide

Re: probleme apres migration

par moogli » 10 avr. 2011, 00:12

heu ton fichier c'est du csv avec le ; en séparateur ?

si c'est le cas tu peut utiliser fgetcsv.

Il y a des chance que ta nouvelle version de php soit une 5.x.x et y a une grande marge depuis php3 ;)

et la tu ouvre le fichier, boucle dessus pour le traitement et avec le tableau tu prépare la requête (et je te conseil de t'orienter vers PDO et les requêtes préparées pour te simplifier la vie ;)

du coté de ton code cela ne sert a rien d'ouvrir et fermer la connexion au sgbd à chaque utilisation une seule ouverture au début et la fermeture à la fin du script (si tu l'oubli php le fera proprement pour toi !)

peut tu indiquer l'ordre des champs par ligne ?

@+

Re: probleme apres migration

par stcrea » 09 avr. 2011, 21:42

Bonjour
Merci pour ton aide

voici le create table
-- phpMyAdmin SQL Dump
-- version 3.2.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Sam 09 Avril 2011 à 21:32
-- Version du serveur: 5.1.37
-- Version de PHP: 5.2.10

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `sastdlphp`
--

-- --------------------------------------------------------

--
-- Structure de la table `histo`
--

CREATE TABLE IF NOT EXISTS `histo` (
  `codecli` varchar(6) NOT NULL,
  `date` varchar(10) NOT NULL DEFAULT '0',
  `recep` varchar(6) NOT NULL,
  `indice` char(2) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `desti` varchar(25) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `dept` char(2) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `ville` varchar(15) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `nbcolis` float(4,0) NOT NULL DEFAULT '0',
  `situation` varchar(9) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `datesituation` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `dateretour` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `reference` varchar(16) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `urlemarge` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `comment` varchar(35) CHARACTER SET latin1 NOT NULL DEFAULT '',
  KEY `codecli` (`codecli`),
  KEY `date` (`date`),
  KEY `recep` (`recep`),
  KEY `indice` (`indice`),
  KEY `desti` (`desti`),
  KEY `dept` (`dept`),
  KEY `ville` (`ville`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 PACK_KEYS=1 ROW_FORMAT=FIXED;

et le fichier texte par la même occasion
  • 951207;2011-04-08;501893;01;SN DISTRI;68;WITTENHEIM ;0001;S ;2011-04-08; ;249404 ;C; 16KG;

    951207;2011-04-08;501895;01;LE CAOUTC;95;ARGENTEUIL ;0001;S ;2011-04-08; ;249406 ;C; 7KG;

    951207;2011-04-08;501896;01;LEFRANC A;62;MARCK ;0001;S ;2011-04-08; ;249405 ;C; 30KG;

    951207;2011-04-08;501898;01;CAPEST ;54;NANCY ;0001;S ;2011-04-08; ;249403 ;C; 59KG;

    951207;2011-04-08;501899;01;DELIRE ;69;CHASSIEU ;0009;S ;2011-04-08; ;249396-402 ;C; 306KG;

    951207;2011-04-08;501901;01;TOURAINE ;37;LARCAY ;0002;S ;2011-04-08; ;249401 ;C; 23KG;

    951207;2011-04-08;501904;01;HYDROVIDE;49;LEZIGNE ;0002;S ;2011-04-08; ;249400 ;C; 173KG;

    951207;2011-04-08;501917;01;MAUGUIN C;53;ST BERTHEVIN ;0004;S ;2011-04-08; ;249398-399 ;C; 276KG;

    951207;2011-04-08;501920;01;MC VULCA ;72;ST SATURNIN ;0002;S ;2011-04-08; ;249397 ;C; 77KG;

    951207;2011-04-08;501933;01;V.D.S.T.P;77;COURTRY ;0010;S ;2011-04-08; ;249409 ;C; 520KG;

    952436;2011-04-08;840761;01;DUMONTEIL;86;CHASSENEUIL DU ;0017;S ;2011-04-08; ; ;C; 268KG;

    952436;2011-04-08;840762;01;COLLIN ;14;MONDEVILLE ;0001;S ;2011-04-08; ; ;C; 10KG;

    952436;2011-04-08;840763;01;FOUSSIER ;72;ALLONNES ;0019;S ;2011-04-08; ; ;C; 275KG;

    952436;2011-04-08;840764;01;LEGALLAIS;14;ST ANDRE SUR OR;0017;S ;2011-04-08; ; ;C; 183KG;
Avant OVH le site était héberger je ne sais pas trop ou et ça fonctionner avec une vielle version de php 3

En tous cas merci de pour ton aide précieuse

Re: probleme apres migration

par moogli » 09 avr. 2011, 21:10

peut tu nous fournir le create table de la table en question (histo) que l'on puisse tester ?

A tu vérifié l'état de toute les variables (en les affichant avec var_dump ou print_r) ?

Est tu sur que ton code "passe" dans le if ?

@+

Re: probleme apres migration

par stcrea » 09 avr. 2011, 20:52

Bonjour,

Encore merci pour votre aide mais ça ne m'affiche aucune erreur et toujours pas d'écriture dans le BDD
Que doit-je Faire ?

Re: probleme apres migration

par moogli » 09 avr. 2011, 12:52

salut,

gare le tag complet (<?php) histoire d'être sur de ne pas avoir de soucis dans le futur.

a tu mis les bon utilisateur est mot de passe (voir le bon host) pour mysql (car je ne pense pas que tu utilise l'utilisateur root ;) ).

pour voir les message d'erreur il faut placer l'error reporting a E_ALL | E_STRICT (si tu est en php5) => error_reporting(E_ALL|E_STRICT); au début du fichier

@+

Re: probleme apres migration

par Stcrea » 09 avr. 2011, 12:27

Bonjour

Merci pour la reponse rapide j'ai tester mais ca ne fonctionne pas non plus
Peut etre une autre idee

Merci beaucoup

Re: probleme apres migration

par misterflo » 07 avr. 2011, 22:35

Bonsoir,
au tout début de ton fichier tu as un short tag <? essaye avec un <?php, chez OVH il me semble que par défaut php ne supporte pas les short tag.

probleme apres migration

par stcrea » 07 avr. 2011, 21:51

Bonjour a tous,

Je suis nouveau sur le forum et je vinent vers vous car j'ai migrer mon site vers ovh et depuis j'ai un script php qui ne fonctionne plus.
En fait je récupère les données dans un fichier texte de ce type

951000;2011-04-08;888888;01;test;95;toph;0001;s;2011-04-06;test;test;d;41kg;

pour l'envoyer dans une BDD et depuis ma migration chez ovh cela ne fonctionne plus.

voici le script
[php]<?

$host = "127.0.0.1";
$user = "root";
$password = "";
$database = "sastdlphp";


$date = gmdate("Y-m-d");
$del = gmdate("Y-m-d", mktime(0,0,0,date("m"),date("d")-370,date("Y")));
echo "Suppression des expedition anterieures au $del";
mysql_connect($host, $user, $password);
$ok = mysql_db_query ($database, "delete from histo where date < '$del' " );
mysql_close();

$fp = fopen("upload/netexp.txt", "r");
while (!feof ($fp))
{
$enr = fgets($fp, 256);
$forcli = substr($enr, 0, 6);
$fordate = substr($enr, 7, 10);
$forrecep = substr($enr, 18, 6);
$forind = substr($enr, 25, 2);
$desti1 = substr($enr, 28, 9);
$desti2 = substr($enr, 77, 15);
$fordesti = "$desti1"."$desti2";
$fordept = substr($enr, 38, 2);
$forville = substr($enr, 41, 15);
$forcol = substr($enr, 57, 4);
$forsit = " ";
$ford2 = " ";
$forret = " ";
$forurl=" ";
$forref = substr($enr, 99, 16);

$cha1 = " 'codecli' , 'date' , 'recep' , 'indice' , ";
$cha2 = " 'desti' , 'dept' , 'ville' , 'nbcolis' , 'situation' , ";
$cha3 = " 'datesituation' , 'dateretour' , 'reference' , 'urlemarge' " ;
$champs = " $cha1 $cha2 $cha3 ";


$val1 =" '$forcli', '$fordate', '$forrecep', '$forind', " ;
$val2 =" '$fordesti', '$fordept', '$forville', '$forcol', " ;
$val3 =" '$forsit', '$ford2', '$forret' , '$forref' , '$forurl' " ;
$val = " $val1 $val2 $val3 " ;

$forcode = substr ($enr, 116, 1);
$si1 = " date = '$fordate' and recep = '$forrecep' and indice = '$forind' ";


mysql_connect($host, $user, $password);
$result = mysql_db_query ($database, "select * from histo where $si1 ");
$nb = mysql_num_rows($result);
if ($nb <> 0 )
{echo " $nb-" ;
$del = mysql_db_query ($database, "delete from histo where $si1 ");}
mysql_close();

echo " $forcode $forcli $forrecep ";

if ( $forcode == "C" )
{ mysql_connect($host, $user, $password);
$ok = mysql_db_query ($database, "insert into histo values ( $val ) ");
echo " creation de $forcode $forcli $forrecep ";
mysql_close(); }

}
fclose($fp);

?>[/php]

Pouvez vous m'aider ???
car depuis 3 jour je cherche sur internet et rien
Le script n'est pas de moi car je débute
Merci pour votre aide