Problème affichage des données du formulaire php

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 26 févr. 2023 à 20:31
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 1 mars 2023 à 14:59

Bonjour, je me retrouve devant un problème que j'ai du mal à comprendre. J'ai une page PHP dont je saisie les oeuvres musicales avec un formulaire de 4 champs. 1 champ de type texte, 1 de type="checkbox et 2 champs avec liste déroulante issue de ma base de donnée.  Lorsque je souhaite faire une modification je saisie le lien d'une œuvre pour effectuer la modification d'un enregistrement et malheureusement les 2 champs de liste déroulante me retourne les dernières valeurs de ses listes et non les valeurs concernés par l’œuvre sélectionnée. J'ai fait un var_dump et cela retourne bien le bon ID de l’œuvre et idem lorsque je survol les liens. Je vous remercie beaucoup pour votre aide. Voici le page concernée.

<?php
$index = 2;
require("libs/init.php");
require("libs/class.liste.php");
$debug = 0; 

$LDorch	= new liste("libs/orchestrations","",""); 
$LDaut 	= new liste("libs/auteurs","","");  

$action		= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idoeu 		= !empty($_REQUEST['idoeu']) ? $_REQUEST['idoeu'] : NULL;
$oeuvre 	= !empty($_POST['oeuvre']) ? ucfirst(stripslashes($_POST['oeuvre'])) : '';
$idaut 		= !empty($_POST['idaut']) ? $_POST['idaut'] : '';
$idorch 	= !empty($_POST['idorch']) ? $_POST['idorch'] : '';
$conduct 	= !empty($_POST['conduct']) ? $_POST['conduct'] : '';

switch($a) {
	case 'new': $action = 'new';  break; 
	case 'ls' : $action = 'list'; break;
	case 'mod': $action = 'mod';  break; 
	default   : $action = 'new';  break; 
}

if($submit) {

	switch($haction) {
		case 'new':
			$sql = "SELECT oeuvre, idorch FROM cdc_oeuvres WHERE oeuvre = :oeuvre AND idorch = :idorch";
			$datas = array('oeuvre' => $oeuvre, 'idorch' => $idorch);
			$result = executeQuery($sql,$datas);
			$nb = $result->rowCount();

			if ($nb > 0) {
				$erreur = "<span class='erreur'>Cet Oeuvre de cette orchestration existe déjà</span>";
			} else {
				
				$sql = "INSERT INTO cdc_oeuvres (oeuvre, idaut, idorch, conduct) VALUES (:oeuvre, :idaut, :idorch, :conduct)";
				$datas = array('oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct);
				$result = executeQuery($sql,$datas);
				$typenr = "enregistré";
				$reqaj = $sql;  
				$success = "<span class='success'>La nouvelle oeuvre - ".trim(stripslashes("$oeuvre"))." - a été $typenr.</span>";
			}
		break;

		case 'mod':
			$sql = "UPDATE cdc_oeuvres SET oeuvre = :oeuvre, idaut = :idaut, idorch = :idorch, conduct = :conduct WHERE idoeu = :idoeu";
			$datas = array('oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct, 'idoeu' => $idoeu);
			$result = executeQuery($sql,$datas);
			$typenr = "modififié"; 
			$reqmod  = $sql;  
			$success = "<span class='success'>L'oeuvre - ".trim(stripslashes("$oeuvre"))." - a été $typenr.</span>";
		break;
	}
}

switch($action) {
	case 'new':   
		$title      = "Saisie d'une Oeuvre"; 
		$btsub      = "Enregistrer";      
		$idoeu      = "";
		$oeuvre     = "";
		$idaut      = "";
		$idorch     = "";
		$conduct 	= "";
	break;

	case 'list': 
		$title  	= "Liste des Oeuvres";
	break;

	case 'mod': 
		$title      = "Modification d'une Oeuvre";
		$btsub      = "Modifier";
		$sql    	= "SELECT * FROM cdc_oeuvres WHERE idoeu = :idoeu";
		$datas 		= array('idoeu' => $idoeu);
		$result 	= executeQuery($sql,$datas);
		$donnees 	= $result->fetch();
		$idoeu      = $donnees->idoeu;
		$oeuvre     = ucfirst(stripslashes($donnees->oeuvre));
		$idaut      = $donnees->idaut;
		$idorch     = $donnees->idorch;
		$conduct 	= $donnees->conduct;
	break;
}
?>
<html>

<head>
<?php headers(25); ?>

<script language="javascript" type="text/javascript">
//==================================================
// NB: Les fonctions is...() ne retournent que Vrai ou Faux.
//     Les fonctions isValid...() retournent OK ou un message d'erreur
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste si le caractère passé en paramètre (c) est un caractère autorisé (liste en paramètre)
function isCharInList(c,list) {
	var c,list;
	if (list.indexOf(c.toLowerCase()) < 0) { return false; } else { return true; }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste si tous les caractères de la chaine passée en paramètre (str) sont autorisés
// Fonction dépendante de isCharInList()
function isStringInList(str,list) {
	var str,list,n;
	for (n=0; n<str.length; n++) {
		if (!isCharInList(str.substring(n,n+1),list)) { return false; }
	}
	return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste si les caractères passés en paramètre corespondent à un TDL valide
function isTLD(tld) {
	var tld,domains;
	domains = "com|net|int|org|edu|mil|gov|af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|"
		+ "az|bh|bd|bb|by|be|bz|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|gg|je|kh|cm|ca|"
		+ "cv|ky|td|cl|cn|cx|cc|co|km|cg|ck|cr|ci|hr|cf|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|"
		+ "sv|gq|er|ee|et|fk|fo|fj|fi|gf|pf|tf|fr|fx|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|"
		+ "gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jp|jo|kz|ke|ki|kp|"
		+ "kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|"
		+ "mx|fm|md|mc|mn|ms|ma|mz|mm|mp|na|nr|np|an|nl|nc|nz|ni|ne|ng|nu|nf|no|om|pk|"
		+ "pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|gs|lc|ws|sm|st|sa|sn|sc|sl|sg|"
		+ "sk|si|sb|so|za|es|lk|sh|kn|pm|vc|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|tg|tk|"
		+ "to|tt|tn|tr|tm|tc|tv|um|ug|ua|uk|us|uy|ae|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|"
		+ "zr|zm|zw|eu|"
		+ "biz|info|aero";
	if (domains.indexOf(tld.toLowerCase()) < 0) { return false; } else { return true; }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste le format d'une adresse email.
// Fonction dépendante de isTLD()
// Login non null, doit contenir "@" dans l'adresse, un point dans le domaine et un TLD valide
function isEmail(address) {
	var address,parts,domains;
	if (address.indexOf("@") <= 0)         { return false; }
	parts = address.split("@");
	if (parts[0].length == 0)              { return false; }
	if (parts[1].indexOf(".") <= 0)        { return false; }
	domains = parts[1].split(".");
	if (!isTLD(domains[domains.length-1])) { return false; }
	return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste le format d'une date (JJ/MM/AAAA ou MM/JJ/AAAA).
function isDate(date) {
	var date, reg = new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");
	if(reg.test(date)) { return true; } else { return false; }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste la validité d'une date française (JJ/MM/AAAA).
// Fonction dépendante de isDate()
function isValidDate(date) {
	var date,tab;
	if(isDate(date)) {
		tab=date.split('/');
		if((tab[0]*1)<1 || (tab[0]*1)>31) { return "Jour incorrect"; }
		if((tab[1]*1)<1 || (tab[1]*1)>12) { return "Mois incorrect"; }
		return "OK";
	}
	return "Format date incorrect";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste la validité d'un champ de type texte (longueur et caractères autorisés)
// Fonction dépendante de isStringInList()
function isValidText(champ,chars,li,ls) {
	var champ,chars,li,ls,lg,msg;
	lg = champ.length;
	if(li || ls) {
		if(lg < li) { msg = "Saisie trop courte:\nMinimum : "+li;  return msg; }
		if(lg > ls) { msg = "Saisie trop longue:\nMaximum : "+ls;  return msg; }
	}
	if(!isStringInList(champ,chars)) { msg = "Caractères interdits !"; return msg; }
	return "OK";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Supprime les espaces de début et de fin de chaîne
function trim(myString) {
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

//==========================================================================================
// Variables diverses
var today = new Date();
var annee = today.getFullYear();
// Listes des (c)aractères classiques (a)utorisés (ca_*) dans les différents champs de saisie
var ascii     = "abcdefghijklmnopqrstuvwxyz";
var lettres   = "abcdefghijklmnopqrstuvwxyzàâäéèêëîïùûüçôö";
var chiffres  = "0123456789";

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Caractères autorisés
// Champs testés:
ca_oeuvre     = lettres + chiffres + "-,. '()°!";

function verif() {
	// Récupération des valeurs du formulaire
	idoeu   = document.oeuv.idoeu.value;     // Si modification d'une oeuvre
	oeuvre  = document.oeuv.oeuvre.value;        // saisie obligatoire
	idaut   = document.oeuv.idaut.options[document.oeuv.idaut.selectedIndex].value;
	idorch  = document.oeuv.idorch.options[document.oeuv.idorch.selectedIndex].value;

	// Test de la présence et de la validité des champs obligatoires.
	if(!oeuvre) {
		alert("Veuillez indiquer L'oeuvre musicale");
		document.oeuv.oeuvre.focus();
		return false;
	}
	msg = isValidText(oeuvre,ca_oeuvre,2,60);
	if(msg != "OK") {
		alert("Oeuvre :\n"+msg);
		document.oeuv.oeuvre.focus();
		return false;
	}
	return true;
}
</script>
</head>

<body>
<div id="smen"><?php echo writeMenuV($index); ?></div>
<div id="pg" style="padding-left:50px; padding-top:25px">
<!-- ~~~~~ Contenu de la page ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<?php
echo '<div>'.$success.'</div>';
echo '<div>'.$erreur.'</div>';
echo '<br/>';

// Instructions à réaliser s'il faut lister
if($action == 'list') {
	echo '<h1>'.$title.'</h1>';

	// Lister les années pour y accéder directement
	echo '<h2>Index</h2>';
	$tm       = '|';  // "Table des matières"
	$nbl      = 0;    // Nombre de lettres
	for($n = 65; $n <= 90; $n++) {
		$lettre = chr($n);
		$tm .= '&nbsp;<a href="#a'.$lettre.'">'.$lettre.'</a>&nbsp;|';
		$nbl++;
		if($nbl == 13) { $tm .= '<br/>|'; }
	}
	echo '<div style="font-family:courier">'.$tm.'</div>';

	// Lister tous les enregistrements avec un lien pour effectuer la modif d'un enregistrement
	$sql = "SELECT *
		FROM cdc_orchestrations
			RIGHT JOIN cdc_oeuvres ON cdc_oeuvres.idorch = cdc_orchestrations.idorch
		ORDER BY oeuvre";
	$result = executeQuery($sql,$datas);

	echo '<h2>Oeuvres</h2>';
	echo '<ul>';
	while ($donnees = $result->fetch()) {
		$lien = $_SERVER["PHP_SELF"].'?a=mod&amp;idoeu='.$donnees->idoeu;
		$initiale = substr($donnees->oeuvre,0,1);
		echo '<li><a name="a'.$initiale.'"></a><a href="'.$lien.'">'.stripslashes(ucfirst($donnees->oeuvre)).' => '.$donnees->orches.' [ '.$donnees->conduct.' ]</a></li>';
	}
	echo '</ul>';

	// Ecrire bas de page et sortir : listage fini.
	echo dmaj("sais_oeuvre.php");
	echo "</div></body></html>";
	exit;
}

$checked = $conduct ? " checked " : "";

	echo '<form method="post" name="oeuv" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">';
	echo '<h1>'.$title.'</h1>';

	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Oeuvre</td>';
	echo '<td class="data"><input type="text" name="oeuvre" size="25" value="'.$oeuvre.'" class="oblig" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Auteur d\'appartenance</td>';
	echo '<td class="data">'; echo $LDaut->write($idaut).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Orchestration</td>';
	echo '<td class="data">'; echo $LDorch->write($idorch).'</td>';
	echo '</tr><tr>';
	echo '<td>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="checkbox" id="conducteur" class="css-conducteur" name="conduct" value="1"  '.$checked.' />';
		echo '<label for="conducteur" class="css-conducteur">Conducteur<br/> original</label>';
	echo '</td>';
	echo '</tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="idoeu" value="'.$idoeu.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

	echo '</form>';
	echo '<p>NB: La saisie dans les zones à fond jaune pâle est obligatoire.</p>';
	var_dump($idoeu);
// Debuggage
if($debug) {
	echo '<div style="font-family:courier">';
	echo '<hr>DEBUGAGE:<br/>';
	
	echo '$action: '.$action.'<br/>';
	echo '$title: '.$title.'<br/>';
	echo '$sql: '.$sql.'<br/>';
	echo 'requete ajout: '.$reqaj.'<br/>';
	echo 'requete modif: '.$reqmod.'<br/>';
	echo '</div>';
}
?>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
</div>
<?php echo dmaj("sais_oeuvre.php"); ?>
</body>

</html>

23 réponses

LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
1 mars 2023 à 08:27

oui j'avais vu juste avant que tu me le dises. promis!

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
1 mars 2023 à 12:51

donc j'ai cette erreur!

Warning: Array to string conversion in C:

sur cette ligne

$thisrec = !empty($donnees->$champs) &&  is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;

voici ce que j'ai modifié

$ch = implode(',',$champs);

$thisrec = !empty($donnees->$ch) &&  is_array($donnees->$ch) && $indice == $donnees->$ch[$idnum] ? 1 : 0 ;

du coup je n'ai plus de message d'erreur mais aucun résultat

0
jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665
1 mars 2023 à 13:30

Visiblement tu ne sais pas ce qu'est un array en PHP... Ni comment fonctionne la fonction impload....

Pour ma part je vais en rester là, je t'invite à acquérir les connaissances minimum du langage avant de poursuivre sinon tu ne t'en sortiras jamais..

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
1 mars 2023 à 14:59

Je suis très déçu car de mon côté je fait beaucoup d'effort et passe beaucoup de temps à lire et relire pour essayer de comprendre. C'est certains que je n'ai pas la même connaissance que toi. Merci tout de même pour ton temps passer avec moi. Cordialement.

0