Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2011, 15h39   #1
Invité de passage
 
Fab
Inscription : mai 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : Fab

Informations forums :
Inscription : mai 2010
Messages : 31
Points : 4
Points : 4
Par défaut Erreur $sql undefined Variable

Bonjour,

J'ai creer un script qui insère des valeurs dans une bdd, lorsque je lance le script voila l'erreur qui apparait
Notice: Undefined variable: sql in C:\Program Files\EasyPHP-5.3.6.0\www\webdevproject\newtopic.php on line 23
Erreur SQL !
Query est vide

En gros l'erreur typique d'un sql query sans valeur, cependant je déclare $sql juste au dessus !!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
session_start();
include ("bdd.php");
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('supforum', $base);
if (isset ($_GET['cat'])) {
	$_GET['cat'] = $_POST['cat'];
}
 
if (isset ($_POST['go'])) { 
   // on teste la déclaration de nos variables
   if (!isset($_POST['description']) || !isset($_POST['titre']) || !isset($_POST['content'])) { 
      $erreur = 'Les variables nécessaires au script ne sont pas définies.'; 
   } 
   else
   { 
      if ((empty($_POST['titre'])) || (empty($_POST['content'])) || (empty($_POST['description']))) { 
         $erreur = 'Au moins un des champs est vide.'; 
      } 
      else {
	$sql = 'INSERT INTO topics VALUES("", "'.mysql_escape_string($_POST['titre']).'" , "'.mysql_escape_string($_POST['description']).'"  , "'.$_SESSION['id'].'" , "'.$_POST['cat'].'" ,  "")'; 
      }
      mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
      $id_sujet = mysql_insert_id();
	$sql = 'INSERT INTO messages VALUES("", "'.mysql_escape_string($_POST['content']).'", "'.$_SESSION['id'].'" ,"'.$id_sujet.'")';
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
	mysql_close();
	header('Location: membre.php');
	exit();
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SUPFORUM</title>
<style type="text/css">
.Titre {
	text-align: center;
	font-size: 24px;
	font-weight: bold;
	color: #000;
}
.Text1 {
	text-align: center;
}
 
<?php include ("wyhead.php"); ?>
 
 
</style>
</head>
 
<body>
<p>&nbsp;</p>
<?php include ("entete2.php"); ?>
<form action="newtopic.php" method="post">
<tr >
    <th>
    <input type="text" name="titre" value="<?php if (isset($_POST['text'])) echo htmlentities(trim($_POST['text'])); ?>">
	<input type="text" name="description" value="<?php if (isset($_POST['text'])) echo htmlentities(trim($_POST['text'])); ?>">
	$
    </th>
 
</tr>
<tr>
	<th>
		<?php include ("wybody.php") ?>
	</th>
</tr>
</form>	
 
<?php include ("baspage2.php"); ?>
</body>
</html>
 
<?php
if (isset($erreur)) echo ' <br /> ', $erreur;
?>
Je ne vois pas du tout d'où peut venir l'erreur .. Pouvez-vous m'aider ?
superstarz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 15h42   #2
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 568
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 568
Points : 2 493
Points : 2 493
Bonjour,

En effet, tu déclares $sql juste au dessus, mais dans la clause else.

Si tu ne passes pas dedans, $sql n'est pas défini.
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 15h45   #3
Membre à l'essai
 
Homme Thomas Guerin
Développeur informatique
Inscription : février 2011
Messages : 11
Détails du profil
Informations personnelles :
Nom : Homme Thomas Guerin
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 11
Points : 24
Points : 24
Salut,

En lisant ton code, je me rends comptes qu'il ya un plan d'exécution où ta variable $sql ne sera pas initialisée :
Code :
1
2
3
4
5
6
if ((empty($_POST['titre'])) || (empty($_POST['content'])) || (empty($_POST['description']))) { 
         $erreur = 'Au moins un des champs est vide.'; 
      } 
      else {
	$sql = 'INSERT INTO topics VALUES("", "'.mysql_escape_string($_POST['titre']).'" , "'.mysql_escape_string($_POST['description']).'"  , "'.$_SESSION['id'].'" , "'.$_POST['cat'].'" ,  "")'; 
      }
Dans ce cas tu ne passeras pas dans le 'else' et ta variable ne sera pas initialisée, non?

TomTom_
TomTom_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 16h09   #4
Invité de passage
 
Fab
Inscription : mai 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : Fab

Informations forums :
Inscription : mai 2010
Messages : 31
Points : 4
Points : 4
Enfin dans mon idée je passais forcément dans le else ^^.
Donc bon j'ai levé cette condition et la maintenant cela marche.

Par contre, je sais pas si vous le voyez, mais je met sert d'une methode GET pour recuperer l'id de la catégorie, cependant dans ma table SQL celui-ci reste a 0.
Je sais pourquoi, car en faite lorsque j'ouvre la page j'ai bien newtopics.php?cat=5, mais lorsque je termine la rédaction de mon formulaire et que j'envoie les paramètre j'ouvre : newtopics.php (dans le form)
Quelles solutions s'offres à moi ? Dans le form rajouter "?rcat=' , $_GET['cat'] ,""
ça se fait ?

Dernière petite interogation, dans la bdd, j'ai initialiser mes date en timestamp avec en valeur par default : current timestamp.
Or tout reste a 0 alors qu'il aurai du me mettre la date non ?
Sinon un "time()" dans la requete SQL suffit ?

Merci pour vos réponses déjà vous avez été super rapide :p
superstarz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 16h42   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Code :
1
2
3
if (isset ($_GET['cat'])) { // si on reçoit 'cat' en GET
	$_GET['cat'] = $_POST['cat']; // on lui donne quand même la valeur en POST (aka $_GET['cat'] est remplacé)
}
Je ne sais pas si c'est voulu comme ça vu que vous utilisez $_POST['cat'] dans la requête.

Cela devrait être
Code :
1
2
3
if (isset ($_GET['cat'])) { 
	$_POST['cat'] = $_GET['cat'];
}
(mais c'est quand même bien laid.)
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h09   #6
Invité de passage
 
Fab
Inscription : mai 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : Fab

Informations forums :
Inscription : mai 2010
Messages : 31
Points : 4
Points : 4
Ah oui rolalala je suis fatigué on dirait ...
Enfin c'est le seul moyen que j'ai trouvé pour passer ma variable pour m'en resservir.
Et même comme ça, cela ne fonctionne pas
superstarz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h06.


 
 
 
 
Partenaires

Hébergement Web