У меня есть база данных с данными о плотинах.У меня есть один данные для каждой плотины в год.Я звоню в свою базу данных, чтобы получить набор данных, и он работает.Но теперь я хотел бы выбрать данные только за один год.
У меня есть функция в php для подключения к моей базе данных.Я хотел бы позвонить, когда отправляю свою форму (с указанием года).
Полагаю, мне нужно использовать AJAX.Но моя строка "xhr.open ('GET', ...)" не выполняет функцию.И я не знаю, что добавить в addEventListener, так как мой php ничего не возвращает.
Я не использую jQuery, поэтому я ищу способ вызвать мою функцию php, без нее, если это возможно.
Вот мой код:
map.js
//AJAX pour appeler la fonction PHP connectBDD()
//envoie de la requête
var xhr = new XMLHttpRequest();
xhr.open('GET',"connexion.php?anneeSelectionnee='2016'");
xhr.send(null);
//reception des données
listAnnees = document.getElementById('annee');
if (listAnnees){
listAnnees.addEventListener('change',function(event){
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText); //according to Gerars Cuadras comment
event.preventDefault();
console.log("Oui oui je suis là");
//supprimer_ouvrages();
}
});
Я не показываю свой php-файл «connexion.php», потому что это простое соединение с базой данных, которое затем вызывает функции javascript для построения плотин на карте.(изначально он был в функции connectBDD () в файле, но я не знал, как вызывать функцию в AJAX, а не в файле).
index.php
<select name="annee" id="annee">
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
</select>
Другая попытка
Я также пытался без AJAX, и это работало (вызывать функцию php), однако каждый раз была перезагрузка страницы, так что мой выборбыл потерян .. (с connectBDD () весь код в connectxion.php)
<form action="index.php">
<select name="annee" id="annee">
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
</select>
<input type="submit" id="envoyer" name="envoyer" value="Changement d'années">
</form>
if (isset($_POST['envoyer'])) {
?>
<script type="text/javascript">
supprimer_ouvrages();
</script>
<?php
connectBDD('2016');
}
Извините, я знаю, что это не ясно, но это было показать, что я пытался.
Мой вопрос: Как я могу выполнить функцию php (или файл, если функция невозможна) при отправке моей формы, без перезагрузки страницы?
Буду признателен за любую помощь !!
EDIT
"xhr.open ('GET', ...)", кажется, называетсяпо сути моей сети.
Второе редактирование Итак, вот мой файл connectxion.php.Я показываю это в функции (как во второй попытке), но при попытке ajax я просто подавляю функцию и выполняю код без функции.
<script type="text/javascript" src="l93_to_wgs84.js"></script>
<script type="text/javascript" src="dictionnaryFunctions.js"></script>
<?php
//script de connection à la base de données et de récupération des informations
function connectBDD($anneeSelectionnee){
echo 'Code is executed !'
//connexion a la base de donnees
$host_bdd='localhost';
$name_bdd='smthg';
$user_bdd='smthg';
$pass_bdd='smthg';
try{
$bdd = new PDO ("pgsql:host=".$host_bdd.";dbname=".$name_bdd."", "".$user_bdd."", "".$pass_bdd."") or die(print_r($bdd->errorInfo()));
$bdd->exec("SET NAMES utf8");
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(Exeption $e){
die("Erreur!".$e->getMessage());
};
//connexion réussie
?>
<script type="text/javascript">
attenteConnexion(1);
</script>
<?php
// On récupère les données
//on ne prend que les données du cours d'eau qui nous intéresse
$reponse = $bdd->query('SELECT * FROM ouvrages');
//On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
//on remplace les "_" par des espaces pour une meilleure lisibilité
$donnees = str_replace("_"," ",$donnees);
//coordonnees de l'ouvrage
$latitude = $donnees['xl93'];
$longitude = $donnees['yl93'];
$impact = $donnees['impact'];
//toutes les informations que l'on souhaite afficher dans la fiche d'identité
//si on veut afficher une informations supplémentaire, c'est dans ce tableau qu'il faut ajouter une ligne
$identite = array(
'Nom' => $donnees['nom'],
'ROE' => $donnees['idroe'],
'Commune' => $donnees['commune'],
'Syndicat' => $donnees['syndicat'],
'Projet' => $donnees['projet'],
'Type d\'ouvrage' => $donnees['typeouvr'],
'Sous-type d\'ouvrage' => $donnees['sstypeouvr'],
'Passe à poisson' => $donnees['passepoiss'],
'Système de montaison' => $donnees['systmont'],
'Système de dévalaison' => $donnees['systdev'],
'Usage' => $donnees['usage'],
'Présence d usage' => $donnees['presenceus'],
'Etat' => $donnees['etat'],
'Mort par dévalaison (%)' => $donnees['mortdeval'],
'Franchissabilité à la montaison' => $donnees['franchiss'],
'Année' => $donnees['anneemaj']);
$courseau = $donnees['courseau'];
$espece = $donnees['espece'];
$annee = $donnees['anneemaj'];
?>
<script type="text/javascript">
creation_ouvrage(lambert93toWGPS('<?PHP echo $latitude;?>','<?PHP echo $longitude;?>')['latitude'],lambert93toWGPS('<?PHP echo $latitude;?>','<?PHP echo $longitude;?>')['longitude'],'<?PHP echo $impact;?>',<?PHP echo json_encode($identite);?>,'<?PHP echo $courseau;?>','<?PHP echo $espece;?>','<?PHP echo $annee;?>','<?PHP echo $anneeSelectionnee;?>');
</script>
<?php
}
?>
<script type="text/javascript">
creation_liste();
</script>
<?php
$reponse->closeCursor(); // Termine le traitement de la requête
echo $anneeSelectionnee;
}
?>
Если я могу использовать 'xhr.open ('GET', ..) 'с функцией PHP вместо php-файла, я хотел бы знать хитрость:)