Page 1 sur 1

UPDATE et INSERT INTO ne fonctionnent pas

Posté : 19 avr. 2006, 13:11
par sfourre
Je livre ci-dessous un extrait de mon espace membre :
<?php
if (!isset($_SESSION["login"]))
  	{
   session_start();   	
  	}

include ("../MySql.inc.php");
include ("adresse_saisie.php");
include ("../outils/fctphp_verifieur.php");
include ("../outils/fctphp_navigation.php");

// Affectation des variables récupérées du formulaire
$tabAdresse = array();
$tabAdresse["titre"] = $_POST['frm_titre']; 
$szNom = $tabAdresse["nom"] = $_POST['frm_nom']; 
$szPrenom = $tabAdresse["prenom"] = $_POST['frm_prenom'];
$tabAdresse["jour"] = $_POST['frm_jour'];
$tabAdresse["mois"] = $_POST['frm_mois'];
$tabAdresse["annee"] = $_POST['frm_annee'];
$tabAdresse["ville"] = $_POST['frm_ville'];
$tabAdresse["pays"] = $_POST['frm_pays'];
$tabAdresse["email"] = $_POST['frm_email'];
$szLogin = $tabAdresse["login"] = $_POST['frm_login'];
$tabAdresse["pass01"] = $_POST['frm_pass01'];
$tabAdresse["pass02"] = $_POST['frm_pass02'];
$tabAdresse["annuaire"] = (isset($_POST['frm_annuaire'])) ? TRUE : FALSE;
$tabAdresse["lettre"] = (isset($_POST['frm_lettre'])) ? TRUE : FALSE;
$tabAdresse["IP"] = fctRealIP();

// je vous laisse grace de tous mes test d'intégrité des paramètres saisis par l'utilisateur
...

// Ouverture de la connexion sur la base de données
$nom_de_la_base = "admin";
$cnx = mysql_connect($serveur, $utilisateur, $mot_de_passe);
mysql_select_db($nom_de_la_base, $cnx);

// Teste si login existe déjà
if (!isset($_SESSION["login"]) or $_SESSION["login"] != $tabAdresse["login"])
	{
	$req = "SELECT * FROM utils WHERE szLogin = '$szLogin'";
	$resultat = mysql_query($req, $cnx);
	$nbLigne = mysql_num_rows ($resultat);
	if ($nbLigne == 1)
		{
		fctAdrSaisie("", "&nbsp;Vous ne pouvez utiliser ce nom de compte, il est déjà utilisé ! ", $tabAdresse);
		exit();	
		}
	}

// Cas de la création d'un compte : nouveau membre
if (!isset($_SESSION["login"]))
	{
	$req = "INSERT INTO contacts (szPrenom, szNom) VALUES ('$szPrenom', '$szNom')";
	$resultat = mysql_query($req, $cnx);
	fctAdrSaisie("", "&nbsp;Votre compte a été créé ", $tabAdresse);
	echo "Ajout : ".$inCle." ".$szNom." ".$szPrenom;
	}
// Cas de la mise à jour d'un compte : membre déjà enregistré
else 
	{
	$inCle = $_SESSION["cle"];
	$req = "UPDATE utils SET szNnom = '$szNom', szPrenom = '$szPrenom' WHERE cle = '$inCle'";
	$resultat = mysql_query($req, $cnx);
	fctAdrSaisie("", "&nbsp;Votre compte a été mis à jour ", $tabAdresse);
	echo "Modification : ".$inCle." ".$szNom." ".$szPrenom;
	}

MySql_Close ($cnx);

?>
J'ai un soucis d'accès à ma base MySQL (installée avec EasyPhp).

La consultation :
$req = "SELECT * FROM utils WHERE szLogin = '$szLogin'";
fonctionne correctement sur un enregistrement saisis dans MySql

Par contre les ajout et modif :
$req = "INSERT INTO contacts (szPrenom, szNom) VALUES ('$szPrenom', '$szNom')";
$req = "UPDATE utils SET szNnom = '$szNom', szPrenom = '$szPrenom' WHERE cle = '$inCle'";
eux ne fonctionne pas : pas de message d'erreur, tous se passe bien, mais la base n'est pas modifiée !!!

La chaine de connexion à la base doit être bonne puisqu'elle fonctionne pour la consultation.
Alors une erreur de syntaxe ?
A moins qu'il existe un verrouillage "lecture seul" sur la base ?

Amicalement

Stéphane

PS : J'espère avoir posté dans le bon fil

Posté : 19 avr. 2006, 13:45
par jojolapine
fait un echo de tes requête:
echo $req;
ensuite tu faits un copier/coller du résultat, tu files dans phpmyadmin, et tu éxécutes la requête, tu verras bien ce qui se passe

Posté : 19 avr. 2006, 13:50
par Ryle
la commande "or die(mysql_error())" après un mysql_query te permet de voir s'il y a une erreur mysql (chose que php ne te signalera pas tout seul, vu que lui, il s'en fiche de savoir si ça a marché ou pas :))

A mon avis tu verras apparaître quelques problèmes.. peut être est ce le nom des colonnes.. le type.. la taille..

Est-ce normal par exemple que ta premiere et 3ème requêtes interrogent la table "utils", alors que la seconde insère dans "contacts" ?

Posté : 19 avr. 2006, 22:18
par sfourre
Merci Ryle.

J'avais 2 erreurs :
Tu as vu la première : contacts au lieu de utils
La seconde : szNnom au lieu de szNom.

J'avais négligé l'utilisation du or die... on ne m'y reprendra plus.

Une dernière question avant de clôturer ce fil :
$inCle = $_SESSION["cle"];
$req = "UPDATE utils SET szNom = '$szNom', szPrenom = '$szPrenom' WHERE cle = '$inCle'";
J'aurais souhaité remplacer par ci-dessous, mais la syntaxe est fausse, quelle est la bonne?
$req = "UPDATE utils SET szNom = '$szNom', szPrenom = '$szPrenom' WHERE cle = '$_SESSION['cle']'";
Par avance merci,

amicalement

Stéphane

Posté : 20 avr. 2006, 00:40
par Ryle
Tu peux l'écrire ainsi :
$req = "UPDATE utils SET szNom = '$szNom', szPrenom = '$szPrenom' WHERE cle = '".$_SESSION['cle']."'"; 
ou sinon avec des acolades pour que php sache ou s'arrête la variable, mais je trouve que c'est bien lourd pour pas grand chose :)

Posté : 20 avr. 2006, 03:39
par Spartakis
Tu peux aussi faire comme ceci :
$req = "UPDATE utils SET szNom = '$szNom', szPrenom = '$szPrenom' WHERE cle = '$_SESSION[cle]'";
J'ai simplement enlevé tes guillemets simples autour du mot 'cle' dans $_SESSION['cle'].

Posté : 21 avr. 2006, 21:17
par sfourre
Merci à tous de votre aide.

Amicalement

Stéphane