Quelques erreurs en php/sql
Résolu
Rizzen Virnn
Messages postés
103
Date d'inscription
Statut
Membre
Dernière intervention
-
Rizzen Virnn Messages postés 103 Date d'inscription Statut Membre Dernière intervention -
Rizzen Virnn Messages postés 103 Date d'inscription Statut Membre Dernière intervention -
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 :
2) J'ai fait une procédure php pour rajouter un lien dans la table :
3) Je veux pouvoir supprimer un groupe de la table. Ce qui donne en php :
Bon et c'est déjà pas mal du tout si j'ai une réponse à ça :p
Un grand merci d'avance
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 3Pourtant ç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:
- Quelques erreurs en php/sql
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Logiciel sql - Télécharger - Bases de données
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Retour a la ligne php ✓ - Forum PHP
3 réponses
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) 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) 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
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
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)
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
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