Problème d'insertion avec Ajax et Php

senegalsn Messages postés 4 Statut Membre -  
senegalsn Messages postés 4 Statut Membre -
Bonjour,
je travaille sur un site d’informations sport sujet de mémoire. Mais j’ai des difficultés avec mes traitements et j’aurais besoin d’aides.
J’ai 2 pages php dont une classe php nommée « Sports_Class.php » qui gére les insertions, modifications et suppressions de sport. Et une page php « Sports.php » qui liste les sports et permet d’ajouter un nouveau sport. Dans « Sports.php » j’ai une fenêtre modale qui gére les insersions. Mais chaque fois que je fais une nouvelle insertion rien ne se passe.
Merci de bien vouloir m’aider.
Sports_Class.php :
<?php
include_once 'connexionBD.php';

class Sports {
private $nomsSports;
private $codesSports;
private $ordresSports;
private $class;
private $activer;
private $bdd;

public function __construct($nomsSports, $codesSports, $ordresSports, $class, $activer) {
$nomsSports = $nomsSports;
$codesSports = $codesSports;
$ordresSports = $ordresSports;
$class = $class;
$activer = $activer;

$this->nomsSports = $nomsSports;
$this->codesSports = $codesSports;
$this->ordresSports = $ordresSports;
$this->class = $class;
$this->activer = $activer;
$this->bdd = bdd();
}

//---------------- Vérification avant Inscription -------------- 
public function verif() {
$req = $this->bdd->prepare('SELECT * FROM sports WHERE nomsSports=:nomsSports OR codesSports=:codesSports OR ordresSports=:ordresSports OR class=:class');
$req->execute(array('nomsSports' => $this->nomsSports, 'codesSports' => $this->codesSports, 'ordresSports' => $this->ordresSports, 'class' => $this->class));
$rep = $req->fetch();
if ($rep['nomsSports'] == $_POST['nomsSports']) {
$erreur = 'Nom du Sport déja utilisé !';
return $erreur;
} else if ($rep['codesSports'] == $_POST['codesSports']) {
$erreur = 'Code du Sport déja utilisé !';
return $erreur;
} else if ($rep['ordresSports'] == $_POST['ordresSports']) {
$erreur = 'Numero d\'Ordre du Sport déja utilisé !';
return $erreur;
} else if ($rep['class'] == $_POST['class']) {
$erreur = 'Classe CSS du Sport déja utilisé !';
return $erreur;
} else {
return 'ok';
}
}

//----------------- FONCTION AJOUTER UN NOUVEAU CLUB -----------------------------------------------------------------
public function ajouterSports() {
$req = $this->bdd->prepare('INSERT INTO sports (nomsSports, codesSports, ordresSports, class, activer VALUES(:nomsSports,:codesSports,:ordresSports,:class,:activer)');
$req->execute(array('nomsSports' => $this->nomsSports, 'codesSports' => $this->codesSports, 'ordresSports' => $this->ordresSports, 'class' => $this->class, 'activer' => $this->activer));
return 1;
}
}


Sports.php :
<?php
session_start();
include_once 'fonctions/connexionBD.php';
include_once 'fonctions/Sports_class.php';
$bdd = bdd();

if (isset($_POST['enregistrer'])) {
$sports = new Sports($_POST['nomsSports'], $_POST['codesSports'], $_POST['ordresSports'], $_POST['class'], $_POST['activer']);
$verif = $sports->verif();
if ($verif == 'ok') { 
if ($sports->ajouterSports()) {
$success = ' Sport : "' . $_POST['nomsSports'] . '" ajouté avec succès ';
} else {
$erreur = 'Une erreur est survenue';
}
} else {
$erreur = $verif;
}

if (isset($_POST['ajax'])) {
if ($success) {
return $success;
} else {
return $erreur;
}
}
}
?>


<div class="">

<div> 
<!-- Button trigger modal -->
<a href="#" rel="nofollow noopener noreferrer" target="_blank" class="btn btn-primary" data-toggle="modal" data- title="Ajouter">
Ajouter
</a>
</div> 

<table class="table table-bordered table-responsive table-hover" >
<thead>
<tr>
<th>#</th>
<th>Sports</th>
<th>Codes</th>
<th>Ordres</th>
<th>Classes</th>
<th>Etats</th>
<th colspan="3">Actions</th>
</tr>
</thead>
<tbody>
<?php
$repListeSports = $bdd->query('SELECT * FROM sports order by ordresSports');
while ($donListeSports = $repListeSports->fetch()) {
?>
<tr>
<td id="idSports"><?php echo $donListeSports['idSports']; ?></td>
<td><?php echo $donListeSports['nomsSports']; ?></td>
<td><?php echo $donListeSports['codesSports']; ?></td>
<td><?php echo $donListeSports['ordresSports']; ?></td> 
<td><?php echo $donListeSports['class']; ?></td>
<td><?php echo $donListeSports['activer']; ?></td>

</tr>
<?php
}
$repListeSports->closeCursor(); // Termine le traitement de la requête
?>
</tbody>
</table> 

</div>

<!-- MODAL AJOUTER SPORT -->
<div class="modal fade" id="modalAjouterSport" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form class="form-horizontal" name="" action="Sports.php" method="POST">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button>
<h4 class="modal-title" id="myModalLabel">
Ajouter un nouveau Sport
</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="form-group col-lg-12">
<div class="form-group">
<label for="nomsport" class="col-sm-3 control-label">Nom du Sport</label>
<div class="col-sm-9">
<input type="text" placeholder="Nom Sport" name="nomsSports" class="form-control" id="nomsport">
</div>
</div>
<div class="form-group">
<label for="codesport" class="col-sm-3 control-label">Code du Sport</label>
<div class="col-sm-9">
<input type="text" placeholder="Code Sport" name="codesSports" class="form-control" id="codesport">
</div>
</div>
<div class="form-group">
<label for="nomsport" class="col-sm-3 control-label">Numero Ordre</label>
<div class="col-sm-9">
<input type="text" placeholder="Ordre Sport" name="ordresSports" class="form-control" id="nomsport">
</div>
</div>
<div class="form-group">
<label for="codesport" class="col-sm-3 control-label">Classe CSS</label>
<div class="col-sm-9">
<input type="text" placeholder="Classe CSS" name="class" class="form-control" id="codesport">
</div>
</div>
<div class="form-group">
<label for="etat" class="col-sm-3 control-label">Etat</label>
<div class="col-sm-9">
<select class="form-control" name="activer" id="etat">
<option>Etat du Sport</option>
<option value="0">Desactiver</option>
<option value="1">Activer</option>
</select> 
</div>
</div> 
</div> 
</div>
</div>
<div class="modal-footer">
<?php
if (isset($success)) {
?>
<div class="alert alert-success"><i class="icon-ok icon-white"></i>
<?php echo $success; ?>
</div>
<?php
} else if (isset($erreur)) {
?>
<div class="alert alert-danger"><i class="icon-ok icon-white"></i>
<?php echo $erreur; ?>
</div>
<?php
}
?>
<div id="result"></div>
<button type="button" class="btn btn-primary" >
<img src="images/Icones/btnEnregistrer.png" />
Enregistrer</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->


<script>
$(function () { $('#modalAjouterSport').modal('hide'); }); 
$(function () {
$('#modalAjouterSport').on('submit', function(e) {
e.preventDefault();
$.post($(this).attr( "action" ), $(this).serialize() + '&ajax=1').done(function (data) {
$('#result').html(data);
});
});
}); 
</script>

EDIT : Ajout des balises de code

A voir également:

2 réponses

jordane45 Messages postés 40050 Statut Modérateur 4 758
 
Bonjour,

Commence par activer la gestion des erreurs PDO dans ta class :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Puis regarde dans la console de ton navigateur si tu n'aurais pas des erreurs sur l'ajax lorsque tu essaies de faire une insertion ( je te conseille d'utiliser la console de FIREBUG pour FireFox je la trouve plus parlante que celle des autres navigateurs)


1
senegalsn Messages postés 4 Statut Membre
 
Merci de votre aide Jordane45 : mais il me met :
Fatal error: Cannot use object of type stdClass as array in C:\xampp\htdocs\ActuSports\parametrages\Sports\Sports.php on line 56
l'insertion marche mais la récupération et l'affichage signalent cette erreur.
e.preventDefault(); : ne marche pas
0
senegalsn Messages postés 4 Statut Membre > senegalsn Messages postés 4 Statut Membre
 
je veux après insertion la page ne se redirige pas reste sur la fenêtre modale
0
jordane45 Messages postés 40050 Statut Modérateur 4 758 > senegalsn Messages postés 4 Statut Membre
 
Pour ça il ne faut pas faire du SUBMIT (chose que tu as faite...) mais là encore il faut passer par de l'AJAX.
Il te faut donc un fichier à part dans lequel tu mettras le code php pour faire l'insertion et l'appeller via la fonction AJAX de jquery.
Tu as un exemple ici :https://forums.commentcamarche.net/forum/affich-33258760-remplir-un-formulaire-dynamiquement-en-fonction-d-une-combobox#2
0
jordane45 Messages postés 40050 Statut Modérateur 4 758 > senegalsn Messages postés 4 Statut Membre
 
Pour le message d'erreur... change, dans la connexion à ta BDD le fetch par défaut.
Si tu as pris celui de l'exemple il est en FETCH_OBJ
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

Il faut le mettre en FETCH_ASSOC
0
senegalsn Messages postés 4 Statut Membre
 
Merci jordane45 de votre aide.
Je l'ai fait mais rien. ya pas d'insertion dans la base. Pouvez vous m’éclaircir un peu plus/
Voici connexionDB.php
<?php

function bdd() {
try {
$bdd = new PDO('mysql:host=localhost;dbname=actusports', 'gamouza', 'bayebou');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
die('Echec lors de la connexion : ' . $e->getMessage());
}
return $bdd;
}

?>
0