Mysqli ?

Répondre
Nuclear
le 22/08/2009 à 16:53
Nuclear
Bonjour,

Je suis avec attention la plupart des comment faire, et je félicite les rédacteurs pour la clarté du code et des explications. Tout fonctionne parfaitement.

J'ai néanmoins besoin de faire fonctionner un script basé sur votre système d'espace membre mais la base de données en en mysqli, alors évidemment, cela ne fonctionne pas...

Qu'est-il possible de faire, j'ai tenté de remplacer tout simplement les mysql par des mysqli mais je tombe toujours sur une erreur SQL.

Les comment-faire vont-ils bientôt être ré-écrit pour du mysqli ?

Merci de votre aide,
Nuclear
JuTs
le 22/08/2009 à 17:09
JuTs
Bonjour

mysqli est, si je ne dis pas de bêtises, seulement une extension de PHP permettant d'utiliser les fonctionnalités des version de MySQL supérieures à 4.0

Quelle est l'erreur que tu obtiens ?
JuTs
Nuclear
le 22/08/2009 à 17:23
Nuclear
Oui, c'est juste une extension de php.

L'erreur obtenue est :
Erreur SQL !
SELECT count(*) FROM membre WHERE login="'
LA GLOBULE
le 22/08/2009 à 18:33
LA GLOBULE
Ce n'est pas une erreur ça.
C'est un message qu'affiche ton code, mais ce n'est pas l'erreur retournée.

Montre nous ton code.
Nuclear
le 22/08/2009 à 19:46
Nuclear
Ben, le code est tout simplement le votre avec des "i" :
1. <?php
2. // on teste si le visiteur a soumis le formulaire
3. if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
4. // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
5. if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
6. // on teste les deux mots de passe
7. if ($_POST['pass'] != $_POST['pass_confirm']) {
8. $erreur = 'Les 2 mots de passe sont différents.';
9. }
10. else {
11. $base = mysqli_connect ('serveur', 'login', 'password');
12. mysqli_select_db ('nom_base', $base);
13.
14. // on recherche si ce login est déjà utilisé par un autre membre
15. $sql = 'SELECT count(*) FROM membre WHERE login="'.mysqli_escape_string($_POST['login']).'"';
16. $req = mysqli_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error());
17. $data = mysqli_fetch_array($req);
18.
19. if ($data[0] == 0) {
20. $sql = 'INSERT INTO membre VALUES("", "'.mysqli_escape_string($_POST['login']).'", "'.md5(mysqli_escape_string($_POST['pass'])).'")';
21. mysqli_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysqli_error());
22.
23. session_start();
24. $_SESSION['login'] = $_POST['login'];
25. header('Location: membre.php');
26. exit();
27. }
28. else {
29. $erreur = 'Un membre possède déjà ce login.';
30. }
31. }
32. }
33. else {
34. $erreur = 'Au moins un des champs est vide.';
35. }
36. }
37. ?>
38. <html>
39. <head>
40. <title>Inscription</title>
41. </head>
42.
43. <body>
44. Inscription à l'espace membre :<br />
45. <form action="inscription.php" method="post">
46. Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
47. Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
48. Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"><br />
49. <input type="submit" name="inscription" value="Inscription">
50. </form>
51. <?php
52. if (isset($erreur)) echo '<br />',$erreur;
53. ?>
54. </body>
55. </html>
LA GLOBULE
le 22/08/2009 à 20:13
LA GLOBULE
Sauf que ce n'est pas aussi simple que ça : la fonction mysqli_error que tu utilises n'existe pas.
Dans le cas de MySQL, c'est mysql_error qui affiche le dernier message d'erreur, mais ce n'est pas le cas pour mysqli (même en ajoutant un i au nom de la fonction).

De même (et c'est beaucoup plus génant), la fonction mysqli_query n'existe pas.

Je te suggere vivement de lire la documentation de l'extension mysqli.

PS : bon nombre des fonctions mysqli que tu utilises sont devenues obsoletes et devraient être supprimées de PHP dans peu de temps. D'après la documentation PHP, mysqli n'est plus une bibliothèque de fonction mais c'est devenu une classe avec de nombreuses propriétés / méthodes. Il te faut donc revoir ton code pour utiliser cette nouvelle classe mysqli.
Nuclear
le 22/08/2009 à 22:46
Nuclear
Arf. Oki, merci de ta réponse.
Je vais donc revoir le script pour qu'il puisse passer en mysqli.

Pensez-vous modifier les "comment faire" afin qu'ils soient compatibles avec mysqli ?
LA GLOBULE
le 23/08/2009 à 01:27
LA GLOBULE
Ben ils sont compatibles mysql :)

Les comment faire sont la pour vous présenter une "démarche" de programmation, pas pour vous fournir des scripts achevés.

A vous de les adapter, de les optimiser, etc.
silkscalp
le 03/09/2009 à 11:55
silkscalp
pardon, je suis pas un pro du php mais tu te trompes heureusement:
mysqli_query : http://www.php.net/manual/fr/book.mysqli.php
mysqli::query : http://www.php.net/manual/fr/mysqli.query.php
2 exemples :
en procédural (comme tu fais apparement):
$result = mysqli_query([$link], "SELECT * FROM TaTable")
[link]: optionnel, représente une var connection à la bd
sinon en objet (avec l'appell à l'object mysqli) :
$mysqli = new mysqli("host", "user", "pass", "base");
$result = $mysqli->query("SELECT * FROM TaTable");

IL y a d'autre param optionnel donc je te laisse à la doc et Et oubli pas le free() ... :)
D'ailleur la fonction mysqli_connect prend la base comme argumenty. LE select_db sert à indiquer une base par défaut ... IL est dit de n'utiliser select_db QUE pour changer de base mais normalement, hors changement, il faut l'indiquer dans le mysqli_connect.je te conseille d'aller voir la définition de mysqli avec ses méthodes :
http://www.php.net/manual/fr/class.mysqli.php
vraiment va voir la doc c'est les meilleurs infos ...
tu trouvera par exemple
mysqli_real_query() -
mysqli_store_result() -
mysqli_use_result() -
et mysqli_next_result ...

Sinon pour ton code fait plutot un "mysqli_real_escape_string" que "mysqli_escape_string" (j'ai pas trouvé ce dernier dans la doc. Autant utiliser les fonction officielles de mysqli))et c'est vrai que la fonction erreur semble poser un pb ...
tiens un exemple de la doc (va la voir).
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Vérification de la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* Cette requête échoue car nous n'avons pas échappé $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("Erreur : %s\n", mysqli_sqlstate($link));
}
$city = mysqli_real_escape_string($link, $city);

/* Cette requête, par contre, réussira car nous avons échappé $city */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d ligne insérée.\n", mysqli_affected_rows($link));
}
mysqli_close($link);
?>
.
JE vais pas te la recopier àalors va voir
++
silkcalp
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours