Quelques erreurs en php/sql

Résolu/Fermé
Rizzen Virnn Messages postés 103 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 14 novembre 2009 - 2 mai 2008 à 12:06
Rizzen Virnn Messages postés 103 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 14 novembre 2009 - 3 mai 2008 à 18:16
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
A voir également:

3 réponses

doctormad Messages postés 430 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 2 avril 2015 99
2 mai 2008 à 16:39
Salut,

1) https://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.
-1
Rizzen Virnn Messages postés 103 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 14 novembre 2009 7
2 mai 2008 à 18:52
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
-1
Rizzen Virnn Messages postés 103 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 14 novembre 2009 7
3 mai 2008 à 18:16
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
-1