[RESOLU] probleme pour passer d'un fichier à un autre

JVL
Eléphant du PHP | 76 Messages

08 oct. 2013, 11:47

Bonjour à tous,

Aujourd'hui je travaille sur une requete insert into(elle semble fonctionner dans phpmyadmin).

A priori le problème vient de mon "execute", ou plutôt de la concaténation (pourtant j'ai utiliser tout les ressources que moogli à pu poster !)
<?
require_once('../inc/connection.php'); // connection à la bdd.

$project = $_POST['add_select_projet'];
$addduree = $_POST['add_duree'];
$cate = $_POST['add_categorie'];
$comm = $_POST['commentaire'];
$name = $_POST['name'];
$date = $_POST['add_date'];
			   
$add = $connection->prepare('INSERT INTO `glpi_suivi_travail`(`Projet_suivi`, `Name_suivi`, `Date_suivi`, `Categorie_suivi`, `Duree_suivi`, `Commentaire`) VALUES (:projet,:name,:date_,:cate,:duree,:comm)');
														try {			
$ajout_travail = $add->execute(array(
									'projet' => '\'$project\'',
									'name' => '\'$name\'',
									'date_' => '\'2013-10-09\'',
									'cate' => '\'$cate\'',
									'duree' => '\'$addduree\'',
									'comm' => '\'$comm\''
										));?>
Après il me reste à ajouter str_to_date dans la requète, j'éssaye pour le moment avec une date en brut(pour pas trop me compliquer la vie :) )

Merci d'avance pour l'aide apporté !

Cordialement JVL.
Modifié en dernier par JVL le 08 oct. 2013, 16:24, modifié 1 fois.

Eléphant du PHP | 116 Messages

08 oct. 2013, 11:57

Salut,

Est ce que tu as un message d'erreur ? Car j'ai l'impression que le problème peut venir d'ailleurs : regarde ce pauvre petit "try" tout seul abandonné et malheureux... :'(
@+,
Computarelier

JVL
Eléphant du PHP | 76 Messages

08 oct. 2013, 11:59

Pardon j'avait oublier une ligne du code !

Et non je n'ai pas de message d'erreur ! ni d'enregistrement dans la bdd ! ...
<?
require_once('../inc/connection.php'); // connection à la bdd.

$project = $_POST['add_select_projet'];
$addduree = $_POST['add_duree'];
$cate = $_POST['add_categorie'];
$comm = $_POST['commentaire'];
$name = $_POST['name'];
$date = $_POST['add_date'];
			   
$add = $connection->prepare('INSERT INTO `glpi_suivi_travail`(`Projet_suivi`, `Name_suivi`, `Date_suivi`, `Categorie_suivi`, `Duree_suivi`, `Commentaire`) VALUES (:projet,:name,:date_,:cate,:duree,:comm)');
														try {			
$ajout_travail = $add->execute(array(
									'projet' => '\'$project\'',
									'name' => '\'$name\'',
									'date_' => '\'2013-10-09\'',
									'cate' => '\'$cate\'',
									'duree' => '\'$addduree\'',
									'comm' => '\'$comm\''
										));
if( $ajout_travail ) {     echo "Enregistrement réussi";   }   } catch( Exception $e ){  echo '    Erreur de requète : ', $e->getMessage(); } ?>

ViPHP
xTG
ViPHP | 7331 Messages

08 oct. 2013, 13:13

As-tu un affichage ? (erreur ou réussi)
Car à voir les short_tags je pense aussitôt à un code non exécuté.
<? // short_tags => non exécuté suivant la configuration du serveur
<?php // correct

JVL
Eléphant du PHP | 76 Messages

08 oct. 2013, 14:09

Alors j'ai enlever les short_tags, a priori cela ne change rien (pas de message d'erreurs). J'ai donc éssayé d'appeler directement ma page dans le navigateur, et miracle
Notice: Undefined index: add_select_projet in C:\xampp\htdocs\glpi\front\add.php on line 4

Notice: Undefined index: add_duree in C:\xampp\htdocs\glpi\front\add.php on line 5

Notice: Undefined index: add_categorie in C:\xampp\htdocs\glpi\front\add.php on line 6

Notice: Undefined index: commentaire in C:\xampp\htdocs\glpi\front\add.php on line 7

Notice: Undefined index: name in C:\xampp\htdocs\glpi\front\add.php on line 8

Notice: Undefined index: add_date in C:\xampp\htdocs\glpi\front\add.php on line 9
Enregistrement réussi
De plus l'enregistrement ce fait bien dans ma bdd (avec seulement le nom des variables, mais sa prouve que la requète est bonne ? ?)
Je doit avoir un problème pour passer les informations d'une page à l'autre ...

voici le code censer envoyer les données:
<form method="post" action="../front/add.php" name="add">	<TR>
			<TD vAlign=middle>
				<select name="add_select_projet">
				<option value="">Sélectionner un projet</option> 
		<?php include ('../inc/select_projet.php');	// requete de selection de tout les projet open ?>	
		</select>
		<?php echo'<input name="name" type=hidden value="'.$_SESSION["glpiname"].'">'; 
			echo'<input name="add_date" type=hidden value="'.$_POST['date'].'">';?> 
		
				

			</TD>
			<TD vAlign=middle> 
				<select name="add_duree">
					  <option value="">Sélectionner une durée</option>
					  <option value="15">15 minutes</option>
					  <option value="30">30 minutes</option>
					  <option value="45">45 minutes</option>
					  <option value="60">1 heure</option>
					  <option value="75">1 heure 15 minutes</option>
					  <option value="90">1 heure 30 minutes</option>
					  <option value="105">1 heure 45 minutes</option>
					  <option value="120">2 heures</option>
					  <option value="150">2 heures 30 minutes</option>
					  <option value="180">3 heures</option>
					  <option value="210">3 heures 30 minutes</option>
					  <option value="240">4 heures</option>
				</select>
			</TD>
			<TD vAlign=middle>
				<select name="add_categorie">
					  <option value="Projet">Projet</option>
					  <option value="Courant">Courant</option>
				</select>
			</TD>
			<TD vAlign=middle > 
					<TEXTAREA name="commentaire" ROWS=3 COLS=1 style="width: 350px; height: 20px;">
					</TEXTAREA>
			</TD>

			<TD Align=center><input type="submit" value="Ajouter"/> 
			</TD>
		</TR>
</form>	
Merci.

ViPHP
xTG
ViPHP | 7331 Messages

08 oct. 2013, 17:38

avec seulement le nom des variables
Une variable est interprétée entre double quote, pas entre simple quote.

Pour tous les undefined regardes ce que tu as dans $_POST.
Ou même ton formulaire, tu verras que ces champs n'existent pas.

JVL
Eléphant du PHP | 76 Messages

09 oct. 2013, 09:21

Merci pour les double quotes.

Comment ça les champs n'éxistent pas ? J'ai pourtant éssayé de respecter une certaine syntaxe avec des "name" dans ma form (action+method) et un bouton "submit".

Le plus simple serait de tout laisser dans le même fichier.php je suppose ?


edit: mais en effet je n'ai pas l'impression que l'appel de l'autre page fonctionne vraiment.

ViPHP
xTG
ViPHP | 7331 Messages

09 oct. 2013, 10:12

Oups pardon ils existent bien... J'ai du faire un amalgame ou bien j'ai lu en diagonale !

Que te donnes un var_dump($_POST); sur la page de réception du formulaire ?
Le premier code de ce topic est-il bien le fichier add.php ?

JVL
Eléphant du PHP | 76 Messages

09 oct. 2013, 10:45

Non on saisie dans le formulaire sur teststagiaire.php et on récupère (puis envoi a la bdd) sur add.php.

Jusqu'à maintenant pas moyen d'aller sur la add.php en cliquant sur le submit de la page teststagiaire, j'ai donc copier exactement ma form et l'ai recoller dans un autre fichier, MIRACLE : le submit nous envoi bien sur add.php.


Après test de var_dump: tout les données reçus correspondend bien au dooonées envoyés, il doit y avoir un problème dans ma page principale, un soucis d'appel.

edit: oui le premier code est celui de add.php
<!DOCTYPE html> 
<?php 
define('GLPI_ROOT', '..');
include (GLPI_ROOT . "/inc/includes.php");

Session::checkRight("reports", "r");

Html::header($LANG['Menu'][6],$_SERVER['PHP_SELF'],"utils","report"); // appel de l'entête de GLPI

require_once('../inc/connection.php'); // connection à la bdd

$valeur_par_defaut = date('d/m/Y'); // On check si $_post['date'] existe, si oui on l'affiche, sinon on affiche la date du jour
$date_formulaire = (!empty($_POST['date'])) ? $_POST['date'] : $valeur_par_defaut; ?>

<script type="text/javascript" src="/glpi/lib/extrajs/calendrier.js"></script> <!-- javascript du calendrier-->
<script type="text/javascript" src="/glpi/lib/extrajs/controleform.js"></script>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="/glpi/css/calendrier.css" /><!-- css du calendrier -->
<div id='page'>
  
	<DIV class=center>


<TABLE border=2 class=tab_cadrehov>
	<TBODY>
		<tr>
<form method="post" action="teststagiaire.php">			<th colSpan="5">Visualisation</th>
	    </tr>
		<tr>
				<th colSpan=5><input type="date" name="date" id="date" class="calendrier" size="10" value="<?=$date_formulaire;?>"/> 
							  <input type="submit" value="Afficher"  />
				</th>

		</tr>
<form/>			
		<TR>
			<TH><center>Projet</center></TH>
			<TH><center>Durée</center></TH>
			<TH><center>Catégorie</center></TH>
			<TH><center>Commentaire</center></TH>
			<TH><center>Actions</center></TH>
		</TR>
	
		<?php 
		        $format = "%d/%m/%Y";                               
                $string=$_POST['date']; 
                $name=$_SESSION["glpiname"];

$selection = $connection->query('SELECT * FROM `glpi_suivi_travail` WHERE `Name_suivi`= \''.$name.'\' AND `Date_suivi` = str_to_date(\''.$string.'\', \''.$format.'\')');

     while( $enregistrement = $selection->fetch(PDO::FETCH_OBJ)){  // Voici une boucle qui pour chaque résultat boucle sur une ligne du tableau. (+ convertion)
								
$nombre = $enregistrement->Duree_suivi; 
// Le temps travaillé étant stocké en minute, il faut le convertir pour l'afficher sous forme heure:minute. Il est présent dans le while, car il faut convertir chaque "duree" retourner par la requète
//initialisation 
$secondes = 0;
$minutes = 0;
$heure = 0;
//convertion
$minutes = $nombre*1; 
$secondes = bcmod($nombre,"60");
$minutes = floor($minutes);
while($secondes >= "60") //ajoute une minute toutes les 60 secondes
{
 $secondes = $secondes-60;
 $minutes++;
}
while($minutes >= "60")//ajoute une heure toutes les 60 minutes
{
 $minutes = $minutes-60;
 $heure++;
}
if($minutes < "10") // ajoute le deuxieme 0 pour la présentation
{
 $minutes = "0".$minutes;
}
if($secondes < "10") // ajoute le deuxieme 0 pour la présentation
{
 $secondes = "0".$secondes;
}
if($heure < "10") // ajoute le deuxieme 0 pour la présentation
{
 $heure = "0".$heure;
}
$resultat = $heure." h ".$minutes; //contient le résultat final
 // Afficher le résultat

                                echo '<TR> <input type=hidden value="',$enregistrement->ID_suivi,'">'; 
                                echo '<TD><center>',$enregistrement->Projet_suivi,'</center></TD>';
                                echo '<TD>',$resultat,'</TD>';
                                echo '<TD>',$enregistrement->Categorie_suivi,'</TD> ';
                                echo '<TD>',$enregistrement->Commentaire,'</TD>';
                                echo '<TD>';
                                echo '<a href="#" onclick="">Modifier </a> |';
                                echo '<a href="#" onclick=""> Supprimer</a>' ;
                                echo '</TD>';
                                echo '</TR>';                     
																} ?>	 
				
	
<form method="POST" action="add.php">	// LE FORMULAIRE DAJOUT COMMENCE ICI  !!!!!!!!!!!
			<TR>
			<TD vAlign=middle>
				<select name="add_select_projet">
				<option value="">Sélectionner un projet</option> 
		<?php include ('../inc/select_projet.php');	// requete de selection de tout les projet open ?>	
		</select>
		<?php echo'<input name="name" type=hidden value="'.$_SESSION["glpiname"].'">'; 
			echo'<input name="add_date" type=hidden value="'.$string.'">';?> 
		
				

			</TD>
			<TD vAlign=middle> 
				<select name="add_duree">
					  <option value="">Sélectionner une durée</option>
					  <option value="15">15 minutes</option>
					  <option value="30">30 minutes</option>
					  <option value="45">45 minutes</option>
					  <option value="60">1 heure</option>
					  <option value="75">1 heure 15 minutes</option>
					  <option value="90">1 heure 30 minutes</option>
					  <option value="105">1 heure 45 minutes</option>
					  <option value="120">2 heures</option>
					  <option value="150">2 heures 30 minutes</option>
					  <option value="180">3 heures</option>
					  <option value="210">3 heures 30 minutes</option>
					  <option value="240">4 heures</option>
				</select>
			</TD>
			<TD vAlign=middle>
				<select name="add_categorie">
					  <option value="Projet">Projet</option>
					  <option value="Courant">Courant</option>
				</select>
			</TD>
			<TD vAlign=middle > 
					<TEXTAREA name="commentaire" ROWS=3 COLS=1 style="width: 350px; height: 20px;">
					</TEXTAREA>
			</TD>

			<TD Align=center><input type="submit" name="ajout_" value="Valider" /> 
			</TD>
		</TR>


</form>	
<form>				<tr>
							<td></td>                
<?php	$format1 = "%d/%m/%Y";                               
        $string1=$_POST['date']; 
        $name1=$_SESSION["glpiname"];
		$selection1 = $connection->query('SELECT sum(Duree_suivi) as poo FROM `glpi_suivi_travail` WHERE `Name_suivi`= \''.$name1.'\' AND `Date_suivi` = str_to_date(\''.$string1.'\', \''.$format1.'\')');
		$dure = $selection1->fetch(PDO::FETCH_OBJ);
		$durez = $dure->poo;
///initialisation/ la requète fait la somme de tout les minutes travaillé pour une personne sur un jour, il faut ensuite convertir cette valeur en heures:minutes
$secondes = 0;
$minutes = 0;
$heure = 0;
$minutes = $durez*1; 
$secondes = bcmod($nombre,"60");
$minutes = floor($minutes);
while($secondes >= "60") //ajoute une minute toutes les 60 secondes
{
 $secondes = $secondes-60;
 $minutes++;
}
while($minutes >= "60")//ajoute une heure toutes les 60 minutes
{
 $minutes = $minutes-60;
 $heure++;
}
if($minutes < "10") // ajoute le deuxieme 0 pour la presentation
{
 $minutes = "0".$minutes;
}
if($secondes < "10") // ajoute le deuxieme 0 pour la presentation
{
 $secondes = "0".$secondes;
}
if($heure < "10") // ajoute le deuxieme 0 pour la presentation
{
 $heure = "0".$heure;
}
$resultat = $heure." h ".$minutes; //contient le résultat final
							echo'<td>Durée total : ',$resultat,'</td>'; 
?>
					</tr>
</form>
			</TBODY>
		</TABLE>
		<br/>
<form>	
<table class=tab_cadrehov>
			<tr>
					<th colSpan=4>
					Rapport d'activité
					</th>
			</tr>
		<tr>
				<td> Sélectionner personnel</th>
				<td>Date de début </th>
				<td>Date de fin </th>
			</tr>
			<TR>
				<td>
					<select>
						  <option value="Christophe">Christophe</option>
						  <option value="Josiane">Josiane</option>
						  <option value="Ludo">Josiane</option>
						  <option value="Ludo">Groupe</option>
					</select>
				</td>
				<td> <input type="text" name="date1" id="date1" class="calendrier" size="10" /></th>
				<td> <input type="text" name="date2" id="date2" class="calendrier" size="10" /></th>
				<td><input type="submit" value="Afficher"></th>
			</tr>
		</table>
	  </form><br/>
	<form method="post">
	<table >
		<tbody>
			<tr>
				<th colSpan=2 class=h1>Ajouter un projet</th>

			</tr>
				<td align=right><input type="text" name="add_projet" id="add_projet"/>
				</td>
				
				<td><input type="submit" value="Enregistrer ">
				</td>
		</tbody>
	</table>
 </form>
 <br/>
 <table>
	<form>
			<tr>
				<th colSpan=2 class=h1>Clore un projet 
				</th>
				<th> 
				</th>
			</tr>
				<td align=right>
						<select>
						<?php include ('../inc/select_projet.php');	 ?>	
						</select>
				</td>
			<td><input type="submit" value="Clore ce projet"></td>
	</form>
 </table> 
</DIV>
</div><?php  Html::footer(); ?>
</body></html>

ViPHP
xTG
ViPHP | 7331 Messages

09 oct. 2013, 13:24

Jusqu'à maintenant pas moyen d'aller sur la add.php en cliquant sur le submit de la page teststagiaire, j'ai donc copier exactement ma form et l'ai recoller dans un autre fichier, MIRACLE : le submit nous envoi bien sur add.php.
J'avais pas vu les autres formulaires sur la page, c'est un sacré tintouin.
Pour la majorité un simple lien (au pire au design d'un bouton) aurait suffit plutôt qu'un formulaire vide.

Quand tu cliques sur Valider il charge quelle page du coup ?

Peux-t-on avoir le code HTML généré de ta page ?

JVL
Eléphant du PHP | 76 Messages

09 oct. 2013, 14:07

Un collègue à moi à eu l'oeil !

J'ai une balise form que je ferme ainsi <form/> or on sait tous que c'est </form>, voila pourquoi les valeurs ne passaient pas d'un fichier à l'autre.

xTG merci de ton aide ! Oui je sais ma page n'est pas très propre ! c'est d'ailleurs pour ca que j'avais crée un topic "bien organiser son code" pour avoir des conseils mais je n'ai qu'une seule réponse ! Je préfère rendre une page qui ne consomme pas trop de ressource, pour ca que je cherche à séparé un maximum mes fonctions dans différents fichiers ! Si tu as des conseils quelconque à me faire part, je suis preneur (avant de résoudre ce topic).

merci encore.