PHP

Résolu/Fermé
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009 - 9 janv. 2009 à 09:57
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009 - 9 janv. 2009 à 15:09
Salut tout le monde,

J'ai encore et toujours des problèmes en php, normal quand on apprend.

Voilà la partie de mon code qui ne marche pas comme je voudaris :

//Test des valeurs reçues
echo("Nom : " . $nom . "<br />Prenom : " . $prenom . "<br />Date naiss. :" . $date);

//Requete SQL pour test
$query = "SELECT * FROM " . $table . " WHERE nom='" . $nom . "' AND prenom='" . $prenom . "' AND date_naissance='" . $date . "'";

//Requete pour le code et num dans table pilotes
$query1 = "UPDATE pilotes_num SET num = num + 1 WHERE libelle = 'pilotes'";


if((strlen($nom)!=0)&&(strlen($prenom)!=0)&&(strlen($date)!=0))
{
$result = mssql_query($query, $con);
echo(" <br> Nb enregistrement trouvé(s): ". mssql_num_rows($result));
if (mssql_num_rows($result) != 0)
{
echo "Enregistrement déjà présent dans la base de données.";
}
else
{

$result1 = mssql_query($query1, $con);

if(!mssql_query("INSERT INTO " . $table . "(code, num, nom, prenom, date_naissance) VALUES ('".$result1."', '".$result1."', '" . $nom . "', '" . $prenom . "', '" . $date . "')", $con))
{
echo("Enregistrement effectué avec succès");
}
else
{
echo("erreur lors de l'enregistrement");
}
}
}

mssql_close(); // Fermeture de la connexion
?>

Voila le "probleme" : apparemment ca fonctionne puisque je n'ai pas de message d'erreur et la requete update ($query1) s'exécute dans la base. Le truc c'est que la requete INSERT du if ne m'insere pas le résultat de $query1 dans les champs code et num.

Dans la table pilotes_num le num est en int, et dans la table pilotes num est en int et code est un varchar (6) (là il faudrait convertir le int en varchar pour obtenir : ex : si le num = 460, code = '000460')

Compliqué tout ça je suis perdue.

Help.

Merci à vous.
A voir également:

19 réponses

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
9 janv. 2009 à 10:13
salut,

la prochaine fois mets un titre plus explicite et mets le code source en forme avec le bouton "garder la mise en forme…"
pour qu'il apparaisse comme çà

+ conseils de rédaction

merci !
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 10:14
pour les problèmes de requête, il faut commencer par les afficher et les exécuter dans le client sql, histoire d'être sûr que le problème ne vient pas de la requête en elle-même.
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 10:20
Désolée pour la mise en forme du code, j'ai pas fait attention.

Les requêtes marchent je les ai faites sur SQLServer avant de les mettre dans mon code.

C'est juste le insert qui foire, il ne me met pas la valeur $result1 dans les champs.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 10:25
c'est normal, si tu affiches $result1 tout seul tu verras que ça ne correspond pas à grand chose d'exploitable, normalement, $result1 est un booleen d'après ce que j'ai compris de ton code.

fais :

var_dump($result1); avant ton if pour voir
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 10:39
T'as raison

ça fait bool(false)
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 10:56
qu'est ce que tu veux avoir dans cette variable ? la nouvelle valeur de num ?
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 11:01
Oui la nouvelle valeur de num.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 11:07
il faut que tu fasses un select pour la récupérer, soit avant et tu y ajoute 1, soit après, mais tu n'obtiendras pas la valeur à l'issue d'un update
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 11:11
D'accord, je vais faire ca
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 11:17
En effet ça a l'air mieux :)

Et comment je fait pour convertir la donnée num int en varchar(6) pour obtenir par ex si num=12, code ='000012' ???
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
9 janv. 2009 à 11:45
$code = str_pad($num, 6, "0", STR_PAD_LEFT);

+ strpad()
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 11:53
heu il y a peut-être une fonction en php pour faire ça mais je ne la connais pas...

essaye ça :

function varchar($var, $n) {
  $str = '';
  for ($i=strlen($var); $i<$n; $i++) {
    $str .= '0';
  }
  return $str.$var;
}

echo varchar($num, 6);
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 11:53
lol merci Dalida
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 14:19
J'ai modofié mon code :

$query1 = "UPDATE pilotes_num SET num = num + 1 WHERE libelle = 'pilotes'";

$query2 = "SELECT num FROM pilotes_num WHERE libelle = 'pilotes'";

if((strlen($nom)!=0)&&(strlen($prenom)!=0)&&(strlen($date)!=0))
{
	$result = mssql_query($query, $con);
	echo(" <br> Nb enregistrement trouv&eacute;(s): ". mssql_num_rows($result));
	
	$result1 = mssql_query($query1);
	
	$num = mssql_query($query2);
	$code = mssql_query($query2);
	$code = str_pad($num, 6, "0", STR_PAD_LEFT);
	
	if (mssql_num_rows($result) != 0)
	{
		echo "<br>Enregistrement déjà présent dans la base de données.";
	}
	else
	{
	LIGNE 54	if(!mssql_query("INSERT INTO " . $table . "(code, num, nom, prenom, date_naissance) VALUES ('" .$code. "', '" .$num. "', '" . $nom . "', '" . $prenom . "', '" . $date . "')", $con))
		{
			echo("Enregistrement effectué avec succès");
		}
		else
		{
			echo("erreur lors de l'enregistrement");
		}
	}
}


Mais j'obtiens ça :

Warning: mssql_query(): message: Échec de la conversion de la valeur varchar « Resource id #5 » en type de données int. (severity 16) in c:\program files\easyphp1-8\www\stage\traitement_controle.php on line 54

Warning: mssql_query(): Query failed in c:\program files\easyphp1-8\www\stage\traitement_controle.php on line 54
Enregistrement effectué avec succès
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
9 janv. 2009 à 14:31
en premier merci beaucoup d'avoir tenu compte de ma remarque, c'est beaucoup plus simple pour ceux qui veulent t'aider !!!
-:o)

ensuite, petit conseil.
en PHP quand tu as un soucis avec une fonction commence par chercher la définition de ladite fonction dans le manuel PHP.

pour ça une recherche Google avec "PHP nom_de_la_fonction"
dans les résultats, tu cherches le site php.net (les autres ne sont que des copies du manuel, autant aller à la source !).

dans ce cas, tu atterris sur cette page.

comme tu as un problème de conversion de type, regarde la valeur de retour :
Valeurs de retour
Retourne une ressource de résultats MS SQL en cas de succès, TRUE si aucun ligne n'est retournée, ou FALSE si une erreur survient.

resource, TRUE ou FALSE.
dans tous les cas, que ta requête aboutisse ou pas, $num ne contiendra pas un entier.
il faut tester la valeur de retour, puis extraire la valeur de ta ressource avec un code du genre :
$result = mssql_query($sql) or die("MS-Query Error in select-query");
$row = mssql_fetch_row($result);
$num = $row[0];
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 janv. 2009 à 14:47
suivant la requête entrée, on peut récupérer un ou plusieurs résultat, il faudra donc obligatoirement que tu passes par une fonction intermédiaire entre l'exécution de ta requête et la récupération des données.

il y a 3 fonctions pour ça :

mssql_fetch_row, mssql_fetch_assoc, mssql_fetch_array

Si tu es sûr de obtenir un seul résultat, tu peux faire comme te l'a conseillé Dalida, sinon tu peux faire quelque chose de ce genre :

while ($data = mssql_fetch_array($resultat)) {
  $num = $data['num'];
  $truc = $data['truc'];
}


je t'ai déjà transmis un code de ce genre dans un sujet précédent il me semble ;)
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 15:02
Merci de votre patience, je ne suis vraiment pas un cadeau. lol.

en effet tu m'avais donné un code du genre.

J'ai testé la méthode de Dalida.

$query = "SELECT * FROM " . $table . " WHERE nom='" . $nom . "' AND prenom='" . $prenom . "' AND date_naissance='" . $date . "'";

$query1 = "UPDATE pilotes_num SET num = num + 1 WHERE libelle = 'pilotes'";

$query2 = "SELECT num FROM pilotes_num WHERE libelle = 'pilotes'";

if((strlen($nom)!=0)&&(strlen($prenom)!=0)&&(strlen($date)!=0))
{
	$result = mssql_query($query, $con);
	echo(" <br> Nb enregistrement trouv&eacute;(s): ". mssql_num_rows($result));
	
	$result1 = mssql_query($query1);
	LIGNE 43 $row = mssql_fetch_row($result1);
	
	$num = $row[0];
	$code = mssql_query($query2);
	$code = str_pad($num, 6, "0", STR_PAD_LEFT);


Et j'ai :

Warning: mssql_fetch_row(): supplied argument is not a valid MS SQL-result resource in ....... on line 43


c'est pas $result1 qu'il faut lui passer ?


J'ai aussi fait s'afficher $code, qui donne 000000, or il devrait me donner 000002.
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 15:07
Non c'est bon j'ai trouvé ma connerie

ca marche
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
9 janv. 2009 à 15:09
Merci à tous les deux.

C'est sympa de m'avoir aidé.
0