Foreach ne samble pas fonctionner en PHP 7

Résolu/Fermé
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 - 1 mai 2016 à 18:36
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 - 2 mai 2016 à 17:32
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
<?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:

6 réponses

Bonsoir, c'est lequel ton message d'erreur ?
0
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 15
2 mai 2016 à 04:52
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.
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
2 mai 2016 à 09:36
Bonjour,
Mettez
if (objxhr.status == 200) {
alert(objxhr.responseText);

}
au lieu de
if (objxhr.status == 200) { }
pour voir l'erreur
0
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 15
2 mai 2016 à 11:30
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 :
<?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);
?>
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
2 mai 2016 à 12:55
Quel est le message d'erreur ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 15
2 mai 2016 à 16:36
L'erreur est :

Comme indique la capture d'écran, j'ai mis juste àprès le formatage de $sql l'instruction print_r($sql).
0
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 15
2 mai 2016 à 17:32
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 :
<?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);
?>
0