Problème d'insertion avec Ajax et Php

Fermé
senegalsn Messages postés 4 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016 - Modifié par jordane45 le 21/10/2016 à 13:51
senegalsn Messages postés 4 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016 - 22 oct. 2016 à 02:05
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
21 oct. 2016 à 13:53
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 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016
21 oct. 2016 à 17:17
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 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016 > senegalsn Messages postés 4 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016
21 oct. 2016 à 17:20
je veux après insertion la page ne se redirige pas reste sur la fenêtre modale
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > senegalsn Messages postés 4 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016
21 oct. 2016 à 17:57
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > senegalsn Messages postés 4 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016
21 oct. 2016 à 17:56
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 Date d'inscription vendredi 21 octobre 2016 Statut Membre Dernière intervention 22 octobre 2016
22 oct. 2016 à 02:05
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