Pages :
(reprise du message précédent)

a yé ça enregistre bien c'étais dans les requêtes,

$result =$mysqli->query ('SELECT user_id FROM users WHERE user_id = user_id ');

$row = $result->fetch_array();

$user_name = $row['user_id'];


$req =$mysqli->query ('SELECT city_id FROM city WHERE city_id = city_id');


$row = $req->fetch_array();

$city_name = $row['city_id'];

merci de me remonter le moral....
boni75 a écrit :
a yé ça enregistre bien c'étais dans les requêtes,

$result =$mysqli->query ('SELECT user_id FROM users WHERE user_id = user_id ');

$row = $result->fetch_array();

$user_name = $row['user_id'];


$req =$mysqli->query ('SELECT city_id FROM city WHERE city_id = city_id');


$row = $req->fetch_array();

$city_name = $row['city_id'];

merci de me remonter le moral....


typiquement, tu as écrit :
$result =$mysqli->query ('SELECT user_id FROM users WHERE user_id = user_id ');

je zoom sur la clause where
WHERE user_id = user_id 

= user_id, c'est quoi user_id ?? c'est pas une variable là, c'est pas un string ni un int. donc pas de résultat la.
cela enregistre mais toujours se message d'erreur dans MySQL

La sélection courante ne contient pas de colonne unique. Les grilles d'édition, les cases à cocher ainsi que les liens Edition, Copie et Supprimer ne sont pas disponibles.
La sélection courante ne contient pas de colonne unique. Les grilles d'édition, les cases à cocher ainsi que les liens Edition, Copie et Supprimer ne sont pas disponibles.

que veut dire ce message d erreur dans MySQL
JENCAL a écrit :


typiquement, tu as écrit :
$result =$mysqli->query ('SELECT user_id FROM users WHERE user_id = user_id ');

je zoom sur la clause where
WHERE user_id = user_id 

= user_id, c'est quoi user_id ?? c'est pas une variable là, c'est pas un string ni un int. donc pas de résultat la.


tu ne mas pas répondu.

P.S laisse les message en anglais merci
Modifié par JENCAL (25 Nov 2015 - 16:11)
oui tu as raison ce n'est pas logique, de plus quand l'utilisateur cherche une ville je doit enregistrer que la ville existante dans la base, alors je ne suis pas couché lol
voici le code et encore merci pour t'on aide...
message erreur : error: Call to a member function fetch_array() on a non-object

<?php
require('inc/connection.php');

?>
<!doctype html>
<html>
<head>
<title>acceuil</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class="content">
<center>

<h1>formulaire de recherche de villes</h1>

<?php
if(isset($_GET['submit']))
{
//print_r($_GET);

$user_first_name = $_GET['user_first_name'];


$user_name = $_GET['user_name'];


$city_name = $_GET['city_name'];



if((empty($_GET['user_first_name'])) OR (empty($_GET['user_name']))){

// var_dump($_GET);

$message = '<p>veuillez remplir tous les champs</p>';


}else{


if($mysqli->query('INSERT INTO users(user_first_name, user_name) VALUES (" '.$user_first_name. ' ", " ' .$user_name . ' ") ')){


$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' ont ete enregistre.</p>';

}else{

$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' ont pas ete enregistre.</p>';

}

}
if(empty($user_first_name) OR empty($user_name) AND empty($city_name)){

$message = '<p>veuillez remplir tous les champs</p>';

}else{

$result =$mysqli->query ('SELECT user_id, user_first_name, user_name FROM users WHERE user_id = " '. $user_first_name . ' ", " ' .$user_name. ' " ');

$row = $result->fetch_array();

$user_name = $row['user_id'];


$req =$mysqli->query ('SELECT city_id, city_name, city_text FROM city WHERE city_id = " ' .$city_name . ' " ');


$row = $req->fetch_array();

$city_name = $row['city_id'];

if($mysqli->query ('INSERT INTO user_searchs(user_id, city_id) VALUES (" ' .$user_name . ' "," '. $city_name. ' ") ')){

$message = '<p>vos informations ont ete enregistre.</p>';

}else{

$message = '<p>vos informations n ont pas ete enregistre.</p>';
}
}
}


?>

<?php if(isset($message)) echo $message; ?>

<form action="index.php" method="GET">
<p>quel est votre prenom : <input class="button" type="text" name="user_first_name" placeholder="votre prénom" /></p>
<p>quel est votre nom : <input class="button" type="text" name="user_name" placeholder="votre nom" /></p>
<p>quel ville recherchez vous : <input class="button" type="text" name="city_name" placeholder="votre ville" /></p>
<p><input type="submit" name="submit" value="recherche" /></p>

</form>
</center>

</div>

</body>

</html>
l'erreur viens d'ici, et comme depuis le début, c'est encore une erreur de syntaxe.....

$result =$mysqli->query ('SELECT user_id, user_first_name, user_name FROM users WHERE user_id = " '. $user_first_name . ' ", " ' .$user_name. ' " ');

$row = $result->fetch_array();


ta requête SELECT est fausse.
je te conseille de lire au minimum ces cours :ici et ici
et tu verra que ta clause est fausse.
$result =$mysqli->query ('SELECT user_id, user_first_name, user_name FROM users WHERE user_id = " '. $user_first_name . ' " AND user_name = " ' .$user_name. ' " ');

$row = $result->fetch_array();


j'ai rajouter "AND user_name = "
Modifié par JENCAL (25 Nov 2015 - 17:21)
la jsuis grave pommer....

bon dans ma logique...

il faut que je récupère l'id de la table city et l' id de la table users avec requête select
puis j'enregistre le tout dans la table user_search

j'ai regarder les explications mais PERDU

if(empty($user_first_name) OR empty($user_name) AND empty($city_name)){

$message = '<p>veuillez remplir tous les champs</p>';


}else{


$result = ('SELECT user_id FROM users WHERE user_id = " ' . $user_first_name . ' " AND user_first_name=" ' .$user_first_name . ' " ');

$row = $result->fetch_array();

$user_first_name = $row['user_id'];


$req = ('SELECT city_id FROM city WHERE city_id = " ' .$city_name. ' " AND city_name = " ' .$city_name. ' " ');


$row = $req->fetch_array();

$city_name = $row['city_id'];

if($mysqli->query ('INSERT INTO user_searchs(user_id, city_id) VALUES (" '. $user_first_name . ' ", " ' .$city_name. ' ") ')){

$message = '<p>vos informations ont ete enregistre.</p>';

}else{

$message = '<p>vos informations n ont pas ete enregistre.</p>';

}
ça ne marche pas
mais le problème encore et encore c'est la syntaxe :


$result = ('SELECT user_id FROM users WHERE user_id = " ' . $user_first_name . ' " AND user_first_name=" ' .$user_first_name . ' " ');

$row = $req->fetch_array();



il est où mysqli query ?
là tu "fetch array" une variable qui .... je sais même pas ce qu'elle contient car elle est égale à un texte entre parenthèse.

Alors maintenant si tu es pommé, ça sert à rien de codé, il faut apprendre

http://www.w3schools.com/php/func_mysqli_query.asp
http://php.net/manual/fr/mysqli.quickstart.statements.php
http://www.w3schools.com/php/php_mysql_select.asp




edit :

en plus je t'ai écrit la requête !
$result =$mysqli->query ('SELECT user_id, user_first_name, user_name FROM users WHERE user_id = " '. $user_first_name . ' " AND user_name = " ' .$user_name. ' " ');

$row = $result->fetch_array();

et tu transforme:
$result = ('SELECT user_id FROM users WHERE user_id = " ' . $user_first_name . ' " AND user_first_name=" ' .$user_first_name . ' " ');

$row = $req->fetch_array();


et tu utilise user_first_name pour le champ user_id et user_first_name .... ????
Il faut passer par la case apprentissage, étape par étape; et pas codé par ci par là n'importe comment.
Si tu fais du copié coller, il faut au moins comprendre.
Modifié par JENCAL (26 Nov 2015 - 10:58)
AmandaLyles a écrit :
C'est assez compliqué d'apprender HTML à 100% mais je crois que tu réussiras dans cette chose. Smiley cligne


c'est sûr, surtout quand tu rajoute une couche PHP/base de données.
Modifié par JENCAL (26 Nov 2015 - 14:59)
merci pourquoi mon html n'est pas bon.


AmandaLyles a écrit :
C'est assez compliqué d'apprender HTML à 100% mais je crois que tu réussiras dans cette chose. Smiley cligne

et d' apprendre le français aussi surtout avec un correcteur "d'apprender " plutôt d'apprendre le html.... Smiley sweatdrop

et c'est vrai j'ai fait du copier collé car trop marre en fin de journée du coup tout effacé et refais comme il le faut dans la règle de l'art....mais merci de m'enfoncé encore plus.
boni75 a écrit :
....mais merci de m'enfoncé encore plus.


nan nan nan personne t'enfonce, la preuve, t'a ouvert trois sujet pour le même sujet, a chaque fois je suis venu t'aider. Le problème c'est de copier coller "en modifiant" sans comprendre ce que l'on modifie et sans comprendre la modification. mais comme tu dis, t'en a marre. Si tu en as ras le bol que ça ne marche pas (ton copié collé), il faut pas continuer dans cette vois , d'où mon commentaire (encore une fois pour t'aider)

avec :

JENCAL a écrit :

Alors maintenant si tu es pommé, ça sert à rien de codé, il faut apprendre

http://www.w3schools.com/php/func_mysqli_query.asp
http://php.net/manual/fr/mysqli.quickstart.statements.php
http://www.w3schools.com/php/php_mysql_select.asp


donc, personne t'enfonce.
jencal, merci t'inquiet pas je n'ais pas pris ça mal je sais que vous faite tout pour me faire comprendre la logique, donc aujourd'hui j'ai repris mais bouquins de cours, car pas près encore, mais je m'aperçois que le PHP faut une logique a tous moment du procèsuce et PHP c'est comme si on racontais une histoire (pas d'histoire pas de code)...donc si tu veut bien m'expliqué une chose.

je pense que dans mon histoire il faut que je travail avec une boucle" for" ou" while" pour dire si ma recherche est la key 1 tu t'arrête, si sait la clef 5 tu fais tant que la clef n'est pas a 5 et bien tu incrémente 1 de plus a chaque tour de boucle...

qu est ce que t' en pense?
Salut,
je pense qu'il faut essayer de procéder en 3 temps :
étape 1 : Définir précisément ce que tu veux faire (phrases simples et courtes)
(perso j'ai pas compris si les gens sont inscrits (login/mot de passe) et donc connectés (normalement on a donc accès a l'identifiant si ils sont connectés) ou si ils mettent juste un nom et un prénom et c'est tout ( et dans ce cas la, j'avoue ne pas comprendre l’intérêt de l'identifiant d'utilisateur, vu que j'ai l'impression que tu essayes d'aller chercher l'identifiant juste avec le nom (une combinaison nom et prénom serait légèrement mieux pour éviter de mélanger des utilisateurs qui ont le même nom de famille, nom+prenom+date_naissance ça permet encore un peu plus d’éviter de mélanger 2 utilisateurs (même si de mon point de vue l’idéal reste le combo login et mot de passe))

étape 2 : Écrire les requêtes SQL (sans php) qui permettent de résoudre le problème du coté de la base de données : on rentre 'en dur' des données qui devrait être fourni par le formulaire)
Par exemple :

//requête pour récupérer l'identifiant de la ville a partir du nom (unique) de la ville.
SELECT city_id FROM city WHERE city_name = 'un_nom_de_ville';

//requete pour récupérer le nouveau numero d'identifiant (max+1) 
select max(user_id)+1 from users

//requête pour insérer l'utilisateur avec un id qui augmente de 1, son nom, son prénom et l'identifiant de sa ville (on reutilise les 2 requetes faciles du dessus)
INSERT INTO users VALUES (t2.user_id,'nom1', 'prenom1', t1.city_id) 
from (SELECT city_id FROM city WHERE city_name = 'un_nom_de_ville')t1,
(select max(user_id)+1 from users)t2;

//requête pour insérer dans user_searchs
INSERT INTO user_searchs VALUES ( 3, 5); // 3 pour l'identifiant utilisateur et 5 pour l'identifiant de la ville


Une fois que tu as tes requêtes SQL qui fonctionnent
étape 3 : Passer du SQL au php
3.1 transformation de requête : les données 'en dur' doivent être remplacer par des variables php (on ne cherche pas encore a faire fonctionner le formulaire on fera ça a la fin)

Exemple pour un :
SELECT city_id FROM city WHERE city_id = 'un_nom_de_ville';

devient :

$var_php_nom_ville="un_nom_de_ville";
$result =$mysqli->query ("SELECT city_id FROM city WHERE city_id = '".$var_php_nom_ville."' ");

Et on fait bien gaffe dans le mysqli->query avec l'alternance des doubles quotes " et des simples quotes ' (dans la requête SQL j'ai mis des simples quotes pour le string 'un_nom_de_ville' donc j'ai encadré la requête avec des doubles quotes : "SELECT ... " et on NE SUPPRIME PAS les simples quotes de 'un_nom_de_ville' quand on remplace un_nom_de_ville par une variable php, ils sont obligatoire dans la requête pour indiquer que le nom de ville est une chaine de caractères

Si tu fais ça pour tes requêtes(une, tu test, tu ajoutes une 2e, tu re test, etc..) , normalement a la fin tu as un fichier un peu moche mais le plus dur est fait, tu as pu debug facilement requête par requête.

3.2 Il ne reste plus qu'a faire le formulaire *o*
Ah et aussi pense a faire un petit passage de mysqli_real_escape_string() sur les entrées des utilisateurs contre les injections sql, du style :
$user_name = mysqli_real_escape_string($_GET['user_name']);

Modifié par mathieu1004 (27 Nov 2015 - 14:35)
je t explique mon devoir:
dans un premier temps, je dois faire trois table une table city ou il y a des information city_id, city_name, city-text donc nom de ville et texte expliquant la ville avec des information deja enregistré.
dans un deuxième temps je dois créer une table user avec un user_id, first_name, name, city_id de la table city pour faire la relation.
dans un troisieme temps créer une table ou je vais enregistré toute les recherches de l'utilisateur donc table user_searchs, user_id, city_id.

mon devoir est:

de créer un formulaire ou l'utilisateur rentre son prénom et son nom et la ville qui recherche:
de retrouver et d'afficher le détail d'une ville lorsque l'utilisateur clique sur un lien
de stocker dans la table user_searchs les villes rechercher par les utilisateurs
et de pouvoir retrouver les recherches de l'utilisateur via la table user-seachs
et dans url de retrouver le numero de l'id de la ville.

voici le code, mais attention je n'ais pas fait la recuperation..

<?php
require('inc/connection.php');

?>
<!doctype html>
<html>
<head>
<title>acceuil</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class="content">
<center>
<h1>formulaire de recherche de villes</h1>
<?php
if(isset($_GET['submit']))
{
//print_r($_GET);

$first_name = $_GET['first_name'];


$name = $_GET['name'];

$city_name = $_GET['city_name'];


if(empty($first_name) OR empty($name) OR empty($city_name)){


$message = '<p>veuillez remplir tous les champs</p>';

}else{

if($mysqli->query('INSERT INTO users(first_name, name) VALUES (" '.$first_name. ' ", " ' .$name . ' ") ')){


$message = '<p>votre prénom ' .$first_name.' et votre nom ' .$name . ' ont ete enregistre.</p>';

}else{

$message = '<p>votre prénom ' .$first_name.' et votre nom ' .$name . ' n ont pas ete enregistre.</p>';

}
}

if($name AND $city_name ){

$req = $mysqli->query('SELECT*FROM users WHERE first_name = " ' .$first_name . ' " AND name = " ' .$name. ' " ');

//print_r($req);

$row = $req->fetch_array();

$id_name = $row['user_id'];




$result = $mysqli->query('SELECT*FROM city WHERE city_name =" ' .$city_name. ' " ');

//print_r($result);

$row = $result->fetch_array();

$id = $row['city_id'];

if($mysqli->query ('INSERT INTO user_searchs(user_id, city_id) VALUES (" '.$id_name. ' " , " ' .$id. ' " ) ')){

$message = '<p>vos informations ont ete enregistre.</p>';

}else{

$message = '<p>vos informations n ont pas ete enregistre.</p>';
}
}
}
?>
<?php if(isset($message)) echo $message; ?>

<form action="index.php" method="GET">
<p>quel est votre prenom : <input type="text" name="first_name" placeholder="votre prénom" /></p>
<p>quel est votre nom : <input type="text" name="name" placeholder="votre nom" /></p>
<p>quel ville recherchez vous : <input type="text" name="city_name" placeholder="votre ville" /></p>
<p><input type="submit" name="submit" value="recherche" /></p>
</form>
</center>

</div>

</body>

</html>
puis j'ai eu mon prof ce matin qui me repond des truc du style si un hamburger n' a pas de steack c'est pas un hamburger si il a un steack c'est un hamburger.
C'est un peu mieux, mais c'est toujours pas assez clair..
a écrit :
dans un deuxième temps je dois créer une table user avec un user_id, first_name, name, city_id de la table city pour faire la relation.
PAS OK.. Qu'est ce que tu entends par "city_id de la table city pour faire la relation" ? Personnellement cela ne veut rien dire pour moi. Que va contenir ce champs : l'identifiant de la ville de l'utilisateur ? l'identifiant de la première/dernière ville recherché par l'utilisateur ? autre chose ?


Ah et j'ai oublié dans le message précédent, quand tu postes du code ENCADRE LE avec les balises codes qui vont bien, parce que c'est franchement illisible sinon :x

Même chose pour rendre le code plus lisible, essaye de faire des blocs de codes qui sont cohérent, pas sauter une ligne sur 2 n'importe où au petit bonheur la chance :x, et indente les lignes quand tu fais des if else, boucle etc...

Prend aussi l'habitude de commenter des blocs de codes pour expliquer ce que cela fait ( éventuellement même chaque ligne de code si tu débutes, seulement les plus compliquer si tu ne gères pas trop sur certaines lignes )


Exemple pour le début du code :
<?php
require('inc/connection.php');

?>
<!doctype html>
<html>
<head>
<title>acceuil</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class="content">
<center>
<h1>formulaire de recherche de villes</h1>
<?php
//Si on arrive sur la page suite a un get
if(isset($_GET['submit']))
{
    //On recupere les valeurs du formulaire : on utilise mysqli_real_escape_string pour se proteger legerement des injections sql (meme si il faudrait plutot des requetes preparés)
    //print_r($_GET);
    $first_name = mysqli_real_escape_string($_GET['first_name']);
    $name = mysqli_real_escape_string($_GET['name']);
    $city_name = mysqli_real_escape_string($_GET['city_name']);

    
    if(empty($first_name) OR empty($name) OR empty($city_name)){ //Si un des champs du formulaire est vide
        $message = '<p>veuillez remplir tous les champs</p>';
    }else{ //tous les champs sont remplis
        if($mysqli->query('INSERT INTO users(first_name, name) VALUES (" '.$first_name. ' ", " ' .$name . ' ") ')){ //on essaye d'inserer le nom et le prenom de l'utilisateur
        $message = '<p>votre prénom ' .$first_name.' et votre nom ' .$name . ' ont ete enregistre.</p>';
        }else{//si on a pas reussi a inserer le nom et le prenom de l'utilisateur
            $message = '<p>votre prénom ' .$first_name.' et votre nom ' .$name . ' n ont pas ete enregistre.</p>';
        }
    }

etc...



Bref je te laisse lire la réponse que j'avais fais avant, si tu réfléchis proprement en sql, cela peut parfois te simplifier la partie php après.. typiquement la requête sql que je proposais permettrais d'enregistrer un utilisateur(id+nom+prenom) + l'identifiant de sa ville et il faut juste préciser que le couple (nom+prenom) doit être unique (voire même clé primaire) pour assurer un genre d'unicité de l'utilisateur , toi comme tu es parti tu insères un utilisateur, j'ai aucune idée des contraintes que tu as mis car j'ai l'impression que tu es parti directement sur le php au lieu du sql ..

les Hamburgers j'ai pas compris par contre, mais je pense que l'on s'en fou
Modifié par mathieu1004 (27 Nov 2015 - 17:25)
le city_id est pour faire la jointure entre les deux tables city , users.
pour les hamburgers c'est pour dire que le prof me répond toujours des réponse évasif du style des hamburger....ou du style si la poule ponds des œufs c'est une femelle ou si elle ne pond pas c'est un coq juste pour dire qu'avec cela comment bien apprendre...

je dois récupéré toutes les recherches des utilisateurs et les affiché en forme de liens...et si la recherche correspond alors j'affiche les donnéés enregistré dans la table city.

merci pour ta réponse pour l'instant je fais une pose car trop marre....
Pages :