PHP

Résolu
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   -  
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   922
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
T'as raison

ça fait bool(false)
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
qu'est ce que tu veux avoir dans cette variable ? la nouvelle valeur de num ?
0
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention  
 
Oui la nouvelle valeur de num.
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
D'accord, je vais faire ca
0
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   922
 
$code = str_pad($num, 6, "0", STR_PAD_LEFT);

+ strpad()
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
lol merci Dalida
0
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   922
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Non c'est bon j'ai trouvé ma connerie

ca marche
0
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention  
 
Merci à tous les deux.

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