Foreach ne samble pas fonctionner en PHP 7
Résolu
chabinot
Messages postés
322
Date d'inscription
Statut
Membre
Dernière intervention
-
chabinot Messages postés 322 Date d'inscription Statut Membre Dernière intervention -
chabinot Messages postés 322 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de suivre une formation AJAX, je suis sur la partie mise à jour de la base de donnée, voici les différents codes :
1 - index.php
2 - galerie.js
3 - update_db.php
Il semblerait que la variable $sql ne se formate pas comme voulu
4 - connect.php
Je précise que j'utilise wampserver 3.0, php 7.0 et mon os est windows 10.
Je ne vois pas ou j'ai pu faire une erreur, tout semble bien fonctionner, sauf la mise à jour de la BDD.
Je suis en train de suivre une formation AJAX, je suis sur la partie mise à jour de la base de donnée, voici les différents codes :
1 - index.php
<?php
include_once('../Scripts/connect.php');
$titre = 'Galerie - Images';
$sql = "SELECT * FROM rubrique ORDER BY ch_rub_label ASC";
$rubs = $DB->query($sql);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//FR"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="galerie.js"></script>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= $titre; ?></title>
<link rel="stylesheet" href="../css/reset.css" />
<link rel="stylesheet" href="../css/layout.css" />
<link rel="stylesheet" href="../css/display.css" />
<link rel="stylesheet" href="../css/infos.css" />
</head>
<body>
<div class="content">
<div id="header">
<div id="logo">
<img src="../images/logo.png" width="160" height="30" alt="logo" />
</div>
<h1>Galerie d'images</h1>
</div>
<div id="sidebar">
<h2>--- Catégorie</h2>
<select name="categorie" id="categorie" onchange="charge_galerie(this.options[this.selectedIndex].value)">
<option value="none">Sélectionnez une catégorie...</option>
<?php
while ($rub = $rubs->fetch(PDO::FETCH_OBJ)) :
echo '<option value="'.$rub->ch_rub_folder.'">'.$rub->ch_rub_label.'</option>';
endwhile;
?>
</select>
<div id="informations">
<h2>--- Informations</h2>
<div id="texte">
<img id="infos_thumb" src="../images/fruits/thumbs/citron.jpg" width="90" height="68" alt="thumb">
<p id="ch_img_id">2</p>
<p id="ch_img_fichier">Citron.jpg</p>
<p id="ch_img_orientation">Paysage</p>
<p id="ch_img_larg">450</p>
<p id="ch_img_haut">299</p>
<hr />
<p class="modifiable" id="ch_img_titre">Lorem ipsum dolor sit</p>
<p class="modifiable" id="ch_img_sousTitre">Lorem ipsum dolor</p>
<hr />
<p class="modifiable" id="ch_img_description">Citron vert (lime)</p>
<p class="modifiable" id="ch_img_texte">Lorem ipsum dolor sit amet, consectetur....</p>
<hr />
<p class="modifiable" id="ch_img_keywords">Amaury,le Cour, Amaury le Cour,Ajax</p>
</div>
</div>
</div>
<div id="maincontent">
<h2>--- Planche contact</h2>
<div id="planche-contact"></div>
</div>
<div id="footer">
<div class="vcard">
<p class="sujet">Ajax par la pratique</p>
<p class="org">Amaury le Cour</p>
<p class="street-address">4 rue d' Hendaye</p>
<p class="locality">Nantes</p>
<p class="postal-code">97200</p>
<p class="country-name">France</p>
</div>
</div>
</div>
</body>
</html>
2 - galerie.js
// --------------------------------------------------------
// Galerie --- place_diapo()
// --------------------------------------------------------
function charge_galerie(arg) {
var objxhr = xhr_connect()
if (objxhr) {
objxhr.onreadystatechange = function() {
if (objxhr.readyState == 4) {
if (objxhr.status == 200) {
reset_galerie()
bloque_editable()
prepare_modification_informations()
var retour = objxhr.responseXML
place_galerie(retour)
}
}
}
var sql = "ch_img_rubId=" + arg
objxhr.open("POST", "charge_galerie.php", true)
objxhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
objxhr.send(sql)
} else {
alert("Soucis d'XMLHttpRequest")
}
}
function reset_galerie() {
pc = document.getElementById('planche-contact')
while (pc.firstChild) {
pc.removeChild(pc.firstChild)
}
}
function place_galerie(arg) {
var diapos = arg.getElementsByTagName('image')
var nb_diapo = diapos.length
for (var i = 0; i < nb_diapo; i++) {
var dia_temp = diapos[i]
var img = dia_temp.getElementsByTagName('ch_img_fichier')[0].firstChild.nodeValue
var infos = dia_temp.getElementsByTagName('ch_img_id')[0].firstChild.nodeValue
var folder = dia_temp.getElementsByTagName('ch_img_rubId')[0].firstChild.nodeValue
var orientation = dia_temp.getAttribute('orientation')
place_diapo(img, infos, folder, orientation)
}
}
// --------------------------------------------------------
// Diapositives
// --------------------------------------------------------
function place_diapo(arg, src, folder, orientation ) {
var pc = document.getElementById('planche-contact')
var div = document.createElement('div')
var img = document.createElement('img')
img.alt = folder
img.className = orientation
img.src = "../images/" + folder + "/thumbs/" + arg
div.appendChild(img)
div.src = src
div.onclick = function () {
//alert(this.src)
permute_dia_selected(this)
searchInfos(this.src)
}
pc.appendChild(div)
}
var dia_selected = null
function permute_dia_selected(arg) {
if (dia_selected != null) {
dia_selected.style.backgroundImage = 'url(../images/diapo.png)';
}
arg.style.backgroundImage = 'url(../images/diapo-selected.png';
dia_selected = arg
}
// --------------------------------------------------------
// Gestion des informations
// --------------------------------------------------------
function searchInfos(arg) {
var objxhr = xhr_connect()
if (objxhr) {
objxhr.onreadystatechange = function() {
if (objxhr.readyState == 4) {
if (objxhr.status == 200) {
bloque_editable()
var retour = objxhr.responseText
details_JSON(retour)
}
}
}
var sql = "ch_img_id=" + arg
objxhr.open("POST", "charge_details.php", true)
objxhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
objxhr.send(sql)
} else {
alert("Soucis d'XMLHttpRequest")
}
}
function details_JSON(arg) {
var temp = null
//alert(arg)
var datas = eval('('+arg+')')
for (var i in datas.image) {
//alert(i + " = " + datas.image[i])
temp = document.getElementById(i)
switch (i) {
case "ch_img_fichier" :
var infos_thumb = document.getElementById('infos_thumb')
infos_thumb.src = "../images/"+datas.image.ch_img_rubId+"/thumbs/"+datas.image.ch_img_fichier
default :
if (temp != null) {
temp.innerHTML = datas.image[i]
temp.id_update = datas.image['ch_img_id'];
}
}
}
}
// --------------------------------------------------------
// Mode Editable
// --------------------------------------------------------
function prepare_modification_informations() {
var infos = document.getElementById('informations')
var p = infos.getElementsByTagName('p')
var nb_p = p.length
for (var i = 0; i < nb_p; i++) {
p[i].firstChild.nodeValue = " "
if (p[i].className == "modifiable") {
p[i].onclick = function() {
rend_editable(this)
}
}
}
img = document.getElementById('infos_thumb');
img.src = " "
}
var old_editable = null
function bloque_editable() {
if (old_editable != null) {
var p = document.createElement('p')
p.className = "modifiable"
p.id = old_editable.id
p.id_update = old_editable.id_update
var txt_temp = old_editable.value
var txt_cnt = document.createTextNode(txt_temp)
p.appendChild(txt_cnt)
p.onclick = function() {
rend_editable(this)
}
old_editable.parentNode.replaceChild(p, old_editable)
old_editable = null
}
}
function rend_editable(arg) {
bloque_editable()
var textarea = document.createElement('textarea')
textarea.className = "champ_editable"
textarea.id = arg.id
textarea.id_update = arg.id_update
var txt_cnt = document.createTextNode(arg.firstChild.nodeValue)
textarea.appendChild(txt_cnt)
if (textarea.attachEvent) {
textarea.attachEvent('onchange', update_datas);
} else if (textarea.addEventListener) {
textarea.addEventListener('change', update_datas, false);
}
arg.parentNode.replaceChild(textarea, arg)
old_editable = textarea
}
function update_datas() {
var sql = "ch_img_id=" + this.id_update
sql += "&" + this.id + "=" + this.value
update_datas_base(sql)
}
function update_datas_base(arg) {
var objxhr = xhr_connect()
if (objxhr) {
objxhr.onreadystatechange = function() {
if (objxhr.readyState == 4) {
if (objxhr.status == 200) {
}
}
}
objxhr.open("POST", "update_db.php", true)
objxhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
objxhr.send(arg)
} else {
alert("Soucis d'XMLHttpRequest")
}
}
// --------------------------------------------------------
// OBJET XML HTTP Request
// --------------------------------------------------------
function xhr_connect() {
xhr = false
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest
} else if (window.ActiveXObject) {
var reussi = false
var iexhr = array( "Msxml2.XMLHTTP.7.0","Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0",
"Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP" )
for (var i = 0; i < iexhr.length && ! reussi; i++) {
try {
xhr = new ActuveXObject(iexhr[i])
reussi = true
} catch(e) {}
}
}
return xhr
}
3 - update_db.php
<?php
include_once('../Scripts/connect.php');
$sql = "UPDATE `images`SET ";
$stock = array();
foreach ($_POST as $key => $value) :
if ($key != 'ch_img_id') :
array_push($stock, "'" . $key ."'=" . $value ."'" );
endif;
endforeach;
$sql .= implode(",", $stock);
$sql .= " WHERE `ch_img_id`=" . $_POST['ch_img_id'];
$stmt = $DB->prepare($sql);
$stmt->execute();
?>
Il semblerait que la variable $sql ne se formate pas comme voulu
4 - connect.php
<?php
try {
$DB = new PDO('mysql:host=localhost;dbname=galerie', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'Échec lors de la connexion à la base de données';
}
?>
Je précise que j'utilise wampserver 3.0, php 7.0 et mon os est windows 10.
Je ne vois pas ou j'ai pu faire une erreur, tout semble bien fonctionner, sauf la mise à jour de la BDD.
A voir également:
- Foreach ne samble pas fonctionner en PHP 7
- Photofiltre 7 - Télécharger - Retouche d'image
- Clé windows 7 - Guide
- Delphi 7 - Télécharger - Langages
- Télécharger 7-zip - Télécharger - Compression & Décompression
- Télécharger windows 7 32 bits usb - Télécharger - Systèmes d'exploitation
6 réponses
Bonjour,
Je n'ai pas de message d'erreur, quand je teste, la mise à jour de la BDD ne se fait pas.
J'aimerais deboguer l'application pas à pas, mais comment faire ?
Je travaille sur PC que depuis 2 ans, je viens du monde AS400.
Je n'ai pas de message d'erreur, quand je teste, la mise à jour de la BDD ne se fait pas.
J'aimerais deboguer l'application pas à pas, mais comment faire ?
Je travaille sur PC que depuis 2 ans, je viens du monde AS400.
Bonjour,
Mettez
if (objxhr.status == 200) {
alert(objxhr.responseText);
}
au lieu de
if (objxhr.status == 200) { }
pour voir l'erreur
Mettez
if (objxhr.status == 200) {
alert(objxhr.responseText);
}
au lieu de
if (objxhr.status == 200) { }
pour voir l'erreur
Merci zermat,
J'ai trouvé l'erreur, ma requête est correcte maintenant, mais j'ai encore une erreur à l'exécution à la ligne 14 du php, je remets le source :
J'ai trouvé l'erreur, ma requête est correcte maintenant, mais j'ai encore une erreur à l'exécution à la ligne 14 du php, je remets le source :
<?php include_once('../Scripts/connect.php'); $sql = "UPDATE images SET "; $stock = array(); foreach ($_POST as $key => $value) : if ($key != 'ch_img_id') : array_push($stock, "'" . $key ."'='" . $value ."'" ); endif; endforeach; $sql .= implode(",", $stock); $sql .= " WHERE ch_img_id=" . $_POST['ch_img_id']; $DB->exec($sql); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
L'erreur est :

Comme indique la capture d'écran, j'ai mis juste àprès le formatage de $sql l'instruction print_r($sql).

Comme indique la capture d'écran, j'ai mis juste àprès le formatage de $sql l'instruction print_r($sql).
Bonjour zermat,
Merci pour votre aide, le problème est résolu, en fait il y avait un doux mélange avec les diverses quotes.
Voilà le source définitif :
Merci pour votre aide, le problème est résolu, en fait il y avait un doux mélange avec les diverses quotes.
Voilà le source définitif :
<?php include_once('../Scripts/connect.php'); $sql = "UPDATE images SET "; $stock = array(); foreach ($_POST as $key => $value) : if ($key != 'ch_img_id') : array_push($stock, $key . "='" . $value ."'" ); endif; endforeach; $sql .= implode(",", $stock); $sql .= " WHERE ch_img_id = " . $_POST['ch_img_id']; $DB->query($sql); ?>