Interprétation php + bouton submit
RésoluJe développe un site. J'utilise des "si... alors... sinon...." pour savoir ce que j'affiche selon si l'utilisateur est connecté ou non. Mon problème: tout est affiché, donc mes conditions ne sont pas prises en compte. Voici un exemple :
if ( (empty ($_SESSION["pseudonyme"]) ) || ($_SESSION["pseudonyme"] == "") )
{ ?>
<a href="pageconnexion.php" target=_top>Connexion</a><br>
<a href="pageinscription.php" target=_top>Inscription</a><br>
<?}
else
{?>
<a href="pagemoncompte.php" target=_top> Mon compte </a> <br>
<?
}
?>
De plus, j'ai un autre soucis, peut être est-il en rapport avec le premier (?). J'ai des formulaires avec un bouton "enregistrer" puis un bouton "annuler" tels que :
<input type="submit" value="Enregistrer" onclick="window.location.replace('codeconnexion.php')"/>
<input type="button" value="Annuler" onclick="window.location.replace('index.php')"/>
Lorsque je clique sur "Enregistrer" (donc bouton submit), il y a un gros bug: "Apache HTTP Serveur a rencontré un problème et doit fermer...". Le bouton "Annuler" fonctionne correctement en me redirigeant sur la page index.php . Je précise que le formulaire en question contient bien dans ses paramètres "action="fichier-executant-le-code.php"" ...
En espérant avoir été assez claire...
Je vous remercie d'avance pour votre aide.
32 réponses
Plusieurs échanges portent sur un problème d'affichage conditionnel en PHP selon la session utilisateur, où tout s'affiche alors que les conditions devraient masquer certaines options. Des solutions évoquées incluent éviter les gestionnaires onclick sur les boutons d'enregistrement et se fier à l'action du formulaire, car un onclick peut perturber l'envoi et provoquer des redirections prématurées. D'autres observations évoquent un plantage d'Apache lié possiblement à des fermetures MySQL et à des pratiques comme @mysql_close(), ce qui invite à vérifier les ressources et les appels de fermeture. En cas de tests, les échanges indiquent des essais et des retours d'expérience variés, allant de la révision du code à des redémarrages serveur et à des vérifications d'architecture.
-
Oui !!
... Et encore merci beaucoup pour ton aide.
Bon week end !! -
Ah oui en effet c'est très bizarre Oo je le met jamais m'enfin bref, comme tu dis tant que ça marche :p...
-
J'ai trouvé le problème avec le serveur apache! Mais je ne sais pas vraiment l'explication. A la fin de mes fichiers, j'ai enlevé : @mysql_close() ...
Bref! tant que ça marque =p -
Pas de problème ;)
-
oui j'ai redémarrer l'ordi, je vais essayé de le réinstaller (mais plus tard, ce n'est pas MON ordi ^^), je te dirais le résultat...
Merci ! -
C'est ton windows qui doit faire planter ton apache... T'as essayer de redémarrer l'ordi ?
Ou plus radicale (non pas reformatter quand même =_=) désinstaller le logiciel et le ré-installer ? -
Le bug ne provient pas du bouton submit! C'était quasi-sur mais maintenant ça l'est à 100% xD En effet j'ai une page qui affiche des infos grâce à des requêtes et selon des conditions, et juste quand je demande d'afficher la page, il y a le rapport d'erreur...
voici le code: (c'est pour afficher des articles)
<div id="corps">
<h2> Les articles </h2><br>
<table>
<tr>
<td> Afficher les articles de la catégorie : </td>
<td><select NAME="categorie">
<option> Choisir categorie </option>
<?php $req=mysql_query("Select categorie from CATEGORIE") or die ("Erreur requete: ".mysql_error());
if( mysql_num_rows($req) == 0 )
{ echo 'Problème sur la BDD';
header('location: index.php');
}
else
{ $i = 0;
$trouve =0;
while ( ( $i<mysql_num_rows($req) ) && ($trouve ==0) )
{
$donnee = mysql_fetch_array($req);?>
<option VALUE="<?php echo ' ' .$donnee["categorie"]. ' ';?>"><?php echo ' ' .$donnee["categorie"]. ' ';
$i=$i+1;
}
}?>
</select>
</td>
</tr>
</table>
<br><br>
<?php
$req = mysql_query("Select reference, libelle, stock, photo, prixunitaireht, souscategorie from article Order by souscategorie, prixunitaireht;") or die ("Erreur requete: ".mysql_error());
if( mysql_num_rows($req)<1)
{
?> <p> Aucun article n'est enregistré ! </p> <?php
}
else { ?>
<table class="affichage">
<tr>
<td><b>Sous catégorie</b></td>
<td><b>Référence</b></td>
<td><b>Libellé</b></td>
<td><b>Prix TTC</b></td>
<td><b>Stock disponible</b></td>
<td><b>Photo</b></td>
<td><b>Fiche article</b></td>
<td><b>Réserver</b></td>
</tr>
<?php
while( $donnee = mysql_fetch_array($req) )
{
// Sortie du résultat dans le tableau
?>
<tr>
<td align=center> <?php echo $donnee['souscategorie']; ?></td>
<td align=center> <?php echo $donnee['reference']; ?></td>
<td align=center> <?php echo $donnee['libelle']; ?></td>
<td></td>
<td align=center> <?php echo $donnee['stock']; ?></td>
<td align=center> <?php echo $donnee['photo']; ?></td>
<td></td>
<td>Panier</td>
</tr>
<?php
}
}
@mysql_close()
?>
</table>
</div>
La liste déroulante ne sert pas à grand chose pour le moment, je l'utiliserai dans le WHERE quand je saurais récupérer la valeur de la liste déroulante au moindre click sur celle ci ^^' -
C'est fait, et je viens à nouveau de le refaire, rien n'y fait ...
Merci quand même de m'avoir accordé ton temps ! -
Arrête appache et redémarre-le ;)
-
j'ai remplacé le code, en ayant bien enregistré et actualisé, mais malheureusement j'ai quand même le bug de apache...
Merci quand même pour le code beaucoup plus simple en effet! =) -
Sorry double post, pas vu qu'il y avait une autre page ><
-
Euh... T'aurais pas plus compliquer ?
Pourquoi faire simple quand on peut faire compliquer c'est ça ? :p
Non sérieux, avec un code aussi charger, tu m'étonne qu'apache plante :p
Essaye plutôt ça :<?php // Inclusion et execution du fichier db.php require('connexionBDD.php'); if(!isset($_POST["pseudo"]) || !isset($_POST["mdp"]) || empty($_POST["pseudo"]) || empty($_POST["mdp"])){ // Cas ou login et motdepasse n'xistent pas ou sont vides echo 'Attention, remplissez tous les champs.'; } else{ // Recherche des utilisateurs. $req = mysql_query("SELECT * FROM client WHERE pseudonyme='".$_POST["pseudo"]."' AND motdepasse='".$_POST["mdp"]."'") or die ("Erreur requete: ".mysql_error()); if(mysql_num_rows($req) == 0){ // si utilisateur non trouvé echo 'Mauvais login ou mauvais mot de passe !'; @mysql_close(); header('location: index.php'); } else{ // sinon echo "Logs OK !"; @mysql_close(); } } ?>
Plus court et moins lourd non ? -
Boulet ! ...désolée xD
<?php
// Inclusion et execution du fichier db.php
require('connexionBDD.php');
if(empty($_POST["pseudo"]) || empty($_POST["mdp"]))
{ // === Cas ou login et motdepasse sont vides
echo 'Attention, remplissez tous les champs.';
}
else
{
// Recherche des utilisateurs.
$req = mysql_query("Select pseudonyme ,motdepasse from client") or die ("Erreur requete: ".mysql_error());
if( mysql_num_rows($req) == 0 )
{ echo 'Problème sur la BDD';
header('location: index.php');
}
else
{ $i = 0;
$trouve =0;
while ( ( $i<mysql_num_rows($req) ) && ($trouve ==0) )
{
$donnee = mysql_fetch_array($req);
if ( ($donnee['Pseudo']==$_POST["pseudo"]) && ( $donnee['motdepasse']==$_POST["mdp"] ))
{ $trouve =1;
$_SESSION["pseudonyme"]=$donnee["pseudo"];
}
$i=$i+1;
}
if( $trouve == 0)
{ header('location: index.php');
}
}
}
@mysql_close();
header('location: index.php');
?> -
<html>
<head>
<title>SITE<title>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="css_bleu.css" />
</head>
<body>
<div id="principal" width="100%">
<!-- Ici c'est l'en tête de la page -->
<div id="en_tete" align=center>
<img src="bannierepub.jpg" width="100%">
</div>
<!-- Ici c'est le menu/sommaire -->
<div id="menu" align=left>
<object data="pagesommaire.php" type="text/html"/>
</div>
<!-- Ici c'est le contenu principal de la page -->
<div id="corps">
<h2 align=center>Connexion</h2>
<br><br>
<form name="formco" method="post" action="codeconnexion.php">
<table>
<tr>
<td> Pseudonyme : </td>
<td><input type="text" name="pseudo"></td>
</tr>
<tr>
<td> Mot de passe : </td>
<td><input type="password" name="mdp"></td>
</tr>
</table><br>
<p>
<input type="submit" value="Enregistrer"/>  
<input type="button" value="Annuler" onclick="window.location.replace('index.php')"/>
</p>
</form>
</div>
</div>
</body>
</html> -
Oui le onclick était un test, je ne l'ai plus dans mon code, donc je récapitule mon code pour le bouton enregistrer :
<input type="submit" value="Enregistrer" />
J'ai également essayé en ajoutant un name et id, mais toujours le meme problème : rapport d'erreur d'apache... je précise aussi que dans mon form j'ai bien mis en action le bon fichier php... -
Pourquoi s'embêter avec un onClick ? Un submit exécute la page que tu as définit dans "action" de ton form, ou es le pb ?
-
J'ai essayé, mais ça ne marche pas, enfin en tout les cas pour le bouton annuler ça marche bien, donc ce n'est pas très grave pour la façon de coder je pense.
c'est vraiment ce submit qui pose un gros problème... c'est pas évident de continuer à coder avec ce soucis!
Enfin merci quand même de m'aider =) -
Pour la redirection, tu devrais utiliser "window.location.href" :]
-
Rep à biboo_ :
la partie "onclick=window.location.replace('blabla.php')" permet de rediriger vers une autre page en gros (elle fonctionne pour annuler), mais je l'ai enlevé pour le bouton submit, c'était juste un test foireux que j'avais fais, désespérément xD...
Rep à justoo76 :
comme l'a dit biboo_ c'est en effet un message d'apache : "Apache HTTP server a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru" ... Envoyer le rapport d'erreurs / Ne pas envoyer. Puis ensuite ma page affiche : "Erreur de chargement de la page .... Connexion réinitialisée".
Voilà, j'espère avoir été assez claire... -
Yeahh !!
Pour ton submit , tu peux poster ton code et expliquer plus en détail l'erreur ? stp
- 1
- 2