[PhP] Erreur offset - variables recalcitrante

Fermé
lagassat
Messages postés
526
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
6 septembre 2004
- 6 mai 2004 à 19:47
darkhorkeu
Messages postés
73
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
9 juin 2007
- 7 mai 2004 à 11:15
Bonjour,

Avec la derniere version de php, je suis oblige de passer avec les tableaux associatids etant donne que les variables globales sont desactivee (pour securite). Je n'ai pas eu de probleme pour recuperer les variables qui venaient d'un formulaire html. Mais je n'arrive pas a resoudre mon probleme avec des variables que j'obtiens en tronquant une chaine de caractere. J'ai des messages d'erreur du aux offset (donc a priori au variables globales à OFF).

Si j'utilise un POST pour declarer cette fonction avec un tableau associatif, alors ma requete sql qui envoie ces variables ne marche pas.

Pourtant ca marche parfaitement lorsque je met les variables globales sur ON...

Voila le message d'erreur de offset si je ne declare pas tronk avec un associatif :

Notice: Undefined offset: 1 in e:/...........test.php
............... etc ......................
Notice: Undefined offset: 19 in e:/...........test.php on


et si je le declare, j'obtiens ca :
Notice: Undefined index: tronk in e:/...........test.php

Quelqu'un a-t-il une idee sur la facon de resoudre ce probleme ?

Voici mon script sans la declaration de $tronk du type : $tronk = $_POST['tronk']; (vu que ca marche pas)
<html>
<head>
<title>recherche des enregistrements</title>
</head>
<body>


<?

//initialisation des variables par tableau associatif si elles existent
if(isset($_POST['Mot']))
	{ 
	$Mot = $_POST['Mot']; 
	}

if(isset($_POST['tronk']))
	{ 
	$tronk = $_POST['tronk']; 
	}


if(isset($_POST['byline']))
	{ 
	$byline = $_POST['byline']; 
	}

if(isset($_POST['headline']))
	{ $headline = $_POST['headline']; 
	}

if(isset($_POST['kicker']))
	{ 
	$kicker = $_POST['kicker']; 
	}

if(isset($_POST['keywords']))
	{ $keywords = $_POST['keywords']; 
	}
if(isset($_POST['newspaper']))
	{ $newspaper = $_POST['newspaper']; 
echo $newspaper;
	}

if(isset($_POST['section']))
	{ $section = $_POST['section']; 
echo $section;
	}




//section_id = '$section' AND 




// Déclaration des paramètres de connexion
$host = "localhost";

$user = "";

$bdd = "";

$password  = "";






//Vous pouvez definir le nombre max de mots de recherche. 
//Plus celui-ci est grand plus la recherche risquera d'ê longue
//La valeur est à determiner en fonction de la taille de votre bdd

$max=20;



//connection au serveur
mysql_connect($host,$user,$password) or die("erreur de connexion au serveur");



//connexion à la bdd
mysql_select_db($bdd) or die("erreur de connexion à la bdd");




//Initialisation de variable afficher stockée ds bdd
$query = "UPDATE article SET afficher=0";
mysql_query($query) or die ("Erreur ini de modification de afficher");



	

$tronk = split(" ",$Mot);



//echo "<html><head><title>Résultat de la recherche</title></head><body>";





if (($Mot == "")||($Mot == "%")) 

	{

	// Si aucun mot clé n'a été saisi, le script demande à l'utilisateur

	// de bien vouloir préciser un mot clé

	echo "Veuillez entrer un mot clé s'il vous plaît!<p>";

	}







else {
	echo "<H2>Voici les résultats de votre recherche :</H2>";

	//======selectionne les entrees avec le mot1 OU le mot X 

		for ($i=0;$i<$max;$i++)
		{
		if ($tronk[$i] != "") 
			{



			//si $headline && $kicker && $keywords= on
			if(isset($_POST['headline']) && isset($_POST['kicker']) && (isset($_POST['keywords'])))
			{
			$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND headline LIKE \"%$tronk[$i]%\" OR kicker LIKE \"%$tronk[$i]%\" OR keywords LIKE \"%$tronk[$i]%\"   ";
			}
			else
			{

			if(isset($_POST['headline']) && isset($_POST['kicker']) )
				{
				$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND headline LIKE \"%$tronk[$i]%\" OR kicker LIKE \"%$tronk[$i]%\"";
				}
				else
				{
				if(isset($_POST['headline']) && isset($_POST['keywords']) )
					{
					$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND headline LIKE \"%$tronk[$i]%\" OR keywords LIKE \"%$tronk[$i]%\"";
					}
					else
					{
					if(isset($_POST['kicker']) && isset($_POST['keywords']) )
						{
						$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND kicker LIKE \"%$tronk[$i]%\" OR keywords LIKE \"%$tronk[$i]%\"";
						}
						else
						{		
						if(isset($_POST['headline']) )
							{
							$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND headline LIKE \"%$tronk[$i]%\"";
							}
							else
							{
							if(isset($_POST['kicker']) )
								{
								$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND kicker LIKE \"%$tronk[$i]%\"";
								}
								else
								{
								if(isset($_POST['keywords']) )
									{
									$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND keywords LIKE \"%$tronk[$i]%\"";
									}
									else
									{
																										$query = "SELECT keywords,headline,afficher,pdf_link, content_id FROM article WHERE newspaper_id = '$newspaper' AND kicker LIKE \"%$tronk[$i]%\"OR keywords LIKE \"%$tronk[$i]%\"";
									}
								}
							}
						}
					}
				}
			}

			//recuperation des resultats de la requete
			$result = mysql_query($query);

			
			//affichage des resultats
			while($row = mysql_fetch_row($result))

				{

				//n'affiche le resultat que s'il n'est pas deja affiché

				if ($row[2]==0)

					{

					echo "<p>\n<b>Sujet : $row[1]</b>\n<br><a href=\"$row[3]\">Visualiser l'article</a>\n<p>\n";

		

					//on met afficher à 1 car deja l'entree selectionnee est deja à l'ecran

					$query = "UPDATE article SET afficher=1 WHERE content_id=$row[4]";

					mysql_query($query) or die ("Erreur de modification de afficher");

					}
				}

			}
		}

}




// on ferme la base>

mysql_close();

?>

</body>
</html>



Merci,

Ciao
"2 choses sont infinies : l'univers et la betise humaine
bien que en ce qui concerne la 1ere je n'ai pas encore de certitude absolue"

2 réponses

lagassat
Messages postés
526
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
6 septembre 2004
82
7 mai 2004 à 11:06
up

"2 choses sont infinies : l'univers et la betise humaine
bien que en ce qui concerne la 1ere je n'ai pas encore de certitude absolue"
0
darkhorkeu
Messages postés
73
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
9 juin 2007
30
7 mai 2004 à 11:15
Salut,

je crois que ton problème viens de :
if(isset($_POST['tronk']))
{ 
    $tronk = $_POST['tronk']; 
}

Ce code ne permet pas de récupérer les valeurs de tout un tableau, mais seulement des valeurs de type simple comme des chaînes ou des entiers.

Essais d'utiliser la méthode extract en passant $_POST en paramètre.
Par exemple :
if (!empty($_POST)) {
        extract($_POST, EXTR_OVERWRITE);
} else if (!empty($HTTP_POST_VARS)) {
        extract($HTTP_POST_VARS, EXTR_OVERWRITE);
}


Si ça ne marche pas, essais quelque chose du genre :
if (isset($_POST))
{
	while(list($cle, $valeur) = each($_POST))
	{
		$$cle = $valeur;
	}
}


La 1ere solution me semble la meilleure.

a+,

Darkhorkeu
0