Base de données sur WampServer + interface en php / hml

Fermé
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016 - 30 août 2016 à 15:49
 Utilisateur anonyme - 7 sept. 2016 à 11:14
Bonjour,
j'ai pour projet de mettre en place une base de données qui peut être gérer et alimenter via une page en php et html.
Afin d'alimenter ma base de données, j'ai créer un formulaire à remplir, cependant j'ai des erreurs... et je ne comprends pas ces erreurs... J'ai juste compris qu'il fallait utiliser du sqli ou pdo mais je n'y arrive pas...

Voici mes erreurs :
( ! ) Warning: mysql_select_db() expects parameter 2 to be resource, object given in C:\wamp\www\Monsite\fonctions.php on line 4

Call Stack
1 0.0100 138512 {main}( ) ...\index.php:0
2 0.0100 140880 connectMaBase( ) ...\index.php:38
3 0.0100 148000 mysql_select_db ( ) ...\fonctions.php:4



( ! ) Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\Monsite\index.php on line 55

Call Stack

1 0.0100 138512 {main}( ) ...\index.php:0
2 0.0300 141040 mysqli_query ( ) ...\index.php:55

J'ai 2 fichiers, un fichier fonctions.php qui permet de se connecter à la base de données et un fichier index.php contenant le formulaire ainsi que le code permettant de saisir dans la base de données.

Fonctions.php :

<?php
function connectMaBase(){
$base = mysqli_connect ('localhost', 'root', '');
mysql_select_db ('bddEcole', $base) ;
}
?>

index.php :

<?php
include("fonctions.php");
?>
<html>
<head><title>Formulaire de saisie</title></head>
<body>

<h1>Entrez les données demandées :</h1>
<form name="inscription" method="post" action="index.php">
Entrez le nom : <input type="text" name="nom"/> <br/>
Entrez le prénom : <input type="text" name="prenom"/> <br/>
Entrez le pseudo Facebook : <input type="text" name="pseudo"/> <br/>
Entrez le site : <input type="text" name="lien"/> <br/>
<h2>Si vous connaissez l'établissement scolaire :</h2>
Entrez l'établissement : <input type="text" name="ETB"/> <br/>
Entrez la region : <input type="text" name="reg"/> <br/>
<h2>Si vous ne connaissez pas l'établissement scolaire :</h2>
Entrez l'établissement supposé : <input type="text" name="ETBSUPP"/> <br/>
Entrez la région supposé: <input type="text" name="REGSUPP"/> <br/>

<input type="submit" name="valider" value="OK"/>
</form>
<?php
if (isset ($_POST['valider'])){
//On récupère les valeurs entrées par l'utilisateur :
$nom =$_POST['nom'];
$prenom=$_POST['prenom'];
$pseudo=$_POST['pseudo'];
$lien=$_POST['lien'];
$ETB=$_POST['ETB'];
$REG=$_POST['DI'];
$ETBSUPP=$_POST['ETBSUPP'];
$REGSUPP=$_POST['DISUPP'];
// date d'aujourd'hui

$today = date("y-m-d");
//On se connecte
connectMaBase();

//On prépare la commande sql d'insertion



$sql = 'INSERT INTO signalement VALUES ("","'.$today.'")';
$sql = 'INSERT INTO eleve VALUES ("","'.$nom.'","'.$prenom.'","")';
$sql = 'INSERT INTO lien VALUES ("","'.$pseudo.'","'.$lien.'","","","")';
$sql = 'INSERT INTO etablissement VALUES ("","'.$ETB.'","'.$ETBSUPP.'")';
$sql = 'INSERT INTO region VALUES ("","'.$REG'","'.$REGSUPP.'")';



/*on lance la commande (mysql_query) et au cas où,
on rédige un petit message d'erreur si la requête ne passe pas (or die)
(Message qui intègrera les causes d'erreur sql)*/
mysqli_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion
mysql_close();
}
?>
</body>
</html>

Pouvez-vous m'aider à comprendre mes erreurs?

7 réponses

jordane45 Messages postés 38393 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 janvier 2025 4 731
30 août 2016 à 18:40
Bonjour,

d'un côté tu utilises la dll mysqli (note le I à la fin...) et d'un autre... tu essayes d'appeller des fonctions de l'ancienne extension
comme par exemple :
mysql_select_db()


....
voir la façon de se connecter en mysqli
$hote = 'localhost';
$utilisateur = 'username';
$mdp = 'motdepasse';
$nombdd = 'ccm'; // Nom de la base de données
$bdd = mysqli_connect($hote, $utilisateur, $mdp, $nombdd);
if (!$bdd) {
    echo 'Erreur de connexion (' . mysqli_connect_errno() . ') ' . mysqli_connect_error();
}

1
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
1 sept. 2016 à 09:13
Merci pour ta réponse... j'ai bien modifier mon code... Seulement j'ai une erreur sur la ligne 55 :

mysqli_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysqli_error());

D'après mes recherches sur internet, il faut passer 2 paramètres, j'ai donc modifié comme ceci :

mysqli_query ($bdd, $sql) or die ('Erreur SQL !'.$sql.'<br />'.mysqli_error());

Mais j'ai toujours une erreur ça ne doit pas être ça...
0
jordane45 Messages postés 38393 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 janvier 2025 4 731
1 sept. 2016 à 09:25
Sans voir ton code corrigé .... impossible d t’aider
NB : **** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
1 sept. 2016 à 10:09
Voici mon code...

Fonction :

<?php
function connectMaBase(){
    $hote = 'localhost';
	$utilisateur = 'root';
	$mdp = '';
	$nombdd = 'bddecole'; // Nom de la base de données
	$bdd = mysqli_connect($hote, $utilisateur, $mdp, $nombdd);
if (!$bdd) {
    echo 'Erreur de connexion (' . mysqli_connect_errno() . ') ' . mysqli_connect_error();
}
}
?>


index.php

<?php 
include("fonctions.php"); 
?> 
<html> 
<head><title>Formulaire de saisie</title></head> 
<body> 

<h1>Entrez les données demandées :</h1> 
<form name="inscription" method="post" action="index.php"> 
Entrez le nom : <input type="text" name="nom"/> <br/> 
Entrez le prénom : <input type="text" name="prenom"/> <br/> 
Entrez le pseudo : <input type="text" name="pseudo"/> <br/> 
Entrez le site : <input type="text" name="lien"/> <br/> 
<h2>Si vous connaissez l'établissement scolaire :</h2> 
Entrez l'établissement : <input type="text" name="ETB"/> <br/> 
Entrez la region : <input type="text" name="reg"/> <br/> 
<h2>Si vous ne connaissez pas l'établissement scolaire :</h2> 
Entrez l'établissement supposé : <input type="text" name="ETBSUPP"/> <br/> 
Entrez la région supposé: <input type="text" name="REGSUPP"/> <br/> 

<input type="submit" name="valider" value="OK"/> 
</form> 
<?php 
if (isset ($_POST['valider'])){ 
//On récupère les valeurs entrées par l'utilisateur : 
$nom =$_POST['nom']; 
$prenom=$_POST['prenom'];	
$pseudo=$_POST['pseudo']; 
$lien=$_POST['lien']; 
$ETB=$_POST['ETB']; 
$REG=$_POST['DI']; 
$ETBSUPP=$_POST['ETBSUPP']; 
$REGSUPP=$_POST['DISUPP']; 
// date d'aujourd'hui 

$today = date("y-m-d"); 
//On se connecte 
connectMaBase(); 

//On prépare la commande sql d'insertion 



$sql = 'INSERT INTO signalement VALUES ("","'.$today.'")'; 
$sql = 'INSERT INTO eleve VALUES ("","'.$nom.'","'.$prenom.'","")'; 
$sql = 'INSERT INTO lien VALUES ("","'.$pseudo.'","'.$lien.'","","","")'; 
$sql = 'INSERT INTO etablissement VALUES ("","'.$ETB.'","'.$ETBSUPP.'")'; 
$sql = 'INSERT INTO region VALUES ("","'.$REG'","'.$REGSUPP.'")'; 



/*on lance la commande (mysql_query) et au cas où, 
on rédige un petit message d'erreur si la requête ne passe pas (or die) 
(Message qui intègrera les causes d'erreur sql)*/ 
mysqli_query ($bdd,$sql) or die ('Erreur SQL !'.$sql.'<br />'.mysqli_error()); 

// on ferme la connexion 
mysql_close(); 
} 
?> 
</body> 
</html> 


Et donc les erreurs affichées sur ma page localhost pour tester mon alimentation via le formulaire dans ma base de données :

Notice: Undefined variable: bdd in C:\wamp\www\Monsite\index.php on line 55

# Time Memory Function Location

1 0.0000 138584 {main}( ) ...\index.php:0


Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\Monsite\index.php on line 55

# Time Memory Function Location

1 0.0000 138584 {main}( ) ...\index.php:0
2 0.0200 142056 mysqli_query ( ) ...\index.php:55


Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\Monsite\index.php on line 55

# Time Memory Function Location

1 0.0000 138584 {main}( ) ...\index.php:0
2 0.0300 142128 mysqli_error ( ) ...\index.php:55


Merci de votre aide
0
jordane45 Messages postés 38393 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 janvier 2025 4 731 > anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
1 sept. 2016 à 10:16
Tu as placé ton code de connexion dans une fonction....
Donc ... les variables initiées dans cette fonction.... restent dans la fonction !!

A la limite tu peux en faire un RETURN
function connectMaBase(){
      $hote = 'localhost';
	$utilisateur = 'root';
	$mdp = '';
	$nombdd = 'bddecole'; // Nom de la base de données
	$bdd = mysqli_connect($hote, $utilisateur, $mdp, $nombdd);
  if (!$bdd) {
     echo 'Erreur de connexion (' . mysqli_connect_errno() . ') ' . mysqli_connect_error();
  }
 return $bdd;
}

puis dans ta page :
$bdd = connectMaBase(); 
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
1 sept. 2016 à 10:50
ok merci mais j'ai toujours la dernière erreur :

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\Monsite\index.php on line 55

# Time Memory Function Location

1 0.0000 138584 {main}( ) ...\index.php:0
2 0.0300 142128 mysqli_error ( ) ...\index.php:55

Erreur SQL !INSERT INTO di VALUES ("","sdgsd","")


Je ne pense pas que ça puisse venir de ma requête puisque j'ai essayer de tester justement le formulaire sans cette requête là!!

Désolé je suis novice... je connais assez bien le sql mais la travailler avec du sqli est nouveau pour moi...
0
jordane45 Messages postés 38393 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 janvier 2025 4 731 > anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
1 sept. 2016 à 16:20
Ben... tu as un message d'erreur :

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\Monsite\index.php on line 55

.... donc tu prend mysqli_error ... et tu le colles dans ton moteur de recherche...
Tu vas alors tomber sur la doc.... et tu verras qu'il manque un paramètre à l'intérieur...
https://www.php.net/manual/fr/mysqli.error.php
 mysqli_error($bdd)



NB ... cette méthodologie... est valable pour tous les différents messages d'erreur que tu pourrais rencontrer.....

NB² :
. je connais assez bien le sql mais la travailler avec du sqli est nouveau pour moi.

le SQL est un langage ..... là ... mysqli c'est la dll utilisée par php pour interragir avec une base de donnée mysql.
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
2 sept. 2016 à 10:16
ok c'est le temps que je m'y mette réellement et que je comprenne bien les messages d'erreurs...
Y a t'il des problème avec l'auto-incrémentation?

Par exemple j'ai créé ma table Etablissement :
CREATE TABLE etablissement
(
idEtab SMALLINT AUTO_INCREMENT PRIMARY KEY,
Etab VARCHAR(100),
EtabSupposé VARCHAR(100)
)


et dans mon php, j'ai recherché sur les forums et trouvé qu'avec une incrémentation automatique, on doit spécifier les colonnes donc comme ci-dessous :

$sql = 'INSERT INTO etablissement ("Etab", "EtabSupposé") VALUES ("'.$ETB.'","'.$ETBSUPP.'")';




Erreur SQL !INSERT INTO etablissement ("Etab", "EtabSupposé") VALUES ("efzef","")
Erreur de syntaxe pr�s de "Etab", "EtabSupposé") VALUES ("","")' � la ligne 1

Je ne comprends pas mon erreur... je vais essayer de faire d'autres tests... Mais les clés primaires de mes 5 tables sont en auto incrémentation...
0
Utilisateur anonyme
2 sept. 2016 à 10:24
Bonjour

Les double quotes servent à délimiter les chaînes de caractères, pas les noms des tables.


$sql = 'INSERT INTO etablissement (Etab, EtabSupposé)...

et non pas

$sql = 'INSERT INTO etablissement ("Etab", "EtabSupposé")...
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
2 sept. 2016 à 10:57
Je ne comprends pas j'ai toujours la même erreur :

Erreur SQL !INSERT INTO di (idDI, DirectionInter, DirectionInterSupposé) VALUES ("","sdfsdf","sdfsdf")
Erreur de syntaxe pr�s de '�) VALUES ("","sdfsdf","sdfsdf")' � la ligne 1

idDi est en auto incremenatation... et les 2 autres champs en varchar...


$sql = 'INSERT INTO signalement (idsignalement, dateSignalement) VALUES ("","'.$today.'")';
			$sql = 'INSERT INTO eleve(idEleve, NomEleve, PrenomEleve) VALUES ("","'.$nom.'","'.$prenom.'")';
			$sql = 'INSERT INTO site (idSite, PseudoSite, LienSite) VALUES ("","'.$pseudo.'","'.$lienFB.'","","","")';
			$sql = 'INSERT INTO etablissement (idEtab, Etab, EtabSupposé) VALUES ("","'.$ETB.'","'.$ETBSUPP.'")';
			$sql = 'INSERT INTO di (idDI, DirectionInter, DirectionInterSupposé) VALUES ("","'.$DI.'","'.$DISUPP.'")';


les 1er champs sont également en auto-incrementation dans toutes les tables... Dois-je indiquer les clés étrangères ci-dessus ou non?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
2 sept. 2016 à 14:43
plusieurs remarques :
1 - ta série de $sql=... ne sert pas à grand chose : chaque valeur remplaçant la précédente, seule ta dernière requête est prise en compte. C'est pour ça que tu ne vois d'erreur que sur cette dernière requête.
2 - C'est une erreur de syntaxe, elle n'a a priori aucun rapport avec le fait que tu aies des champs autoincrémentés ou non.

3 - Non, ce n'est plus la même erreur.

4 - Vu le message d'erreur, je pense que tu as un problème d'encodage, que tu mélanges de l'utf-8 et d'autres encodages. Pour réduire les problèmes liés à l'encodage, n'utilise pas de caractères spéciaux, en particulier pas de lettres accentuées, dans tes noms de variables, de tables et de champs. Autrement dit, renomme tes champs 'EtabSupposé' en 'EtabSuppose', 'DirectionInterSupposé' en 'DirectionInterSuppose', etc.
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
6 sept. 2016 à 15:48
J'ai bien modifier mes champs et donc enlevé les champs avec des accents...
Cependant, à la base ma base de données est en latin1_swedish_ci, si je la passe en utf8_general_ci, j’obtiens la même erreur... As-tu un tuto ou un site où je puisse prendre des informations corrects sur la création d'un formulaire de saisie qui rempli ma base de données?
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
2 sept. 2016 à 16:03
Cependant j'ai mis une suite de $sql puisque c'est pour remplir ma base de données à partir du formulaire saisie par l'utilisateur...
ça ne va pas fonctionner comme ça? Il faut faire une boucle?
ok merci je vais travailler sur ça... merci pour l'aide que tu m'apporte!!
0
Utilisateur anonyme
6 sept. 2016 à 17:26
Tu dis que tu as encore la même erreur, mais je ne le crois pas. Peux-tu recopier le nouveau message d'erreur ?

Par ailleurs, je n'ai pas de tuto spécifique pour ce problème particulier. N'importe quel tuto sur les formulaires devrait convenir, mais je n'ai pas d'exemple non plus car j'ai appris dans les manuels de référence des langages plutôt que dans les tutos.
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
7 sept. 2016 à 08:59
Erreur SQL !INSERT INTO di (idDI, DirectionInter, DirectionInterSupposee) VALUES ("","egerg","")
Incorrect integer value: '' for column 'idDI' at row 1

Voila ma requête SQL d'insertion :
CREATE TABLE di
(
idDI SMALLINT AUTO_INCREMENT PRIMARY KEY,
DirectionInter VARCHAR(100),
DirectionInterSupposee VARCHAR(100)
)


J'ai bien supprimé les accents...

En sachant que soit le 2ème champs ou le 3ème champs peut être rempli, pas les 2 en même temps... et que l'ID est en auto incrémentation
0
jordane45 Messages postés 38393 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 janvier 2025 4 731 > anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
7 sept. 2016 à 09:03
Bonjour
Tu ne dois pas mettre ton champ id dans ta requete vu qu'il est en auto-increment c'est la bdd qui le gère. ..
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
7 sept. 2016 à 10:11
ah ok super :)
La du coup j'ai vérifié ma dernière requête fonctionne bien et insère bien les données dans ma base de données... super!! Bon je n'ai pas terminé ce n'est que le début de ce projet... mais au moins grâce à toi j'ai compris mes erreurs...
Cependant , il me reste mon problème de savoir comment faire pour insérer tous les champs du formulaire qui sont dans différentes tables... la actuellement, c'est le dernier $sql qui est saisie dans la table... Faut-il faire une boucle?
0
jordane45 Messages postés 38393 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 janvier 2025 4 731 > anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
7 sept. 2016 à 10:41
Tu dois exécuter CHAQUE requête....
tu créés ta variable $sql... tu exécutes...
tu créés ensuite ta seconde variable $sql.. tu l'exécute.... et ainsi de suite.... c'est le plus propre.
0
anne so52 Messages postés 23 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 4 octobre 2016
7 sept. 2016 à 10:46
ok super merci beaucoup!
0