Page 1 sur 1

incrémentation et insérer

Posté : 16 mars 2009, 16:07
par mmvik
Bonjour,

Je crois avoir tout essayé (presque...)
Je n'arrive pas à insérer un nouvel enregistrement avec id+1 sans utiliser l'auto-incrémentation.
Je veux donc qu'il retourne d'abord la valeur la plus élevée de id, puis id+1 puis insérer. Voici mon code:

Code : Tout sélectionner

mysql_connect("$host","$base","$passe"); mysql_selectdb("$base"); $sql1="SELECT id FROM table ORDER BY id DESC LIMIT 1;"; $result=mysql_fetch_object(mysql_query($sql1)); $id=$result->id; $id=$id++; $sql2="INSERT INTO table (id, champs) VALUES ('$id', '$champs')"; mysql_query($sql2); exit;
Avec ce code, l'enregistrement n'est pas inséré, $id est vide...

Posté : 16 mars 2009, 16:10
par yaug
Hum.

Est ce que ceci fonctionne ?
<?php
mysql_connect("$host","$base","$passe");
mysql_selectdb("$base");
 
$sql1 = "SELECT MAX(id) AS MaxId FROM table LIMIT 1;";
$result = myslq_fetch_assoc( mysql_query($sql1) );
$id = ['MaxId'] + 1;
 
$sql2 = "INSERT INTO table (id, champs) VALUES ('$id', '$champs')";
mysql_query($sql2);
exit;

Posté : 16 mars 2009, 16:22
par mmvik
Merci pour ta réponse mais non..
Parse error: syntax error, unexpected '[' in /.../essai.php on line 25

ligne 25: $id = ['MaxId'] + 1;

Je crois avoir essayé toutes les manières, la requête semble facile, je comprends vraiment pas..

Posté : 16 mars 2009, 16:27
par yaug
Un peu d'effort quand même. :evil:
Il est évident ici que j'ai oublié de mettre $result :)

c'est donc :
$id = $result['MaxId'] + 1;
Cela devrait être mieux désormais.
Il ne suffit pas de copier coller, il faut aussi comprendre le code histoire d'être capable de déboguer soit même son code.

Posté : 16 mars 2009, 16:35
par mmvik
excuse moi je débute, je ne copie colle pas du code sans le comprendre :wink:

Fatal error: Call to undefined function: myslq_fetch_assoc() in /mnt/145/s.../url/essai.php on line 23
ligne 23:$result = myslq_fetch_assoc( mysql_query($sql1) );

Est ce que j'ai oublié quelque chose ?


Dans mon initial :

Code : Tout sélectionner

mysql_connect("$host","$base","$passe"); mysql_selectdb("$base"); $sql1="SELECT id FROM table ORDER BY id DESC LIMIT 1;"; $result=mysql_fetch_object(mysql_query($sql1)); $id=$result->id; echo $id;
Jusqu'ici, $id me renvoie bien la plus grande valeur du champ id.

Mais à l'étape suivante pour l'insérer, çà me renvoie une valeur $id nulle...

Code : Tout sélectionner

$sql2="INSERT INTO table (id, champs) VALUES ('$id', '$champs')"; mysql_query($sql2);

Posté : 16 mars 2009, 16:39
par yaug
Même chose...
J'ai écris vite.. et tu n'as pas vérifié derrière.

myslq_fetch_assoc est en fait mysql_fetch_assoc

Il suffit de lire l'erreur pour se rendre compte de ce qui cloche hein :wink:


Fatal error: Call to undefined function: myslq_fetch_assoc() in /mnt/145/s.../url/essai.php on line 23

myslq_fetch_assoc() n'est pas définie..
On regarde le nom de la fonction.. et hop.. on se rend compte de ce qui cloche, le nom.
Au pire, tu consultes sur fr.php.net tout ce qui concerne mysql, et tu devrais t'en rendre compte toi même. :wink:

Posté : 16 mars 2009, 16:50
par mmvik
merci yaug,effectivement c'était bien çà. Je ne connaissais pas mysql_fetch_assoc.
Merci beaucoup, bonne journée

Posté : 16 mars 2009, 16:53
par yaug
De rien.

Si je rale un peu, c'est surtout parce qu'on apprend énormement de ses propres erreurs.
Lorsque tu as une erreur, regarde bien le message d'erreur et comprend le.
En cas de doute, n'hésite pas à consulter la documentation de php.

Si tu ne trouve toujours pas, alors demande de l'aide.

Il est important de faire la démarche de tenter d'abord de corriger seul.
Certains utilisent la solution de facilité en demandant automatiquement de l'aide sans chercher soit même.. et au final ne progresse pas.

si ton problème est résolu, édit ton post et clique sur le bouton "Résolu".

Bonne continuation à toi.

Posté : 16 mars 2009, 16:59
par mmvik
J'en prends bonne note, merci