INSERT ne veut pas inscrire dans la DB

Invité
Invité n'ayant pas de compte PHPfrance

30 juil. 2007, 20:22

Problem avec la fonction insert (enfin je crois)
	if(!mysql_connect($_SESSION['MYSQL_SERVER1'],$_SESSION['MYSQL_LOGIN1'],$_SESSION['MYSQL_PASS1'])){
	echo'Connection Impossible';
	exit();
	} else{
	echo'Connexion réussie<br>';
	}


    mysql_select_db('ma_db') or die ("Unable to select database ".$_SESSION['MYSQL_DB1']);
	
   	$query = "SELECT scol FROM ma_table where scol = 'untruc'";
	
	$result = mysql_query($query) or die("Invalid query (login): " . mysql_error());
	 
	if (mysql_affected_rows()<>0) {

	echo 'untruc exist déjà';
	resendToForm("?flg=yellow");

	}else { 

	$quero = "INSERT INTO allusers(sFName,sLName,sSociete,sPcode,sUser,sEmail,sPsswd,regdate) VALUES('".$vals['fname']."','".$vals['lname']."','".$vals['societe']."','".$vals['pcode']."','".$vals['user']."','".$vals['mail']."','".$password."','".$regdate."')";
		
	$inserto=mysql_query($quero);
	echo '  untruc doesn\'t exists<br>';
	}

// var pour verif -----------------------------------------
		echo '<br>'.$quero.'  <<<< query';
		echo '<br>'.$inserto.'  <<<< query';
		echo '<br>';
		echo $_SESSION['MYSQL_SERVER1'].'<br>';
		print_r ($vals);
//-------------------------------------------------------------------
		mysql_close();
Alors la connection mysql est bonne
la connection à la base est bonne aussi
les valeurs sont lu l'affichage print_r me le confirme.

Mais il ne transmet rien à la base de données.

Que ce passe-t-il ??

Merci d'avance

David.

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

30 juil. 2007, 20:39

Et pourquoi ne fais tu pas de mysql_error() lors de l'insertion pour vérifier s'il n'y a pas de message d'erreur ? affiche également la requête généré avec ses valeurs, ca peut aider :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 juil. 2007, 20:51

1. Pas forcément ce qu'il y a de plus sur de mettre les identifiants de connexion à la base en session.

2. if (mysql_affected_rows()<>0) : pas sur du résultat de "<>" (syntaxe SQL) remplace plutôt par "!="

3. Tu effectues des tests d'affichage il aurait été intéressant de nous les fournir.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 juil. 2007, 20:52

2. if (mysql_affected_rows()<>0) : pas sur du résultat de "<>" (syntaxe SQL) remplace plutôt par "!="
En PHP, les 2 syntaxes sont authorisées

Sinon, mysql_affected_rows() retourne le nombre de lignes affectées par les requêtes INSERT, UPDATE, REPLACE ou DELETE.
Donc, ce test ne retournera pas 1 parce que le SELECT à retourné une ligne.
Pour cela, il faut que tu modifie ton SELECT pour qu'il devienne

Code : Tout sélectionner

SELECT count(*) ...
et que ton test se transforme en un test sur cette valeur.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 juil. 2007, 20:57

2. if (mysql_affected_rows()<>0) : pas sur du résultat de "<>" (syntaxe SQL) remplace plutôt par "!="
En PHP, les 2 syntaxes sont authorisées
Ok, on en apprend tous les jour :D

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 135 Messages

30 juil. 2007, 22:07

Bon super conseils si j'étais venu plus tôt j'aurais trouvé plus tôt la solution.

j'ai fais le mysql error() à l'insertion, et il donnait un truc comme "duplicate entry ratata key 1" sur la dernière variable.

du coup je me suis rendu compte que le dernier champs était un clé unique et comme c'était le champ pour la date (et ce n'est pas une contrepétrie anglaise :) ) ça merdait, à moins d'insérer les valeurs une seule fois par jour...idiot que je suis.

	if(!mysql_connect($_SESSION['MYSQL_SERVER1'],$_SESSION['MYSQL_LOGIN1'])){
	echo'Connection Impossible';
	exit();
	} else{
	echo'Connexion réussie<br>';
	}
	
  mysql_select_db($_SESSION['MYSQL_DB1']) or die("Unable to select database ".$_SESSION['MYSQL_DB1']);
	
   	$query = "SELECT sEmail FROM users where sEmail = '".$_POST['mail']."'";
	
	$result = mysql_query($query) or die("Invalid query (login): " . mysql_error());
	
	if (mysql_affected_rows()<>0) {
	echo 'exist déjà';
	}else { 
		$inserto=mysql_query("INSERT INTO allusers (sFName, sLName, sSociete, sPcode, sUser, sEmail,sPsswd, regdate) VALUES ('".$arVals['fname']."','".$arVals['lname']."','".$arVals['societe']."','".$arVals['pcode']."','".$arVals['user']."','".$arVals['mail']."','".$password."', '".$regdate."')") or die("Invalid query (login): " . mysql_error());
	}
Sinon, mysql_affected_rows() retourne le nombre de lignes affectées par les requêtes INSERT, UPDATE, REPLACE ou DELETE.
Donc, ce test ne retournera pas 1 parce que le SELECT à retourné une ligne.
Mais je vais essayé de faire comme tu me dit avec select count, seulement avec la fonction mysql_affected_rows ça me dirige vers la sortie "existe déjà", alors que la valeur n'existe pas dasn la table :?:
Je pensais utiliser mysql_num_rows ou mysql_fetch_rows ???

Merci

David.

EDIT: pis je vais aussi enlever les identifiants de connection dans les session ... aussi :)
Des noeuds au cerveau!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 juil. 2007, 22:14

Récupère le nombre de lignes d'un jeu de résultat. Cette commande n'est disponible que pour les requêtes comme SELECT ou SHOW qui retournent un jeu de résultats.
Donc tu peux oui.

pis je vais aussi enlever les identifiants de connection dans les session ... aussi
tu les places dans un fichier (comme simple variable) que tu inclus au besoin à l'aide d'un require_once()

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 juil. 2007, 22:50

Je pensais utiliser mysql_num_rows ou mysql_fetch_rows ???
Voici une petite liste de conseils pratiques, de choses à faire ou au contraire ne pas faire lorsque vous écrivez une requête en SQL :
...
* Compter les enregistrements
La fonction COUNT(*) qui permet de compter le nombre d'enregistrements d'une table, est la commande SQL la plus optimisée. Elle retourne forcément un résultat et ne ramène pas d'enregistrements inutiles. Si vous souhaitez uniquement connaître le nombre d'enregistrements que ramène une requête, et que vous n'avez pas besoin de récupérer le contenu de ceux-ci préferez le COUNT(*) à un "SELECT * " qui va inutilement charger toutes les valeurs pour ensuite compter le nombre d'enregistrements retournés avec mysql_num_rows() .
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 124 Messages

31 juil. 2007, 04:00

Me semble aussi qu'Un COUNT(ID) par exemple est mieux optimisé qu'un COUNT(*).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

31 juil. 2007, 10:44

Pour MySql, je ne peux l'affirmer, mais il me semble bien que le moteur d'optimisation d'Oracle est capable de l'optimiser. :-k
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 135 Messages

01 août 2007, 10:49

Merci pour vos conseils
j'ai peut-être pas trouvé la meilleur solution mais ca marche pour le moment.
  mysql_select_db($mysql_db) or die("Can't select database ".$mysql_db);
   	$query = "SELECT COUNT(scol) FROM allusers where scol = '".$varcol."'";

	$result = mysql_query($query) or die("Invalid query (login): " . mysql_error());
	$result=mysql_fetch_row($result);
	if ($result[0]<>0) {
		resendToForm("?flg=yellow");
		}
Avec mysql_num_rows il me retournait tout le temps "1" jamais zero surement une erreur de ma part, avec "fetch" il me sort un tableau et donne zéro s'il trouve rien.

pour l'instant ça marche merci à vous tous.

Et pardon aux Admins pour m'être connecté en invité, je pense pas être le seul mais du coup je peux pas mettre résolu. :oops:

Merci encore.

david.
Des noeuds au cerveau!

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

01 août 2007, 12:28

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
comme tu n'étais pas connecté lorsque tu as posté le sujet :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...