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 -
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.
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:
- PHP
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
19 réponses
salut,
la prochaine fois mets un titre plus explicite et mets le code source en forme avec le bouton "garder la mise en forme…"
+ conseils de rédaction
merci !
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 !
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.
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.
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.
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
fais :
var_dump($result1); avant ton if pour voir
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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' ???
Et comment je fait pour convertir la donnée num int en varchar(6) pour obtenir par ex si num=12, code ='000012' ???
heu il y a peut-être une fonction en php pour faire ça mais je ne la connais pas...
essaye ça :
essaye ça :
function varchar($var, $n) { $str = ''; for ($i=strlen($var); $i<$n; $i++) { $str .= '0'; } return $str.$var; } echo varchar($num, 6);
J'ai modofié mon code :
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
$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é(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
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 :
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 :
-: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];
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 :
je t'ai déjà transmis un code de ce genre dans un sujet précédent il me semble ;)
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 ;)
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.
Et j'ai :
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.
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é(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.