édition données via base de donnée

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 12:49

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,

ViPHP
xTG
ViPHP | 7331 Messages

18 déc. 2011, 12:51

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.

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 13:01

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,

ViPHP
xTG
ViPHP | 7331 Messages

18 déc. 2011, 13:44

Une fonction ne peut retourner qu'une seule variable.
Mais tu peux par contre renvoyer un tableau. ;)

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 14:28

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,

ViPHP
ViPHP | 2287 Messages

18 déc. 2011, 14:38

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).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 15:00

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,

ViPHP
ViPHP | 2287 Messages

18 déc. 2011, 15:03

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 15:54

ok d'accord j'avais compris cela mais je ne comprend pas bien le 1 en paramètre de la fonction displayBillet

ViPHP
ViPHP | 2287 Messages

18 déc. 2011, 16:00

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 20:15

merci j'ai compris maintenant, mais par contre mon titre s'affiche bien mais j'ai toujours pas mon "content" qui s'affiche.

Cordialement,

ViPHP
xTG
ViPHP | 7331 Messages

18 déc. 2011, 21:26

Montres nous le code modifié que tu utilises.

bostak
Invité n'ayant pas de compte PHPfrance

18 déc. 2011, 22:04

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,

ViPHP
ViPHP | 2287 Messages

18 déc. 2011, 23:50

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>
if(!@work()){ Nespresso(); } else { what(); }
______________________________

bostak
Invité n'ayant pas de compte PHPfrance

19 déc. 2011, 00:41

merci beaucoup de votre aide, comme d'habitude je peux compter sur vous, mille merci.

Cordialement,