Chercher l'erreur PHP

Résolu/Fermé
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 - 16 mai 2008 à 13:55
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 - 21 mai 2008 à 09:14
Bonjour,c'est encore moi

Au final, PEAR je le verrais lundi ( ouf sauvée :p ) et donc si j'ai un probleme, c'est dans mon code php ( malgré les 2jours que j'ai passé a chercher le moindre probleme de ' ou " ou encore ; et j'en passe!

Je fais donc appel a vos précieux services :p

On va commencé avec qu'une page ( oui une parce que j'ai des problemes partout, d'où la fameuse question est ce que c'est pas ma connexion a la base ou autre qu'il plante mais bon meme pas j'ai pas de message d'erreur ! quel casse tete ! )

j'ai une base de donnée "cartouche" avec deux tables "references" (où sont referencé les cartouches") et "sorties" (ou on enregistre les sorties) ^^ dans phpmyadmin

ici ils ont WAMP et j'ai bien ouvert le site et incrementer la base de données par WAMP en localhost et tout

sorties.php enregistre donc les sorties de cartouche :


>> code

<html>
<head>
<title>Enregistrement de sorties de cartouches</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<h1>Enregistrer une sortie de cartouches d'encre </h1>
<?php
$connect = mysql_connect("localhost","root","")or die("echec de connexion au serveur");
$db=mysql_select_db("cartouche",$connect)or die("echec de connexion a la base de donneés");
?>

<form method = "POST">
//Numero de sortie est une zone de texte qui reprend le dernier numero d identifiant (ici IdReference) et qui ajoute +1 pour la sortie enregistrer qui suit
<p>Numero de sortie</p>
<input type="text" name="numsortie">

<?
$req0 = "SELECT MAX(IdSortie)+1 FROM sorties;";

?>
//reference cartouche est une liste deroulante contenant les references des cartouches qui sont dans la base, comme ça ya qu à selectionner
<p>Reference de la cartouche</p>
<select name="idref" size=1>
<?
$sql = "SELECT IdReference FROM references;";
$query = mysql_query($sql,$db);
while ($row = mysql_fetch_row($query))
{
echo'<option value='.$row["0"].'>'.$row["0"].'</option><br>'
}
mysql_free_result($query);

?>
</select>

//date de sortie est une zone de texte censé enregistrer la date de la sortie saisie et donc la mettre sous format aaaa/mm/jj ou lieu de jj/mm/aaaa

<p>Date de sortie</p>
<input type="text" name="date">
<?
$date = $_POST['date'];

$tabdate = split(",", $_POST['date']);
$date = $tabdate[2] ."-".$tabdate[1]."-".$tabdate[0];

$ajout = "INSERT INTO sorties('date') VALUES ('$date')";
$query = mysql_query($ajout);

?>
//demandeur est sous format zone de texte aussi pour enregsitrer le demandeur saisie par lutilisateur
<p>Demandeur</p>

<input type="text" name="demandeur"/>
<?
$demandeur=$_POST['demandeur'];

$ajout2 = "INSERT INTO sorties('demandeur') VALUES ('$demandeur')";
$query2 = mysql_query($ajout2);

?>

<?
mysql_close($connect);
?>

<br><br><br>
//un lieu pour retourner a la page d'accueil
<a href="accueil.html">Retour à l'accueil</a>
//un bouton pour enregistrer les données
<input name="submit" type="submit" value="Enregistrer" align="left"/>

</form>
</body>
</html>

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

et a l'affichage, je n'ai aucun message d'erreur, ma liste deroulante est vide ,comme les zones de texte

aidez moi s il vous plait
c'est mega important c'est pour mon stage :p

Merci d'avance

15 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 mai 2008 à 14:26
Re, alors, procédons par étape.
La première zone de texte n'est pas remplit pour la simple raison que tu ne fais aucune requête sur ta base et n'attribut donc aucune valeur à ta zone de texte.

Voilà un code qui devrait fonctionner un peu mieux :
<?
$req0 = "SELECT MAX(IdSortie)+1 as num_sortie FROM sorties;";
$res0 = @mysql_query($req0,$conn);
$numSortie = "Undetermined";  // --- Default value if not retrieved from the database
 if ( $res0 != null && @mysql_num_rows($res0) == 1 ){
    $line = @mysql_fetch_assoc($res0);
    $numSortie = $line["num_sortie"];
 }
?>
<p>Numero de sortie</p>
<input type="text" name="numsortie" value="<?php echo $numSortie; ?>">


Ce code n'a pas été testé donc il y a peut-être des erreurs de syntaxe.
Pour le reste je regarde et je repost.
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 14:35
a oui en effet je l'ai meme pas executé :s
a force d etre decu depuis plusieurs et des copier/coller jen perds des morceaux :p
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 14:44
au fait pourquoi tu met @mysql_query et pas mysql_query directement?
quand je lavais appris on le mettait pas jai resortie mes cours
c'est quoi la difference ? (si il en a une .. )
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 14:42
jai essayé il y a aucune erreur qui se marque et la zone de texte est toujours desesperement vide :(
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 mai 2008 à 14:43
Même remarque pour le champ de la date de sortie :

Non formatée :
<p>Date de sortie</p>
<input type="text" name="date" value="<?php echo $_POST["date"]; ?>"> 
<?
$date = $_POST['date'];

$tabdate = split(",", $_POST['date']);
$date = $tabdate[2] ."-".$tabdate[1]."-".$tabdate[0];

$ajout = "INSERT INTO sorties('date') VALUES ('$date')";
$query = mysql_query($ajout);

?> 


Formatée :
<?
$date = $_POST['date'];

$tabdate = split(",", $_POST['date']);
$date = $tabdate[2] ."-".$tabdate[1]."-".$tabdate[0];

$ajout = "INSERT INTO sorties('date') VALUES ('$date')";
$query = mysql_query($ajout);
?>
<p>Date de sortie</p>
<input type="text" name="date" value="<?php echo $date; ?>"> 


Au passage, le $conn que j'ai utilisé correspond à ton $db.
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 14:47
pour $conn jpensais que c'etait mon $connect ^^ (mais ça ne change rien ça marche toujours pas )

pour la date je savais qu il fallait mettre la creation de la zone de texte après la requete !? merci a toi :D
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 mai 2008 à 14:46
En fait, ta page elle est sensée faire quoi exactement ?
Tu as une page avant celle-ci ou pas ?
Car de ce que je vois tu fais des ajouts dans ta base de données, ce qui correspondrait donc à une page de traitement d'un formulaire, or je vois aussi de l'affichage...

Que veux-tu faire exactement dans cette page ?
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 14:49
c'est un formulaire qui permet d'entrer / enregistrer les sorties de cartouches

la date et le demanduer sont saisies,
le numero de sortie devrait se mettre automatiquement suivant le dernier numero de sortie de la base
et la reference de la cartouche est a selectionner dans la liste deroulante qui reprend les identifiants de la table references ( idReference)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 mai 2008 à 14:57
Ok dans ce cas ce n'est pas fait correctement,
la partie d'enregistrement de tes informations devrait être faite dans un second script et non à l'intérieur du script qui affiche le formulaire.

Si tu as besoin de savoir comment gérer un formulaire d'enregistrement, tape sur google les mots suivants :
PHP formulaire enregistrement

Par exemple cette page : http://wiki.mediabox.fr/tutoriaux/php/recuperer-des-donne-formulaire-php

Là je dois partir en réunion jusqu'à certainement 18h donc je ne pourrai pas t'aider d'ici là, à mon retour je regarderai ce que tu as fait et effectuerai les modifications si besoin est.


Bon courage.
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 14:59
merci quand meme :)
je vais essayé

les autres aidez moi :p
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 15:28
IL y' a pas mal de choses qui ne vont pas en fait :)
Pour ton select :
echo'<option value='.$row["0"].'>'.$row["0"].'</option><br>'
Essai plutôt echo'<option value='.$row[0].'>'.$row[0].'</option>'
: Tu veux l'index 0 de la variable $row donc 0 est un entier pas une chaine
Dans un select on ne met que des options pas de br

et comme le dit kij_82, tu devrais avoir deux pages au moins :
- une avec le formulaire à remplir qui aura un <form action="page2.php" method="post">
- une 2eme (page2.php) qui va récupérer les données dans son $_post
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 15:32
je vois pas pourquoi il faut deux pages moi
la premiere c'est bon non? enfin sans les fautes ^^
et dans lautre je dois mettre les insert ?? pour les rentrer dans la table?
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 15:37
et je dois donc enlever tous les insert blabla de la page ?
je met aucun requete ni rien alors
que du html pour demandeur et date ?
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 15:54
est ce que la "page2" va bien comme ça :

<?php
$connect = mysql_connect("localhost","root","") or die("echec de connexion au serveur");
mysql_select_db("cartouche",$connect) or die("echec de connexion a la base de donneés");
?>

<?
$date = $_POST['date'];

$tabdate = split(",", $_POST['date']);
$date = $tabdate[2] ."-".$tabdate[1]."-".$tabdate[0];

$demandeur=$_POST['demandeur'];
$sortie=$_POST['sortie'];
$reference=£_POST['reference'];

$ajout = "INSERT INTO sorties VALUES ('$sortie','$reference','$date','$demandeur')";

$query = mysql_query($ajout);

?>

La sortie a été bien enregistré

<br><br><br>
<a href="accueil.html">Retour à l'accueil</a>


je pense que le message peut etre ameliorer et qu il s affiche que quand c'est vrai :p et pas pour rien comme ça


la page1 devient alors :


<?php
$connect = mysql_connect("localhost","root","")or die("echec de connexion au serveur");
$db=mysql_select_db("cartouche",$connect)or die("echec de connexion a la base de donneés");
?>

<form action="enregistrement.php"method = "POST">
<p>Numero de sortie</p>
<input type="text" name="sortie">

<?
$req0 = "SELECT MAX(IdSortie)+1 as num_sortie FROM sorties;";
$res0=@mysql_query($req0;$db);
$numSortie="Undetermined";

if ($res0 != null && @mysql_num_rows($res0) == 1 ){
$line=@mysql_fetch_assoc($res0);
$numSortie=$line["num_sortie"];
}

?>

<p>Reference de la cartouche</p>
<select name="reference" size=1>
<?
$sql = "SELECT IdReference FROM references;";
$query = mysql_query($sql,$db);
while ($row = mysql_fetch_row($query))
{
echo'<option value='.$row[0].'>'.$row[0].'</option>'
}
mysql_free_result($query);

?>
</select>

<p>Date de sortie</p>
<input type="text" name="date">

<p>Demandeur</p>
<input type="text" name="demandeur"/>

<?
mysql_close($connect);
?>

<br><br><br>
<a href="accueil.html">Retour à l'accueil</a>

<input name="submit" type="submit" value="Enregistrer" align="left"/>


</form>


c'est bon ça ?? meme avec ça , ma liste et le truc pour le numero de sortie sont vides et si je teste un enregistrement ya rien qui s'ajoute a la base
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 15:56
Pas tout à fait, tu as le droit d'avoir des requetes qui vont pré-remplir des champs si tu as envie.

Mais l'insert sera fait dans une autre page qui récuperera les données du formulaire (demandeur, date ...)
et qui va tout inserer dans une seule ligne de BD par exemple
// recuperation des donnees
$date = $_POST['date'];
$demandeur = $_POST['demandeur'];
// Validation des donnees
...

//Insertion 
$sql = "INSERT INTO sorties(date,demandeur) VALUES ('$date','$demandeur')";
... mysql_query($sql) ...

0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 15:59
donc le message que je t'ai envoyé avant ta reponse ca va? a peu prés ..
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:04
$ajout = "INSERT INTO sorties VALUES ('$sortie','$reference','$date','$demandeur')";

$query = mysql_query($ajout);
if($query)
{
echo("La sortie a été bien enregistré") ;
}
else
{
echo("L'enregistrement de la sortie a échoué") ;
}


pour le message comme quoi c'est bon ou pas ça va?

quand je test ya que le lien pour retourner a l'accueil
il m'affiche pas si c'est bon ou pas
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 16:07
Oui c'est beaucoup mieux, je ne vois juste pas trop a quoi ca sert la requete de num_sortie. Tes utilisateurs ont a saisir ce numero ? sinon il faut mieu que ca soit ta page deux qui genere le numero, ou que tu utilises un champs autoincrementé dans ta base de données.

Mais ca devrait deja etre beaucoup mieu.

Encore une remarque sur la date, tu y a surement deja pensé, mais au cas ou : il faudrait 'bloquer' la saisir de la date car un utilisateur pourra saisir 16/05/2008 un autre 16/5/08 ou 16-5-2008 ...
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:10
jai pas fait attention a ça
je lai juste mis dans " l ordre" pour mysql

le numero de sortie est pas a saisir mais devait etre recuperer par ma requete qui prend le dernier numero de la liste et qui rajoute logiquement 1 pour lenregistrement suivant

pour l'autoincrementation, ma table veut pas , va savoir pourquoi
donc j'ai abandonné l'idée

comment je pourrais le faire directement sur l'autre page?
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 16:14
Pourquoi elle ne veut pas l'autoincrementation ? ca marche bien normalement. Il faut mettre un type integer sur ta colonne avec option autoincrement, et ne pas affecter de valeur a la colonne quand tu inseres

Sinon tu enlèves ce qui concerne ce numero d ordre dans le formulaire et tu le recole dans la deuxieme page avant ton INSERT en adaptant le nom des variables

$req0 = "SELECT MAX(IdSortie)+1 as num_sortie FROM sorties;";
$res0=@mysql_query($req0;$db);
$numSortie="Undetermined";

if ($res0 != null && @mysql_num_rows($res0) == 1 ){
$line=@mysql_fetch_assoc($res0);
$sortie=$line["num_sortie"];
} 
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:16
et avec l'autoincrementation j'ai rien a ajouter comme requete ??
(je faisais une auto incrementation en varchar hi hi )
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 16:18
Non tu modifies juste pour ne plus préciser le numéro en precisant les colonnes
INSERT INTO sorties(reference, data, demandeur) VALUES ('$reference','$date','$demandeur')
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:18
ok ca marche :)
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:20
bon le message de confirmation s'affiche toujours pas

et niveau formulaire la liste est toujours desesperemment vide
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:25
c 'est possible qu il y est un probleme dans la connexion ? meme si aucun message d'erreur d'affiche?

parce que la ma liste reste vide, le message de confirmation vient pas, et pour d'autres pages qui affichent des données dans un tableau il y a aucun retour aussi
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 16:32
essai de mettre en haut de ton code php dans le sdeux pages
error_reporting(E_ALL);


Problème de connexion je pense pas sinon il y'aurait un message, mais peut-etre des retours 'vide'.
Question bete : il y a bien deja de sdonnées dans ta base (les references ) ?
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
16 mai 2008 à 16:34
oui :) ya des trucs

en haut ou? dans le php?

> je lai mis dans le php (jpense que c'est la sa place) mais ça a rine changé ou afficher

merci en tout cas de mavoir un peu aider
je dois quitter mais merci beaucoup quand meme
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 mai 2008 à 16:35
oui dans les premiers <? ca permetra de relever toutes les erreurs meme mineures
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 mai 2008 à 17:39
Re,

Je suis de retour et je vois qu'on t'as bien aidé depuis :) J'ai de la lecture c'est bien ^^

Juste une petite remarque d'une erreur qui s'est glissée :
$res0=@mysql_query($req0;$db);

Il faut une virgule et non un point virgule.
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
21 mai 2008 à 09:13
merci beaucoup de votre aide :)

tout marche !)

je dois travailler avec pear a present mais c'est une autre histoire et encore plus compliqué !
(cf discussion " FATAL ERROR Pear")
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
21 mai 2008 à 09:14
merci
0