8792 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

Je voudrais pouvoir modifier le contenu de ma base à l'aide d'un formulaire.

Pour cela j'ai écrit ceci :

$text = mysql_escape_string ($text);
$prix = mysql_escape_string ($prix);

$sql = "UPDATE brice SET text='". $text ."' , prix='". $prix ."' WHERE Numlogin='". $id ."'";

$res = mysql_query($sql) or die (mysql_error() ) ;

J'ai pas d'erreur sql mais j'ai pas de mouvement dans la base non plus !

Quelqu'un peut m'aider ?

Merci
diabolo
Smiley decu
Salut Solo

Voila la réponse :

-1egt(s) modifié(s)
Warning: Cannot modify header information - headers already sent by (output started at /home/diapason/www/brice/modif.php:24) in /home/diapason/www/brice/modif.php on line 29


diabolo
solo a écrit :
Tu as mis un tirer devant?

Il y a donc eu un mouvement ^^

Si mysql_affected_rows() retourne -1 c'est que la requête a échoué.

Essaie de supprimer les guillemets autour de $id puisque Numlogin semble être de type entier.

Si ça ne marche pas fais afficher $sql.
J'ai remplacé le code par ceci (j'ai supprimé les guillemets):


 // Requête modifiée 
 $text = mysql_escape_string($text);
 $prix = mysql_escape_string($prix);
  $sql = "UPDATE brice SET text='".$text."' , prix='".$prix."' WHERE NumLogin='.$id.'";
 


Sa m'affiche l'erreur suivante


-1egt(s) modifié(s)
Warning: Cannot modify header information - headers already sent by (output started at /home/diapason/www/brice/modif.php:24) in /home/diapason/www/brice/modif.php on line 29
cette erreur intervient si tu utilises la fonction header() dans ton fichier alors qu'il y a déjà quelque chose d'envoyer à l'affichage pour dans le HTML...

Ca peut être un blanc !!!

Un truc genre

<html>
<?php header(xxx);?>

plantera alors que en l'écrivant

<?php header(xxx);?>
<html>

Ca passera... peut-être Smiley biggol

Attention, ça peut venir aussi de plus haut, genre

<html>
<?php include'toto.php' ?>

et dans toto.php

<?php header(xxx);?>


Dans ce cas le programme plante avant d'envoyer quoique ce soit à la base ! Et donc tu ne trouves jamais ton erreur de base... Et les quotes sont une erreur en plus Smiley cligne
Non mais le warning n'est pas inquiétant, c'est parce qu'on demande à afficher le nombre de lignes modifiées pendant la phase de traitement. Une fois qu'on aura débuggé la requête cet affichage n'aura plus de raison d'être et l'avertissement disparaîtra.

Pour revenir au problème SQL, peux-tu faire afficher la requête ($sql), comme demandé ?
En écrivant ceci :

<?php

 $host = "#";
 $user = "#";
 $pass = "#"";
 $bdd = "#";
  
 // connection base de données
 @mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de donnée");
 
 //selection de la base
 @mysql_select_db($bdd) or die ("Impossible de se connecter à la base");
 
 
 // Requête modifiée 
 $text = mysql_escape_string(@$_POST["text"]);
 $prix = mysql_escape_string(@$_POST["prix"]);
 $sql = "UPDATE brice SET text='".$text."' , prix='".$prix."' WHERE NumLogin= '. $id .' ";
 
 //echo mysql_affected_rows()."egt(s) modifié(s)";
 echo $sql;

 //header("location:index.php");
?>


J'ai ceci


UPDATE brice SET text=' 1234 et 5678 ' , prix='' WHERE NumLogin= '. .' 


Les chiffres 1234 et 5678 devrai être dans prix et dans la requete text=' ' on devrai trouvé du texte genre 'azerty'

diabolo
Donc 2 problèmes au moins :
- les données sont mal récupérées du formulaire : affiche le contenu de ton $_POST pour voir (print_r($_POST) dans un <pre></pre> par exemple)
- mauvaise syntaxe autour du NumLogin : essaie
"UPDATE brice SET text='".$text."' , prix='".$prix."' WHERE NumLogin=". $id
En utilisant ta fonction

(print_r($_POST)


s'affiche ceci :
Array ( [nom] => azertotot [text] => 1234 )


Là par contre azertoto apparait dans le champs nom de la base et 1234 dans le champs text et prix n'apparait même pas, tout semble décalé !

diabolo
Si tu tiens tant que ça aux quotes autour de l'id mais c'est mal , utilise plutôt

$sql = "UPDATE brice SET text='".$text."' , prix='".$prix."' WHERE NumLogin= [#red]'[#green]". $id ."[#red]'[#green] ";


parce que sinon, c'est normal ton mauvais affichage

C'était ça l'erreur header ?

//header("location:index.php");
Montre le code de ton formulaire.

Et $id, d'où sort-il ? Parce là il ne semble pas renseigné (on ne le voit pas quand tu affiches $sql)
Mieux ?

Tu les veux obligatoirement, tu prends mon exemple, tu peux t'en passer, tu peux prendre celui de djfeat

Choisi...

Je dirais: essaie déjà la solution de djfeat et quand tu auras tes données dans ta table, essaie la mienne... Mais franchement elle me choque cette solution même si elle est mieux écrite niveau encadrement Smiley cligne
[code]
<form name="seminaire" action="modif.php" method="post" enctype="multipart/form-data">
<tr>
<td colspan="2"> </td>
</tr>


<tr>
<td align="right"><b><font color="#FFFFFF">Voici le texte de l'oeuvre :</font><br /></b></td>
<td> <textarea name="nom" cols="45" rows="15" value="$nom" class="align">
<?
$host = "#";
$user = "#";
$pass = "#";
$bdd = "#";

// connection base de données
@mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de donnée");

//selection de la base
@mysql_select_db($bdd) or die ("Impossible de se connecter à la base");

$sql = 'select text from brice where nom like "%'.$_POST['nom'].'%" ';

$res = mysql_query($sql);

if (mysql_num_rows($res))
{
$val=mysql_fetch_assoc($res);
echo $val["text"];
}
else
echo 'Nom : '.$nom.' pas trouvé';

mysql_close();
?>

<form name="seminaire" action="modif.php" method="post" enctype="multipart/form-data">
			  <tr>
			      <td colspan="2">&nbsp; </td>
			  </tr>
			
                        
			  <tr>
			    <td align="right"><b><font color="#FFFFFF">Voici le texte de l'oeuvre :</font><br /></b></td>
                <td>&nbsp;<textarea  name="nom" cols="45" rows="15" value="$nom" class="align">
		          <?
                          $host = "#";
                          $user = "#";
                          $pass = "#";
                          $bdd = "#";
  
                         // connection base de données
                         @mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de donnée");
 
                         //selection de la base
                         @mysql_select_db($bdd) or die ("Impossible de se connecter à la base");
 
                         $sql = 'select text from brice where nom like "%'.$_POST['nom'].'%" '; 
						
			 $res = mysql_query($sql); 
		 		 
                         if (mysql_num_rows($res)) 
                         { 
                         $val=mysql_fetch_assoc($res); 
                         echo $val["text"]; 
                         } 
                         else 
                         echo 'Nom : '.$nom.' pas trouvé'; 
 
                         mysql_close(); 
                         ?>
                	  </textarea>
			  </td>			
			  </tr>

			  <tr>
			    
        <td align="right"><b><font color="#FFFFFF">Voici le prix affiché sur le site:</font><br />
          </b></td>
                <td>&nbsp;<textarea  name="text" cols="45" rows="15" value="$text">
			  <?
                          $host = "#";
                          $user = "#";
                          $pass = "#";
                          $bdd = "#";
  
                         // connection base de données
                         @mysql_connect($host, $user, $pass) or die ("Impossible de se connecter à la base de donnée");
 
                         //selection de la base
                         @mysql_select_db($bdd) or die ("Impossible de se connecter à la base");
 
                         $sql = 'select prix from brice where nom like "%'.$_POST['nom'].'%" '; 
						
						 $res = mysql_query($sql); 
		 		 
                         if (mysql_num_rows($res)) 
                         { 
                         $val=mysql_fetch_assoc($res); 
                         echo $val["prix"]; 
                         } 
                         else 
                         echo 'Nom : '.$nom.' pas trouvé'; 
 
                         mysql_close(); 
                         ?>
				          </textarea>
				</td>			
			  </tr>
		      <tr>
			    <td colspan="3" align="center"><input type="submit" value="Modifier"></td>
			  </tr>
 		    </form>


Le formulaire contient deux textarea dans lesquels j'i mis du php pour appeler le contenu de ma base. Ce qui m'enerve c'est qu'une fois modifier sa ne retourne pas d'ou sa vien !
a écrit :
Ce qui m'enerve c'est qu'une fois modifier sa ne retourne pas d'ou sa vien !


Ce que je fais pour cela en traitant un formulaire que j'écris en base...

je viens d'une page liste, j'utilise une page fiche et une fois la modification faite, je retourne à la liste, en cas d'erreur j'affiche un lien qui me fait retourner vers la fiche...

Normalement, il n'y a aucun affichage et retour direct à la page de la liste

if ($ok==1) { 

//  mes contrôles de validité des données sont OK 
// ou pas d'erreur SQL

       $url="http://".$_SERVER['HTTP_HOST']
                  ."/".dirname($_SERVER['PHP_SELF'])
                  ."/gestion_liste.php";
       if (headers_sent()){
          print('<meta http-equiv="refresh" content="0;URL='.$url.'">');
       } else {
          header("Location: ".$url);
       }
    }
}

if ($ok==0) {
    print('<CENTER><a HREF="Javascript:history.go(-1)">Retour à la page précédente.</A>');
}


Le truc sur le header fonctionne normalement dans tous les cas, c'est ce que je fais avec les header maintenant que je l'ai trouvé ;o)

Le problème niveau accessibilité c'est si le javascript est invalide, le lien en retour ne marchera pas...

(ne pas se soucier des balises invalides ou en majuscules, c'est mon back-office à moi que j'ai que chez moi et que sur mon ordinateur... Smiley biggol )
Pages :