8721 sujets

Développement web côté serveur, CMS

Bonjour à tous !

Mon site est presque terminé, après avoir franchi bcp d'obstacles, j'en suis maintenant à la mise à jour de mes bases visiteurs, mais le mur me semble un peu haut !

En effet, bien que le mysqli_connect soit accepté, je n'arrive pas à accéder à ma base visiteurs.
Par ailleurs je n'ai pas réussi à récupérer ni mysql_error() ni mysql_errno() qui sont désespérément vides (ceci expliquant la dernière erreur dans APACHE ERROR LOG).

Je vous donne les instructions qui posent problème, ainsi que les résultats dans MYSQL LOG et APACHE ERROR LOG.

Cela provient fort probablement de la config WAMP que je ne maîtrise pas du tout...
D'avance merci.

<?php
$today = date("Y-m-d") ;
$link = mysqli_connect('localhost', 'root') ;
if ( ! $link ) { $check = 'SGBDD indisponible' ; goto compte_rendu ; }

if ( ! mysqli_select_db( $link, 'visiteurs' ) )
{ $check = 'Base Visiteurs inaccessible' ; goto fermer ; }

#-----------------------------------------------------------------------------
# entre-deux, il y a tout mon code de mise à jour du SGBDD
#-----------------------------------------------------------------------------

fermer:
mysqli_close($link);

compte_rendu:
echo $check . " - " . mysqli_error($link) ;
?>


Résultat dans APACHE ERROR LOG :
--------------------------------
[Thu May 09 17:34:12 2013] Smiley error [client 127.0.0.1] File does not exist: C:/apache2, referer: http://localhost/tests/
[Thu May 09 17:34:12 2013] Smiley error [client 127.0.0.1] File does not exist: C:/apache2, referer: http://localhost/tests/
[Thu May 09 17:34:12 2013] Smiley error [client 127.0.0.1] File does not exist: C:/apache2, referer: http://localhost/tests/
[Thu May 09 17:34:12 2013] Smiley error [client 127.0.0.1] File does not exist: C:/apache2, referer: http://localhost/tests/
[Thu May 09 17:34:12 2013] Smiley error [client 127.0.0.1] File does not exist: C:/apache2, referer: http://localhost/tests/
[Thu May 09 17:34:12 2013] Smiley error [client 127.0.0.1] File does not exist: C:/wamp/www/favicon.ico
[Thu May 09 17:34:17 2013] Smiley error [client 127.0.0.1] File does not exist: C:/wamp/www/favicon.ico
[Thu May 09 17:35:02 2013] Smiley error [client 127.0.0.1] PHP Warning: mysqli_error() [<a href='function.mysqli-error'>function.mysqli-error</a>]: Couldn't fetch mysqli in C:\\wamp\\www\\tests\\misajour.php on line 53, referer: http://localhost/tests/formulaire.php
[Thu May 09 17:35:02 2013] Smiley error [client 127.0.0.1] PHP Stack trace:, referer: http://localhost/tests/formulaire.php
[Thu May 09 17:35:02 2013] Smiley error [client 127.0.0.1] PHP 1. {main}() C:\\wamp\\www\\tests\\traitement.php:0, referer: http://localhost/tests/formulaire.php
[Thu May 09 17:35:02 2013] Smiley error [client 127.0.0.1] PHP 2. include() C:\\wamp\\www\\tests\\traitement.php:40, referer: http://localhost/tests/formulaire.php
[Thu May 09 17:35:02 2013] Smiley error [client 127.0.0.1] PHP 3. mysqli_error() C:\\wamp\\www\\tests\\misajour.php:53, referer: http://localhost/tests/formulaire.php

Résultat dans MYSQL LOG :
-------------------------
130508 20:01:19 [Note] Plugin 'FEDERATED' is disabled.
130508 20:01:19 InnoDB: The InnoDB memory heap is disabled
130508 20:01:19 InnoDB: Mutexes and rw_locks use Windows interlocked functions
130508 20:01:19 InnoDB: Compressed tables use zlib 1.2.3
130508 20:01:19 InnoDB: Initializing buffer pool, size = 128.0M
130508 20:01:19 InnoDB: Completed initialization of buffer pool
130508 20:01:19 InnoDB: highest supported file format is Barracuda.
130508 20:01:20 InnoDB: Waiting for the background threads to start
130508 20:01:21 InnoDB: 1.1.8 started; log sequence number 2161259
130508 20:01:21 [Note] Server hostname (bind-address): '(null)'; port: 3306
130508 20:01:21 [Note] - '(null)' resolves to '::';
130508 20:01:21 [Note] - '(null)' resolves to '0.0.0.0';
130508 20:01:21 [Note] Server socket created on IP: '0.0.0.0'.
130508 20:01:21 [Note] Event Scheduler: Loaded 0 events
130508 20:01:21 [Note] wampmysqld: ready for connections.
Version: '5.5.24-log' socket: '' port: 3306 MySQL Community Server (GPL)
130509 0:18:30 [Note] wampmysqld: Normal shutdown
select_bd n'existe pas pour mysqli ^^

C'est dans la connexion que tu signales la base de données ^^

avec Mysql_ (dont tu t'es inspiré manifestement) :
mysql_connect('IP_serveur','Utilisateur_mysql','mot_de_passe'); 

mysql_select_db('nom_de_la_bbd');



Avec mysqli_
$link = mysqli_connect('IP_serveur', 'Utilisateur_mysql', 'mot_de_passe', 'nom_de_la_bbd');


(et tu fais bien d'utiliser mysqli au lieu de mysql ^^)
Merci de votre aide.

Mais j'utilise bien mysqli ( les instructions MySQL étant obsolètes).

A tout hasard j'ai testé en enlevant le paramètre "$link" et voici ce qu'APACHE retourne :

[Fri May 10 07:31:07 2013] Smiley error [client 127.0.0.1] PHP Warning: mysqli_select_db() expects exactly 2 parameters, 1 given in C:\\wamp\\www\\tests\\misajour.php on line 7, referer: http://localhost/tests/formulaire.php

Comme je le disais dès le départ, c'est un pb système : Je frappe à la porte du SGBDD qui m'entend (mysqli_connect fonctionne) mais il ne veut pas me laisser accéder à ma base "visiteurs" qui existe pourtant bel et bien ( puisque créée via phpadmin avec quelques rows de test ).

A suivre...
Le $link est obligatoire, il va te servir de marqueur de connexion.

As-tu essayé, lors du mysqli_connect, de chercher directement ta base de données ?
$link=mysqli_connect('IP_serveur', 'Utilisateur_mysql', 'mot_de_passe', 'nom_de_la_bbd');



(et tu es sûr que "visiteurs" est le nom de ta base de données et pas de ta table ? )

dans PHPMyAdmin, quand tu arrives sur la page d'accueil (après connexion au serveur), le nom des bases, est dans la colonne de gauche (encadré sur le dessin) :
http://ftp.phpbb-fr.com/public/cdd/phpbb3/_screens/sauvegarder_restaurer_bdd/phpmyadmin1.jpg
Modifié par Lothindil (10 May 2013 - 09:19)
Encore merci de votre aide.
mysqli_select_db est une instruction valide (j'ai consulté la bible SQL via php.net) elle permet de changer de table.
En revanche, j'avais effectivement "omis" la distinction entre Base et Table : Si j'ai bien compris, je me "connect" à ma base (TEST par défaut sous WAMP) puis je "select" la table VISITEURS.
Je vais modifier mon code en conséquence...
Je vous tiens au courant, bien entendu (J'ai déjà fait un premier test, mais ça bloque maintenant sur le mot de passe).
La vie n'est pas un long fleuve tranquille...
Cdlt.
iakou a écrit :

mysqli_select_db est une instruction valide (j'ai consulté la bible SQL via php.net) elle permet de changer de table.


Non ! Smiley lol

Là encore, tu fais l'amalgame entre base et table.
mysqli_select_db où db = database. Donc cette fonction te sert à choisir ta base de donnée ("TEST" comme tu la nommes).

Ca permet à ta connexion de savoir où aller pomper les données. Le nom de ta table n’apparaîtra qu'au moment de tes requêtes.
Exemple :
SELECT * FROM visiteurs
Merci, on avance !
mysqli_select_db existe bel et bien mais je l'utilisais à tort et à travers.
Ce sont donc les attributs "FROM, UPDATE, INTO" de mes instructions MySQLi qui permettront l'accès et la m-à-j des différentes tables.
Comme j'ai en outre un problème de configuration, j'ai modifié quelques paramètres dans l'infâme php-ini, et maintenant je n'ai même plus d'accès à phpadmin !
Wamp est une "usine à gaz"...
Encore merci de votre aide, je vous tiens au courant de mes futurs tests après avoir démêlé LA WAMP.
Cordialement.
Bonsoir.
J'ai redressé LA WAMP, puis ma connexion. Voici mes instructions d'entrée :

$link = mysqli_connect( 'localhost', 'root' ) ;
if ( ! $link ) { $check = 'problème de connnexion au SGBDD' ; goto compte_rendu ; }
$select = mysqli_select_db ( $link, 'test' ) ;
if ( ! $select ) { $check = 'Base "test" indisponible' ; goto compte_rendu ; }

J'avais essayé de faire la connexion en une seule instruction comme vous me l'aviez suggéré, mais cela ne fonctionne pas (probème de mot de passe ?...)
J'ai donc laissé en 2 instructions, et ensuite je me sers de $link dans les autres ordres mysqli.

Maintenant je rentre bien en séquence, dans la phase de traitement.
J'y rencontre néanmoins de nouvelles difficultés, mais à chaque jour suffit sa peine...

Encore merci, ce dialogue courtois m'a permis d'avancer (Bien qu'il faille considérer le sujet résolu, je me permets d'attendre un peu car je ne suis pas encore très rassuré).

Cordialement et bon week-end...
Bonsoir, ça y est, la mise à jour de ma BDD fonctionne correctement.

je souligne les points suivants :

- Après un sélect l'instruction $row=mysqli_fetch_array() est essentielle.
- Le var_dump() m'a bien aidé également.
- Il faut enfin faire attention aux quotes éventuelles en textarea : $txt=addslashes($txt)...

Encore merci
Oui, merci jb !

Je pensais qu'il fallait "manipuler" les données reçues de mon formulaire avant d'utiliser une instruction MySQLi qui allait forcément se planter à cause des quotes... (je l'ai constaté lors des tests).

Je ne comprends pas mysqli_real_escape_string () et son fonctionnement (la machinerie de l'instruction ). C'est pourquoi j'ai choisi addslashes() qui est plus simple.

Il semblerait donc que mysqli_real_escape_string () associe à une donnée PHP "brute", soit un pointeur vers son équivalent "converti", soit un code indiquant qu'il doit convertir.

Ce qui sous-entend une table interne (transparente pour le programmeur) dans laquelle SQL répertorie les variables qui doivent être "moulinées".

Enfin, si j'ai bien compris ?...

Encore merci.