probleme de mise a jour

bricfa
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 03:54

BONJOUR

j'ai un balise form avec option

ou je choisi le login ainsi que champ de la base de donner a modifier

mais rien ne s'enregistre dans la table

voici le code

page 1

<?php
// 2 LOGIN ET CHAMP A MODIFIER
echo "<br>CHOISSISSER LE LOGIN ET LE CHAMP A MODIFIER <br>";
if (!isset($_POST['submitopt']))
{

$extract = mysql_query (" SELECT * FROM newscomptes ORDER BY id DESC ") or die (mysql_error());
$numrows = mysql_num_rows($extract);

echo "<form action=\"mysql_update.php\" method=\"POST\"><p>";

echo "<select name='peoplename'>";
echo "SELECT OPTION:<br>";

while ($row = mysql_fetch_assoc($extract))
{
$id = $row['id'];
$login = $row['login'];
$nom = $row['nom'];
$prenom = $row['prenom'];
$mail = $row['mail'];
$adresse = $row['adresse'];
$complement_adr = $row['complement_adr'];
$ville = $row['ville'];
$cpostale = $row['cpostale'];
$tel = $row['tel'];
$news = $row['news'];
$date = $row['date'];
$time = $row['time'];
$activated = $row['activated'];
$ip = $row['ip'];

switch ($choisirentrer)
{
case "id";
$choisirentrer_db = $id;
break;

case "login";
$choisirentrer_db = $login;
break;

case "nom";
$choisirentrer_db = $nom;
break;

case "prenom";
$choisirentrer_db = $prenom;
break;

case "mail";
$choisirentrer_db = $mail;
break;

case "adresse";
$choisirentrer_db = $adresse;
break;

case "complement_adr";
$choisirentrer_db = $complement_adr;
break;

case "ville";
$choisirentrer_db = $ville;
break;

case "cpostale";
$choisirentrer_db = $cpostale;
break;

case "tel";
$choisirentrer_db = $lastname;
break;

case "news";
$choisirentrer_db = $dob;
break;

case "activated";
$choisirentrer_db = $gender;
break;
}
echo" <option value='$id'>$login</option>";
}

echo "</select>

<select name='choisirentrer'>
<option>id</option>
<option>login</option>
<option>nom</option>
<option>prénom</option>
<option>mail</option>
<option>adresse</option>
<option>complement_adresse</option>
<option>ville</option>
<option>code postal</option>
<option>téléphone</option>
<option>news-letter</option>
<option>activation</option>
</select>
<br/>
<input type=\"text\" name=\"tochange\">
<input type=\"submit\" name=\"submitopt\" value=\"valider\">
</form>
";
}?>

page 2

$peoplename = $_POST['peoplename'];
$choisirentrer = $_POST['choisirentrer'];

if ($peoplename&&$choisirentrer)
{
$change = mysql_query (" UPDATE newscomptes SET
login='$choisirentrer' OR
mail='$choisirentrer' OR
nom='$choisirentrer'
WHERE id='$peoplename'") or die (mysql_error());
}
echo"ok";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 nov. 2010, 04:49

salut,

la prochaine fois utilise la balise bbcode
 pour afficher le code sur le forum avec la colorisation c'est illisible la. 

au vu du script je veut bien croire que rien n'est mis à jour. 

Quand je lis, je me rend compte que le formulaire n'est affiché que lorsque celui ci est validé O_o, est ce que la première page est la suite d'un autre formulaire ?

d'où sort la variable $choisirentrer dans le swicth et d'ailleur a quoi sert il ?
pour quoi faire un select * et en plus utiliser des variables pour 15 champs alors qu'au final tu n'en utilise que deux (si l'on omet le switch qui semble peu utile). 

dans la page deux à quoi peut bien servir if ($peoplename&&$choisirentrer) ? peut être souhaite tu utiliser les fonctions [url=http://php.net/isset]isset[/url] ou [url=http://php.net/empty]empty[/url] ? (dans ce cas c'est avant qu'il faut le faire)

il n'y a pas de connexion au serveur mysql (dans la première page non plus, est ce un oublie volontaire ?)
ta requête SQL est mieux étrange au pire une hérésie :)

voici un code épuré des trucs non utilisé (dans le code que tu a posté) qui devrait fonctionner (a tester bien sur). 
[php]
<?php
// 2 LOGIN ET CHAMP A MODIFIER
echo '<br>CHOISSISSER LE LOGIN ET LE CHAMP A MODIFIER <br>';
$extract = mysql_query ('SELECT id, login FROM newscomptes ORDER BY id DESC ') or die (mysql_error());

echo '<form action="mysql_update.php" method="POST"><p>';
echo 'SELECT OPTION:<br>';
echo '<select name="peoplename">';
while ($row = mysql_fetch_assoc($extract)){
echo '<option value="'.$row['id'],'">',$row['login'],'</option>';
}
echo <<<EOT
</select>
<select name="choisirentrer">
<option>id</option>
<option>login</option>
<option>nom</option>
<option>prénom</option>
<option>mail</option>
<option>adresse</option>
<option>complement_adresse</option>
<option>ville</option>
<option>code postal</option>
<option>téléphone</option>
<option>news-letter</option>
<option>activation</option>
</select>
<br/>
<input type="text" name="tochange">
<input type="submit" name="submitopt" value="valider">
</form>
EOT;
}
?>

page 2 (mysql_update.php)
<?php
if (!empty($_POST['peoplename']) && !empty($_POST['choisirentrer']) && !empty($_POST['tochange'])) {
$requete =  'UPDATE newscomptes SET
'.mysql_real_escape_string($_POST['choisirentrer'].'=\''.mysql_real_escape_string($_POST['tochange']).'\'
WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';
$ret = mysql_query ($requete);
if ($ret === false) {
	echo '<p>Erreur Mysql : '.mysql_error().'<br />'.$requete.'</p>';
}
else {
	echo 'au moins un champ de vide !';
}
?>
@+
Il en faut peu pour être heureux ......

bricfa
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 15:16

Bonjour moogli

merci de ta réponse

effectivement je débute en php
j'apprends sur différent tuto mais c'est pas évident

je vais essayer ca de suite
merci

bricfa
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 15:38

re bonjour, moogli

je n'est pas comprit pour les codes BBcode jai pourtant essayer, desoler.

pour la page select ca fonctionne, mais pour la page update il me dit

Parse error: parse error in C:\wampserveur\www\php_free_site_v1AV\administration\admin\mysql_update.php on line 6

pour cet requet
WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';


du code
<?php
if (!empty($_POST['peoplename']) && !empty($_POST['choisirentrer']) && !empty($_POST['tochange'])) {
$requete =  'UPDATE newscomptes SET
'.mysql_real_escape_string($_POST['choisirentrer'].'=\''.mysql_real_escape_string($_POST['tochange']).'\'
WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';
$ret = mysql_query ($requete);
if ($ret === false) {
        echo '<p>Erreur Mysql : '.mysql_error().'<br />'.$requete.'</p>';
}
else {
        echo 'au moins un champ de vide !';
}
?>

bricfa
Invité n'ayant pas de compte PHPfrance

03 nov. 2010, 15:57

yo moogli

j'ai essayer de corriger l'erreur que je t'ai cité, sans résultat, et je n'ai aucune réponse de ta part.
je galère dessus depuis 2 jours, peu-tu m'aider stp.

erreur
WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';
j'ai éssayer ca aussi
WHERE id=\' '.mysql_real_escape_string($_POST['peoplename']).' \' ';

mais ne marche pas.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 nov. 2010, 16:06

$requete =  'UPDATE newscomptes SET
'.mysql_real_escape_string($_POST['choisirentrer'].'=\''.mysql_real_escape_string($_POST['tochange']).'\'
WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';
$ret = mysql_query ($requete);
manque une )
$requete =  'UPDATE newscomptes SET
'.mysql_real_escape_string($_POST['choisirentrer']).'=\''.mysql_real_escape_string($_POST['tochange']).'\'
WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';
$ret = mysql_query ($requete);
les erreurs de parse c'est des erreurs de syntaxe, donc il manque des )] } ou des ; .
Pour t'aider dans ce genre de chose, utilise un éditeur de texte qui fait la colorisation de la syntaxe (comme notepad++ sous win) qui généralement indique aussi les correspondances entre les parenthèses, crochets etc. ou mieux un "ide" qui peut indiquer les erreurs de syntaxe comme netbeans ou zen studio, eclipse etc.

@+

@+
Il en faut peu pour être heureux ......

bricfa
Invité n'ayant pas de compte PHPfrance

03 nov. 2010, 17:53

merci pour ta réponse

y a du nouveau maintenant j'ai
Erreur Mysql : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''login'='toi' WHERE id =2' at line 2
UPDATE newscomptes SET 'login'='toi' WHERE id =2 
j'ai essayer de modifier l'enter
ensuite ca
Erreur Mysql : Unknown column 'tochange' in 'field list'
UPDATE newscomptes SET tochange= 'toi' AND 'toi'='login' WHERE id =2 
j'ai re-modifier et maintenant j'ai à nouveau la l'erreur du haut

voici les champs de ma base de donner

id login pass mail nom prenom dob gender adresse complement_adr cpostale ville tel news date time random activated role send avatar ip

merci

bricfa
Invité n'ayant pas de compte PHPfrance

03 nov. 2010, 18:02

heu!!!
j'ai oublier de préciser le login existant n'est pas "toi" mais "fabrice" et je veus pouvoir changer le login ou n'importe quel champ de ma base de donner
merci

ViPHP
ViPHP | 5462 Messages

03 nov. 2010, 18:08

c'est tes valeur qui sont pas bonne c'est tout, avec de faire un requete SQL regarde comment elle est en premier sinon tu va jamais t'en sortir

bricfa
Invité n'ayant pas de compte PHPfrance

03 nov. 2010, 22:39

je ne vois pas.
je passe des heures a comprendre et je suis bon pour une nouvelle nuit qui sera sans résultat

peu-tu m'indiquer ce qui va pas.
merci pour ta patience

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 nov. 2010, 00:29

b'soir,

avant le $ret = mysql_query ($requete); ajoute un echo $requete; afin de pouvoir controler le contenue de la requete.

la requete c'est bien $requete = 'UPDATE newscomptes SET
'.mysql_real_escape_string($_POST['choisirentrer']).'=\''.mysql_real_escape_string($_POST['tochange']).'\'
WHERE id='.mysql_real_escape_string($_POST['peoplename']).''; ?

j'ai testé ce code
<?php
echo '<br>CHOISSISSER LE LOGIN ET LE CHAMP A MODIFIER <br>';
mysql_connect('localhost','root','yyRu2TKEvyYpzFLK');
mysql_select_db('test');
$extract = mysql_query ('SELECT id, login FROM newscomptes ORDER BY id DESC ') or die (mysql_error());
echo '<form action="" method="POST"><p>';
echo 'SELECT OPTION:<br>';
echo '<select name="peoplename">';
while ($row = mysql_fetch_assoc($extract)){
echo '<option value="'.$row['id'],'">',$row['login'],'</option>';
}
echo <<<EOT
</select>
<select name="choisirentrer">
<option value="id">id</option>
<option value="login">login</option>
<option value="nom">nom</option>
<option value="prenom">prénom</option>
<option value="mail">mail</option>
<option value="adresse">adresse</option>
<option value="complement_adresse">complement_adresse</option>
<option value="ville">ville</option>
<option value="cp">code postal</option>
<option value="telephone">téléphone</option>
<option value="newsletter">news-letter</option>
<option value="activation">activation</option>
</select>
<br/>
<input type="text" name="tochange">
<input type="submit" name="submitopt" value="valider">
</form>
EOT;

if (!empty($_POST['peoplename']) && !empty($_POST['choisirentrer']) && !empty($_POST['tochange'])) {
    $requete =  'UPDATE newscomptes SET
    '.mysql_real_escape_string($_POST['choisirentrer']).'=\''.mysql_real_escape_string($_POST['tochange']).'\'
    WHERE id='.mysql_real_escape_string($_POST['peoplename']).'';
    var_dump($requete);
    $ret = mysql_query ($requete);
    if ($ret === false) {
            echo '<p>Erreur Mysql : '.mysql_error().'<br />'.$requete.'</p>';
    }
    else {
            echo 'ok';
    }
}
?>
avec cette table de test (qui doit plus ou moins ressembler à la tienne

Code : Tout sélectionner

create table newscomptes ( id int unsigned auto_increment not null, login text, nom text, prenom text, mail text, adresse text, complement text, ville text, cp text, telephone text, newsletter text, activation text, primary key (id) )type=myisam; insert into newscomptes (login, nom) values ('prout','test');
ce code fonctionne essai la partie avec le formulaire avec ton code.
je te déconseille de laisser modifiable le champ id si il est la clef primaire(c'est une source d'ennui).

@+
Il en faut peu pour être heureux ......

bricfa
Invité n'ayant pas de compte PHPfrance

05 nov. 2010, 15:15

re merci ca marche c'est super

mais j'ai un autre probleme

de plus c'est le dernier pour le moment

j' arrive a effacer la ligne de la table newscomptes avec l'id correspondant mais pas dans la table avatars

ca fait 2 jours que je suis dessus comme d'ab et je vois toujours pas

script 1

// EFFACER COMPTES
echo "EFFACER COMPTE MEMBRES";
if (!isset($_POST['submitopt']))
{
$extract = mysql_query (" SELECT id,login FROM newscomptes ORDER BY id DESC ") or die (mysql_error());
$numrows = mysql_num_rows($extract);

echo "<form action=\"ComptesCreer_effacer.php\" method=\"POST\">
<select name='todelete'>";

while ($row = mysql_fetch_assoc($extract))
{
$id = $row['id'];
$login = $row['login'];
echo" <option value='$id'>$login</option> ";
}
echo "</select>
<input type=\"submit\" name=\"submitopt\" value=\"éffacer\">
</form>
";
}
echo "</div>";
echo "</div>";


suite script 1

<?php
require_once("../../auth.php");
//if (isset($_POST['peoplename']) ){
$todelete = $_POST['todelete'];

if ($todelete)
{
// on choisit ici de update SET firstname on peu mettre le champ quon veus. faire test
$delete = mysql_query ("DELETE FROM newscomptes,avatars WHERE id='$todelete'") or die (mysql_error());

//$delete = mysql_query ("DELETE FROM WHERE WHERE id='$todelete'") or die (mysql_error());

print_r ($_POST);
}

bricfa
Invité n'ayant pas de compte PHPfrance

05 nov. 2010, 15:18

desolé j'ai oublier de mettre en forme
re merci ca marche c'est super

mais j'ai un autre probleme

de plus c'est le dernier pour le moment

j' arrive a effacer la ligne de la table newscomptes avec l'id correspondant mais pas dans la table avatars

ca fait 2 jours que je suis dessus comme d'ab et je vois toujours pas

script 1

// EFFACER COMPTES
echo "EFFACER COMPTE MEMBRES";
if (!isset($_POST['submitopt']))
{
$extract = mysql_query (" SELECT id,login FROM newscomptes ORDER BY id DESC ") or die (mysql_error());
$numrows = mysql_num_rows($extract);

echo "<form action=\"ComptesCreer_effacer.php\" method=\"POST\">
<select name='todelete'>";

while ($row = mysql_fetch_assoc($extract))
{
$id = $row['id'];
$login = $row['login'];
echo" <option value='$id'>$login</option> ";
}
echo "</select>
<input type=\"submit\" name=\"submitopt\" value=\"éffacer\">
</form>
";
}
echo "</div>";
echo "</div>";


suite script 1

<?php
require_once("../../auth.php");
//if (isset($_POST['peoplename']) ){
$todelete = $_POST['todelete'];

if ($todelete)
{
// on choisit ici de update SET firstname on peu mettre le champ quon veus. faire test
$delete = mysql_query ("DELETE FROM newscomptes,avatars WHERE id='$todelete'") or die (mysql_error());

//$delete = mysql_query ("DELETE FROM WHERE WHERE id='$todelete'") or die (mysql_error());

print_r ($_POST);
}
re merci ca marche c'est super

mais j'ai un autre probleme

de plus c'est le dernier pour le moment

j' arrive a effacer la ligne de la table newscomptes avec l'id correspondant mais pas dans la table avatars

ca fait 2 jours que je suis dessus comme d'ab et je vois toujours pas

script 1
// EFFACER COMPTES
echo "EFFACER COMPTE MEMBRES";
if (!isset($_POST['submitopt']))
{
$extract = mysql_query (" SELECT id,login FROM newscomptes ORDER BY id DESC ") or die (mysql_error());
$numrows = mysql_num_rows($extract);

echo "<form action=\"ComptesCreer_effacer.php\" method=\"POST\">
<select name='todelete'>";

while ($row = mysql_fetch_assoc($extract))
{
$id = $row['id'];
$login = $row['login'];
echo" <option value='$id'>$login</option> ";
}
echo "</select>
<input type=\"submit\" name=\"submitopt\" value=\"éffacer\">
</form>
";
}
echo "</div>";
echo "</div>";

suite script 1
<?php
require_once("../../auth.php");

$todelete = $_POST['todelete'];

if ($todelete)
{
// on choisit ici de update SET firstname on peu mettre le champ quon veus. faire test
$delete = mysql_query ("DELETE FROM newscomptes,avatars WHERE id='$todelete'") or die (mysql_error());

print_r ($_POST);
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 nov. 2010, 02:01

pas de message d'erreur .

a vue de nez dans ta requete de delete(DELETE FROM newscomptes,avatars WHERE id='$todelete'); les id ne correspondent pas la même chose.
Pourquoi ? parce que traditionnellement id est le nom de la clef primaire de la table.

n'ayant pas le create table de la table avatars je ne peut pas le jurer mais je pense pas être trop loin.

pour rappel
c'est tes valeur qui sont pas bonne c'est tout, avec de faire un requete SQL regarde comment elle est en premier sinon tu va jamais t'en sortir
c'est particullièrement vrai, faut tester les requetes quand on en est pas certain (j'ai toujours une console mysql d'ouverte pour cela).

@+
Il en faut peu pour être heureux ......