7935 sujets

Développement web côté serveur, CMS

Bonjour je rencontre 2 bugs peut être logique pour certains, et je remercie par avance ceux qui peuvent m'éclairer.

Mon premier bug:

Dans certaines sections la mise à jour des input via update dans un formulaire fonctionne parfaitement mais dans d'autres sections, comme celle ci par exemple, il m'est impossible de mettre à jour un input en effaçant complètement son contenu, je dois laisser au moins une lettre ou un espace sinon lorsque je test et que j'enregistre, mon bouton "envoyer le formulaire" agit comme si j'actualisais ma page ?????? Je n'ai pas mis d'obligation c'est à dire que l'utilisateur peut laisser cette case vide.



Mon deuxième bug:
Lorsque je code une page ou il y a un formulaire pour insérer ou mettre à jour des données, si j'ajoute plus d'une input à la fois
( $_POST['lienRs1'], $_POST['rs2'], $_POST['lienRs2'], $_POST['rs3'], $_POST['lienRs3'] ...)
lorsque je test une insertion ou une mise à jour et que j'enregistre, mon bouton "envoyer le formulaire" agit comme si j'actualisais ma page alors que si j'ajoute une ligne à la fois puis enregistre
( $_POST['lienRs1']
et test, et bien ça fonctionne ???




Voici le code de ma page about-section.php:

Code :

<?php
 
include ('session.php');
 
$about = $bdd->query('SELECT * FROM about WHERE id = 1');
 
$about = $about ->fetch(PDO::FETCH_ASSOC);
 
 
if(isset($_POST['contenu'], $_POST['rs1'], $_POST['lienRs1'], $_POST['rs2'], $_POST['lienRs2'], $_POST['rs3'], $_POST['lienRs3'])) {
	if( !empty($_POST['contenu']) AND !empty($_POST['rs1']) AND !empty($_POST['lienRs1']) AND !empty($_POST['rs2']) AND !empty($_POST['lienRs2']) AND !empty($_POST['rs3']) AND !empty($_POST['lienRs3'])) {
		$contenu = htmlspecialchars($_POST['contenu']); $rs1 = htmlspecialchars($_POST['rs1']); $lienRs1 = htmlspecialchars($_POST['lienRs1']); $rs2 = htmlspecialchars($_POST['rs2']); 
                $lienRs2 = htmlspecialchars($_POST['lienRs2']); $rs3 = htmlspecialchars($_POST['rs3']); $lienRs3 = htmlspecialchars($_POST['lienRs3']);
 
			$update = $bdd->prepare('UPDATE about SET contenu = ?, rs_1 = ?, lien_rs1 = ?, rs_2 = ?, lien_rs2 = ?, rs_3 = ?, lien_rs3 = ?, date_maj = NOW() WHERE id = 1');
			$update->execute(array($contenu, $rs1, $lienRs1, $rs2, $lienRs2, $rs3, $lienRs3));
                        header('Location: ../admin/about.php');
			exit;
	}
 
}	else {
 
			if(isset($_POST['contenu'], $_POST['rs1'], $_POST['lienRs1'], $_POST['rs2'], $_POST['lienRs2'], $_POST['rs3'], $_POST['lienRs3'])) {
	                    if( !empty($_POST['contenu']) AND !empty($_POST['rs1']) AND !empty($_POST['lienRs1']) AND !empty($_POST['rs2']) AND !empty($_POST['lienRs2']) AND !empty($_POST['rs3']) AND !empty($_POST['lienRs3'])) {
		                $contenu = htmlspecialchars($_POST['contenu']); $rs1 = htmlspecialchars($_POST['rs1']); $lienRs1 = htmlspecialchars($_POST['lienRs1']); $rs2 = htmlspecialchars($_POST['rs2']); 
                                $lienRs2 = htmlspecialchars($_POST['lienRs2']); $rs3 = htmlspecialchars($_POST['rs3']); $lienRs3 = htmlspecialchars($_POST['lienRs3']);
 
				$ins = $bdd->prepare('INSERT INTO about (id, contenu, rs_1, lien_rs1, rs_2, lien_rs2, rs_3, lien_rs3, date_crea) VALUES (1, ?, ?, ?, ?, ?, ?, ?, NOW())');
 
				$ins->execute(array($contenu, $rs1, $lienRs1, $rs2, $lienRs2, $rs3, $lienRs3));
 
				header('Location: ../admin/about.php');
 
				exit;
 
   				} 
			} 
 
 
} 
?>



Ma page about-section.php est incluse dans cette page, qui se nomme about.php:

Code :


<?php
 
/** 
   *
   * Page Rédaction / Édition.
   *
*/
 
 
include ('includes/bdd-connect.php');
 
include ('includes/session.php');
 
include ('includes/about/about-section.php');
?>
 
 
 
<DOCTYPE html>
...
</head>
 
<body id="body-scroll">
 
	<?php
 
	include ('includes/menu.php');
 
	?>
 
 
	<form class="form-pst" method="POST" enctype="multipart/form-data" name="formComplet">
 
            <div class="space">
                <textarea style="height:100px; text-align:left;" class="input-style" name="contenu" placeholder="À propos de moi"><?php echo $about['contenu']; ?></textarea>
            </div>
 
 
            <div class="space">	
 
                <input class="input-style" type="text" name="rs1"     placeholder="Nom réseaux sociaux 1 " value="<?php echo $about['rs_1']; ?>">
 
            </div>
 
 
            <div class="space">	
 
                <input class="input-style" type="text" name="lienRs1" placeholder="Lien réseaux sociaux 1" value="<?php echo $about['lien_rs1']; ?>">
 
            </div>
 
 
            <div class="space">	
 
                <input class="input-style" type="text" name="rs2"     placeholder="Nom réseaux sociaux 2" value="<?php echo $about['rs_2']; ?>">
 
            </div>
 
 
            <div class="space">	
 
                <input class="input-style" type="text" name="lienRs2" placeholder="Lien réseaux sociaux 2" value="<?php echo $about['lien_rs2']; ?>">
 
            </div>
 
 
            <div class="space">	
 
                <input class="input-style" type="text" name="rs3"     placeholder="Nom réseaux sociaux 3" value="<?php echo $about['rs_3']; ?>">
 
            </div>
 
 
            <div class="space">	
 
                <input class="input-style" type="text" name="lienRs3" placeholder="Lien réseaux sociaux 3" value="<?php echo $about['lien_rs3']; ?>">
 
            </div>
 
 
 
	    <div class="space-submit">
 
		<input id="send-button" class="input-style" type="submit" value="Enregistrer">
 
	    </div>
 
			</form>
		</div>
	</div>	
 
 
</body>
</html>
C'est pas bien la coloration syntaxique ?

C'est que j'appelle "coder à l'arrache" !

Après décrassage de "about-section.php", on obtient ceci :
<?php
 
include ('session.php');
$about = $bdd->query('SELECT * FROM about WHERE id = 1');
$about = $about ->fetch(PDO::FETCH_ASSOC);

if(isset($_POST['contenu'], $_POST['rs1'], $_POST['lienRs1'], $_POST['rs2'], $_POST['lienRs2'], $_POST['rs3'], $_POST['lienRs3'])) {
    if(
        !empty($_POST['contenu']) AND
        !empty($_POST['rs1']) AND
        !empty($_POST['lienRs1']) AND
        !empty($_POST['rs2']) AND
        !empty($_POST['lienRs2']) AND
        !empty($_POST['rs3']) AND
        !empty($_POST['lienRs3'])
    ) {
        $contenu = htmlspecialchars($_POST['contenu']);
        $rs1 = htmlspecialchars($_POST['rs1']);
        $lienRs1 = htmlspecialchars($_POST['lienRs1']);
        $rs2 = htmlspecialchars($_POST['rs2']);
        $lienRs2 = htmlspecialchars($_POST['lienRs2']);
        $rs3 = htmlspecialchars($_POST['rs3']);
        $lienRs3 = htmlspecialchars($_POST['lienRs3']);
 
        $update = $bdd->prepare('UPDATE about SET contenu = ?, rs_1 = ?, lien_rs1 = ?, rs_2 = ?, lien_rs2 = ?, rs_3 = ?, lien_rs3 = ?, date_maj = NOW() WHERE id = 1');
        $update->execute(array($contenu, $rs1, $lienRs1, $rs2, $lienRs2, $rs3, $lienRs3));
        header('Location: ../admin/about.php');
        exit;
    } elseif(
        !empty($_POST['contenu']) AND
        !empty($_POST['rs1']) AND
        !empty($_POST['lienRs1']) AND
        !empty($_POST['rs2']) AND
        !empty($_POST['lienRs2']) AND
        !empty($_POST['rs3']) AND
        !empty($_POST['lienRs3'])
    ) {
        $contenu = htmlspecialchars($_POST['contenu']);
        $rs1 = htmlspecialchars($_POST['rs1']);
        $lienRs1 = htmlspecialchars($_POST['lienRs1']);
        $rs2 = htmlspecialchars($_POST['rs2']);
        $lienRs2 = htmlspecialchars($_POST['lienRs2']);
        $rs3 = htmlspecialchars($_POST['rs3']);
        $lienRs3 = htmlspecialchars($_POST['lienRs3']);

        $ins = $bdd->prepare('INSERT INTO about (id, contenu, rs_1, lien_rs1, rs_2, lien_rs2, rs_3, lien_rs3, date_crea) VALUES (1, ?, ?, ?, ?, ?, ?, ?, NOW())');
        $ins->execute(array($contenu, $rs1, $lienRs1, $rs2, $lienRs2, $rs3, $lienRs3));
        header('Location: ../admin/about.php');
        exit;
    } 
} 
?>

Peu de chance d'arriver à faire une insertion.
Quand on veut faire un "update" dans une BDD, généralement il y a un <input type="hidden" name="id" value="xxxx" /> dans le formulaire pour être sûr de faire l'update sur le bon record de la table.
Et si value est vide, alors on fait un "insert into table".

Merci de poster du code propre avant d'appeler SOS-DEPANNAGE

Je file voir les Bleus pour me remonter le moral après cette vision d'horreur Smiley biggrin
Modifié par bazooka07 (06 Jul 2018 - 20:00)
pardon je ne savais pas que je pouvais mettre un code coloré pour un rendu plus propre, mais c'est pas bien tu m'as achevé avec ta vision d'horreur Smiley lol Smiley lol Smiley lol donc si j'ai bien compris j'ai mal construit mon formulaire ?

Mon bug a été résolu par la suppression de la ligne if(!empty($_POST['footerSection'])) {} qui empêchait effectivement un input vide lors de l'insertion et la mise à jour.

J'avais zappé, j'ai tellement vu le code que je me posais même plus la question sur l'utilité, je vérifiais seulement les erreurs de syntaxe !!!!
Modifié par kodjoed (07 Jul 2018 - 04:06)