Page 1 sur 1

édition données via base de donnée

Posté : 18 déc. 2011, 12:49
par bostak
Bonjour,

J'ai un petit problème que je n'arrive pas à régler, tout d'abord voilà mon code :

index.php

Code : Tout sélectionner

elseif ($_GET["page"] == "update") { include("pages/takeId.php"); $iduser = takeId($_SESSION["login"]); include("pages/editBillet.php"); $titre = displayBillet($iduser); $content = displayBilletContent($iduser); include("views/vueEditBillet.php"); }
editBillet.php

Code : Tout sélectionner

<?php function displayBillet($iduser) { $requete = mysql_query("SELECT title FROM billets WHERE id_users='".$iduser."'"); while($row=mysql_fetch_assoc($requete)) { $titre = $row["title"]; } return($titre); } function displayBilletContent($iduser) { $requete = mysql_query("SELECT content FROM billets WHERE id_users='".$iduser."'"); while($row=mysql_fetch_assoc($requete)) { $content = $row["content"]; } return($content); }
vueEditBillet.php

Code : Tout sélectionner

<table> <tr> <td> Titre : </td> <td> <?php echo'<input type="text" name="title" value="'.$titre.'" />'; ?> </td> </tr> <tr> <td> <?php echo'<textarea name="content" value="'.$content.'"> </textarea>'; ?> </td> </tr> <tr> <td> <input type="submit" name="editer" value="editer" /> </td> </tr> </table>
Lorsque je veux éditer un billet, je récupère de ma BDD le titre et le contenu du billet, j'arrive bien à récupérer le titre du billet mais impossible de récupérer le contenu et je ne vois pas pourquoi, j'ai fait la même procédure que pour récupérer le titre. Autre petit soucis aussi, je voudrais éditer le billet sur lequel je clic, parce que la il me prend le premier qui vient, parce que je ne lui précise pas le "idbillets" qu'il y a à éditer et la je ne sais pas non plus comment procéder. Pourriez vous m'aider ?

Cordialement,

Re: édition données via base de donnée

Posté : 18 déc. 2011, 12:51
par xTG
Cela n'a pas de sens ce que tu fais, il vaudrait mieux récupérer le tout en une requête et renvoyer un tableau...
Ou si tu veux vraiment utiliser une fonction pour chaque élément utiliser de la POO et stocker le tout dans un objet.

Re: édition données via base de donnée

Posté : 18 déc. 2011, 13:01
par bostak
petit rectification alors :

editBillet.php

Code : Tout sélectionner

<?php function displayBillet($iduser) { $requete = mysql_query("SELECT title, content FROM billets WHERE id_users='".$iduser."'"); while($row=mysql_fetch_assoc($requete)) { $titre = $row["title"]; $content = $row["content"]; } return($titre); return($content); }
et donc dans index.php

Code : Tout sélectionner

elseif ($_GET["page"] == "update") { include("pages/takeId.php"); $iduser = takeId($_SESSION["login"]); include("pages/editBillet.php"); $titre = displayBillet($iduser); $content = displayBillet($iduser); include("views/vueEditBillet.php"); }
Mais mon problème persiste quand même.

Cordialement,

Re: édition données via base de donnée

Posté : 18 déc. 2011, 13:44
par xTG
Une fonction ne peut retourner qu'une seule variable.
Mais tu peux par contre renvoyer un tableau. ;)

Re: édition données via base de donnée

Posté : 18 déc. 2011, 14:28
par bostak
et si je fais comme ceci :

Code : Tout sélectionner

function displayBillet($iduser) { $requete = mysql_query("SELECT title, content FROM billets WHERE id_users='".$iduser."'"); while($row=mysql_fetch_array($requete)) { $titre = $row["title"]; $content = $row["content"]; } return($titre); return($content); }
Par contre je n'ai toujours pas mon "content" qui s'affiche.

Cordialement,

Re: édition données via base de donnée

Posté : 18 déc. 2011, 14:38
par Calimero
L'éxécution de la fonction s'arrête au premier return() rencontré. Le deuxième est tout simplement ignoré. Comme xTG te l'a précisé : une fonction ne peut retourner qu'une seule variable...

Si tu veux retourner à la fois le titre et le contenu depuis cette fonction, il va falloir passer un tableau en valeur de retour contenant les deux valeurs, par exemple :
function displayBillet($iduser){
	$requete = mysql_query("SELECT title, content FROM billets WHERE id_users='".$iduser."'");
	while($row=mysql_fetch_array($requete))
	{
		$titre = $row["title"];
		$content = $row["content"];
	}
	return(array('titre'=>$titre, 'content'=>$content);
}


$tableau=displayBillet(1);
echo $tableau['titre'];

Attention également à la requête SQL dans ta fonction, qui peut ramener 0, 1 ou plusieurs billets suivant le contenu de la table (hors le reste de la fonction ne gère que le cas où le nombre de billets pour l'utilisateur est 1).

Re: édition données via base de donnée

Posté : 18 déc. 2011, 15:00
par bostak
ok d'accord je comprend mieux merci de votre réponse. Par contre je ne comprend pas trop ceci

Code : Tout sélectionner

$tableau=displayBillet(1); echo $tableau['titre'];
Je n'ai pas bien compris l'explication.

Cordialement,

Re: édition données via base de donnée

Posté : 18 déc. 2011, 15:03
par Calimero
ok d'accord je comprend mieux merci de votre réponse. Par contre je ne comprend pas trop ceci

Code : Tout sélectionner

$tableau=displayBillet(1); echo $tableau['titre'];
Je n'ai pas bien compris l'explication.

Cordialement,
C'est un petit exemple d'utilisation de la fonction modifiée pour retourner un tableau.

La première ligne affecte le tableau retourné à une variable $tableau, la seconde fait une lecture et un affichage de la valeur accessible depuis l'index 'titre' du tableau.

Re: édition données via base de donnée

Posté : 18 déc. 2011, 15:54
par bostak
ok d'accord j'avais compris cela mais je ne comprend pas bien le 1 en paramètre de la fonction displayBillet

Re: édition données via base de donnée

Posté : 18 déc. 2011, 16:00
par Calimero
ok d'accord j'avais compris cela mais je ne comprend pas bien le 1 en paramètre de la fonction displayBillet
Ta fonction est écrite pour accepter un iduser en paramètre (pour injection dans la requête SQL), alors j'ai simplement mis un 1 pour l'exemple.

Re: édition données via base de donnée

Posté : 18 déc. 2011, 20:15
par bostak
merci j'ai compris maintenant, mais par contre mon titre s'affiche bien mais j'ai toujours pas mon "content" qui s'affiche.

Cordialement,

Re: édition données via base de donnée

Posté : 18 déc. 2011, 21:26
par xTG
Montres nous le code modifié que tu utilises.

Re: édition données via base de donnée

Posté : 18 déc. 2011, 22:04
par bostak
Voilà le code modifié :

index.php

Code : Tout sélectionner

elseif ($_GET["page"] == "update") { include("pages/takeId.php"); $iduser = takeId($_SESSION["login"]); include("pages/editBillet.php"); $tableau=displayBillet($iduser); include("views/vueEditBillet.php"); }
editBillet.php

Code : Tout sélectionner

<?php function displayBillet($iduser) { $requete = mysql_query("SELECT title, content FROM billets WHERE id_users='".$iduser."'"); while($row=mysql_fetch_array($requete)) { $titre = $row["title"]; $content = $row["content"]; } return(array('titre'=>$titre, 'content'=>$content)); }
vueEditBillet.php

Code : Tout sélectionner

<table> <tr> <td> Titre : </td> <td> <?php echo'<input type="text" name="title" value="'.$tableau['titre'].'" />'; ?> </td> </tr> <tr> <td> <?php echo'<textarea name="content" value="'.$tableau['content'].'"> </textarea>'; ?> </td> </tr> <tr> <td> <input type="submit" name="editer" value="editer" /> </td> </tr> </table>
Cordialement,

Re: édition données via base de donnée

Posté : 18 déc. 2011, 23:50
par Calimero
vueEditBillet.php
		<tr>
			<td>
				<?php
					echo'<textarea name="content" value="'.$tableau['content'].'"> </textarea>';
				?>
			</td>
		</tr>
		
Un textarea a un comportement un peu différent des autres champs de formulaire, comme l'input text du titre. Il n'a pas d'attribut value !

Le contenu du textarea doit être écrit simplement entre les balises :
<textarea name="quelquechose">Comme ceci</textarea>

Re: édition données via base de donnée

Posté : 19 déc. 2011, 00:41
par bostak
merci beaucoup de votre aide, comme d'habitude je peux compter sur vous, mille merci.

Cordialement,