Warning: Illegal string offset 'name' in [Résolu/Fermé]

Signaler
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
-
Messages postés
28878
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2020
-
Bonjour, J'ai ce message qui apparait "Warning: Illegal string offset 'name' in" et je ne sais pas à quoi c'est dû. Pouvez-vous m'aider s'ils vous plait. J'ai fait un print_r et tout semble normal, le fichier article est bien présent pourtant l'INSERT ne se fait pas. Je vous remercie.
$action 	= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idart 		= !empty($_REQUEST['idart']) ? $_REQUEST['idart'] : NULL;
$article 	= !empty($_POST['article']) ? $_POST['article']['name'] : '';
$lieuart 	= !empty($_POST['lieuart']) ? addslashes($_POST['lieuart']) : '';
$dateart 	= !empty($_POST['dateart']) ? dw2m($_POST['dateart']) : '';
$descart 	= !empty($_POST['descart']) ? $_POST['descart'] : '';

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

if($submit) {

	switch($haction) {
		case 'new':
			$extensions_valides = array( 'pdf' );
			//1. strrchr renvoie l'extension avec le point (« . »).
			//2. substr(chaine,1) ignore le premier caractère de chaine.
			//3. strtolower met l'extension en minuscules.
			$extension_upload = strtolower(  substr(  strrchr($_FILES['article']['name'], '.')  ,1)  );
			if (!in_array($extension_upload,$extensions_valides) ) {
				$erreur = "<span class='erreur'>Vous devez ajouter un fichier de type PDF</span>";
			} else {
				
			$sql = "INSERT INTO cdc_articles (article, lieuart, dateart, descart) VALUES (:article, :lieuart, :dateart, :descart)";
			$datas = array('article' => $article, 'lieuart' => $lieuart, 'dateart' => $dateart, 'descart' => $descart);
			$result = executeQuery($sql,$datas);
			$typenr = "enregistré";
			$reqaj = $requete; 
			$success = "<span class='success'>Le nouvelle article du - ".dFR("$dateart")." - a été $typenr.</span>";
			}
			break;
	}
}

switch($action) {
	case 'new':   
		$title      = "Saisie d'un Article";
		$btsub      = "Enregistrer";
		$idart     	= "";
		$article   	= "";
		$lieuart   	= "";
		$dateart  	= "";
		$descart  	= "";
		break;

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

3 réponses

Messages postés
28878
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2020
2 592
Bonjour,

Tu ne nous indiques pas le numéro de ligne qui va avec le message d'erreur...
mais on peut supposer que ça vient de la ligne
$article 	= !empty($_POST['article']) ? $_POST['article']['name'] : '';


Il aurait également été bien de nos fournir le résultat de ton print_r ... histoire qu'on puisse voir les variables qui sont envoyée dans ton $_POST

Mais on peut supposer que, pour ton cas, le "bon" code serait :

$article 	= !empty($_POST['article']) ? $_POST['article'] : '';


Et si vraiment.. ton array article contient un "name" .. dans ce cas il faudra ajouter :
$article_name = !empty($article['name']) ? $article['name'] : '';

et donc modifier ton array lors de l'insertion
$datas = array('article' => $article_name , 'lieuart' => $lieuart, 'dateart' => $dateart, 'descart' => $descart);
			

Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
14
Bonjour, Merci pour ton aide. En effet c'est bien cette ligne qui pose problème N° 7. Voici mon print_r.
Array
(
    [dateart] => 08/03/2019
    [article] => 029.pdf
    [lieuart] => 
    [descart] => Assemblée Générale
    [haction] => new
    [idart] => 
    [submit] => Enregistrer
)

J'ai modifié comme tu me l'a proposé, plus aucune erreur de retourné mais toujours pas d'INSERT et l'erreur "Vous devez ajouter un fichier de type PDF"
Messages postés
28878
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2020
2 592
Alors... qu'as tu modifié exactement ?

Sachant que :
- Le message que tu nous donnes n'est pas un message d'erreur ... mais le résultat d'un echo qui se trouve dans le if qui signifie donc que ton formulaire ne contient aucun fichier ou que tu n'envoies pas le $_FILES

remplace
$extension_upload = strtolower(  substr(  strrchr($_FILES['article']['name'], '.')  ,1)  );
if (!in_array($extension_upload,$extensions_valides) ) {
  $erreur = "<span class='erreur'>Vous devez ajouter un fichier de type PDF</span>";
} 


par :
//récupération PROPRE des variables AVANT de les utiliser :
$files = !empty($_FILES['article']) ? $_FILES['article'] : NULL;


$fileName = !empty($files['name']) ? $files['name'] : NULL;
if($fileName){
 $extension_upload = strtolower(  substr(  strrchr($fileName, '.')  ,1)  );
 if (!in_array($extension_upload,$extensions_valides) ) {
   $erreur = "<span class='erreur'>Vous devez ajouter un fichier de type PDF</span>";
 } 
}else{
  print_r($_FILES);
}


pense aussi à nous montrer le code de ton formulaire.... (as tu bien mis le enctype à ton form ? )
<form method="post" action="" enctype="multipart/form-data">

Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
14
Je suis un gros boulet après ton dernier post tout à merveilleusement fonctionner j'avais complètement oublié le enctype.
Je te remercie.
Cordialement
Messages postés
28878
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2020
2 592
Pense à mettre le sujet en résolue.