Rechercher : dans
Par :

Quelques erreurs en php/sql

Dernière réponse le 3 mai 2008 à 18:16:58 Rizzen Virnn, le 2 mai 2008 à 12:06:43 
 Signaler ce message aux modérateurs

Bonjour,
Je me suis lancé il y a peu à la création de site php/sql et c'est pas encore évident ^^

J'ai deux tables : une 'group' et une 'lien'
La table 'group' est composée d'un champ 'id' et un 'nom'
La table 'lien' est composée d'un champ 'id', 'nom', 'adresse', 'description' et 'groupe'

Mes problèmes :
1) J'aurais voulu faire une liaison pour que le champ 'lien.groupe' doive renvoyer à un champ de 'group.nom' (donc une foreign key si je ne m'abuse). Donc ma commande :

ALTER TABLE lien
ADD CONSTRAINT fk_groupe 
FOREIGN KEY ( groupe ) REFERENCES group(nom)
Réponse :
#1064 - Erreur de syntaxe près de 'group(nom)' à la ligne 3 
Pourtant ça me semble correct. Une idée ?

2) J'ai fait une procédure php pour rajouter un lien dans la table :
else if($cat =="addlink"){
		$sql = mysql_query('SELECT nom FROM `group` ORDER BY id ASC') or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		echo'<br><br><center><form name="form1" method="post" action="?cat=addlink2">
		<table border="0" cellpadding="2" cellspacing="2">
			<tr>
				<td>Nom</td>
				<td><input name="nom" type="text" id="nom"></td>
			</tr>
			<tr>
				<td>Adresse</td>
				<td><input name="adresse" type="text" id="adresse" value="http://"></td>
			</tr>
			<tr>
				<td>Description</td>
				<td><input name="description" type="text" id="description"></td>
			</tr>
			<tr>
				<td>Groupe</td>
                               // liste déroulante des groupes
				<td><select name="groupe">';
						while(list($groupe) = mysql_fetch_array($sql)){
							echo'<option value='.$groupe.'>'.$groupe.'</option>';
						}
					echo'</select></td>
			</tr>
			<tr>
			
			</tr>
		</table>
		<input type="submit" name="Submit" value="Envoyer">
		</form></center>';
	}
pour le forumlaire. Suivit d'une validation
else if($cat =="addlink2"){
		$nom = $_POST['nom'];
		$adresse = $_POST['adresse'];
		$description = $_POST['description'];
		$groupe = $_POST['groupe'];
		
		$req = mysql_query("INSERT INTO lien (`id`,`nom`,`adresse`,`description`,`groupe`) VALUES('','$nom','$adresse','$description','$groupe')");
		//rajout du http si pas
		$req = mysql_query('UPDATE lien SET adresse = concat("http://",adresse) WHERE SUBSTR(adresse,1,7)<>"http://"');
		echo'<center>Lien ajoute avec succes<br><br>';
		echo'<a href="?cat=list">Liste des liens</a></center>';
			
	}
Tout marche impec sauf quand le nom du groupe est en plusieurs mots, il ne prend que le premier dans la base sql ("un autre groupe" devient "un'")

3) Je veux pouvoir supprimer un groupe de la table. Ce qui donne en php :
else if($cat == "delgr"){
	$sql = mysql_query('SELECT id, nom FROM `group` ORDER BY id ASC') or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		echo'<br><br><center><form name="form1" method="post" action="?cat=delgr2&id='.$_POST['idgroupe'].'">
		<table border="0" cellpadding="2" cellspacing="2">
			<tr>
				<td>Sélectionnez le groupe à supprimer</td>
			</tr>
			<tr>
				<td>Groupe</td>
				<td><select name="idgroupe">';
						while(list($id, $groupe) = mysql_fetch_array($sql)){
							echo'<option value="'.$id.'">'.$id.' - '.$groupe.'</option>';
						}
					echo'</select></td>
			</tr>
			<tr>
			
			</tr>
		</table>
		<input type="submit" name="Submit" value="Envoyer">
		</form>
		
		<br><br><a href="?cat=list">Annuler</a></center>';
	}
Pour la liste des liens. Puis la validation :
else if($cat == "delgr2"){
		$id = $_GET['id'];
		$sql = 'DELETE FROM `group` WHERE group.id='.$id.'';
		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		echo'Lien supprime<br><br>';
		echo'<a href="?cat=list">Liste des liens</a>';
	}
Bien entendu il ne supprime pas le groupe (sinon il y aurait pas de problème). J'ai remarqué qu'il n'enregistrait pas l'id du groupe sélectionné car n'apparaissait pas dans l'adresse de la page (.com/?cat=degr2&id= devrait se finir par un nombre)

Bon et c'est déjà pas mal du tout si j'ai une réponse à ça :p

Un grand merci d'avance
Configuration: Linux
Firefox 2.0.0.14

Meilleures réponses pour « quelques erreurs en php/sql » dans :
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
Cacher les erreurs en PHP VoirRappelons avant toute chose, qu'il est toujours préférable, dans n'importe quel langage de programmation, de corriger les problèmes qui déclenchent les erreurs, avant d'essayer de masquer les erreurs. En effet, le fait de masquer les erreurs...
Parse error: syntax error, unexpected $end VoirLorsque l'on programme en Php, on se retrouve inévitablement un jour devant ce genre d'erreur: Parse error: syntax error, unexpected $end in Command line code on line 1 En français, ça signifie grossièrement: "Erreur d'analyse du code: il y a une...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

doctormad, le 2 mai 2008 à 16:39:00

Salut,

1) http://fr.wikipedia.org/wiki/Cl%C3%A9_%C3%A9trang%C3%A8re

Ce que tu veux faire (liason) ça serait plutôt une procédure stockée. Les clés étrangères si ton code est bien structuré tu n'en as pas besoin.

2) http://fr2.php.net/manual/fr/function.addslashes.php

Ca peut déjà aider. Sinon tu peux aussi sortir tes variables de tes chaines "machaine='".$mavariable."' etc"

3) Ta form est en method post, et tu réceptionnes en get. D'autre part si ton select s'appelle idgroupe c'est idgroupe que tu dois récupérer pas id.

Je suis pas sur d'avoir compris l'utilité de la table lien.

Répondre à doctormad

2

Rizzen Virnn, le 2 mai 2008 à 18:52:30

1) Oui c'est vrai que la condition n'est pas nécessaire et que je peux le faire en procédure.
Juste que j'avais vu les foreign key en cours et que je voulais appliquer ^^

2) Si je comprend bien l'utilité de addslashe c'est pour que les cara spéciaux (dont les espaces) peuvent être lu par le php/sql mais je ne sais pas où je dois le placer exactement. J'ai essayé quelques un mais marche pas :'(

3)Parfais ça marche, en fait je mélangeais le fait de récupérer une valeur dans un formulaire et dans l'adresse

Et sinon en fait le site permet d'enregistrer un lien (un nom, une adresse, une description) et les liens sont classés en groupes d'où l'utilité de la table lien

Répondre à Rizzen Virnn

3

 Rizzen Virnn, le 3 mai 2008 à 18:16:58

Re,
Je rajoute un autre petit problèmes :p
4)Je veux donner a possibilité de modifier un lien. Tout se passe +/- exactement comme pour ajouter un lien mais je veux que dans le cadre apparaisse l'ancienne valeur (j'espère me faire comprendre)

case "edit": {
		$sql1 = mysql_query("SELECT id, nom, adresse, description FROM lien WHERE id='$id' ORDER BY id ASC") or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
			$req = $sql1;
		$sql2 = mysql_query("SELECT nom FROM `group` ORDER BY id ASC") or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());

		echo'<center><form name="form1" method="post" action="?cat=edit2&id='.$id.'">
		<table cellpadding="2" cellspacing="2">
			<tr>
				<td>Nom</td>
				<td><input name="nouv_nom" type="text" id="nouv_nom" value="' .$_POST['nom']. '"></td>
			</tr>
			<tr>
				<td>adresse</td>
				<td><input name="nouv_adresse" type="text" id="nouv_adresse" value='.$_POST['adresse].'></td>
			</tr>
			...

Bon en faisant des test je pense que c'est au niveau de la requête sql que ça foire et que les valeurs $_POST['...'] sont vides

Merci

ps : n'oubliez pas mon 2, en lisant la doc sur le site du zero j'ai lu que les addslash ne concernaient pas les espaces. Comprend plus rien :-S

Répondre à Rizzen Virnn
Collection CommentÇaMarche.net