CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Aide php array, associer une valeur d'une colone sql à une autre d'une autre table

News culture
La Planète des Singes : Le Nouveau Royaume - la révolution simienne est en marche !
DébutPage précedente
1
Page suivantePage suivante
_Fali_ _Fali_
MP
Niveau 4
23 avril 2015 à 14:08:03

Bonjour, je suis en train de créer un script, mais je bloque à une étape, mon script procède comme ceci:
(J'utilise SQL Server et les drivers ODBC)

Formulaire:
un champ à remplir, le nom de l'objet à rechercher ($ItemName)

Voici le fonctionnement de mon script:
Si $ItemName est défini, alors
{
1) Recherche du groupe d'objet dans le quelle est l'objet $ItemName dans la table dbo.Items (Colones utilisés: ItemName et Grade; Grade est le groupe d'objet représenté par un entier int entre 0 et 999)

2) Recherche des identifiants des monstres portant le groupe d'objet dans la table dbo.MobItems (à partir du groupe d'objet de l'étape 1 - Colones utilisés: Grade et MobID, MobID est l'identifiant du monstre, représenté par un entier de 1 à 9999)

Et enfin, le problème:

3)Remplacer les identifiants des monstres par leurs noms dans la table dbo.Mob (à partir de leur identifiants trouvés dans l'étape 2 - Colones utilisés: MobID et MobName, ou MobName est le nom du monstre en lettres portant le groupe d'objet (Grade) dans le quelle figure $MobItem )
}
Ou alors on dit de remplir le champ du nom d'objet.

EN GROS: Un joueur donne le nom de l'objet -> Qui donne son groupe (grade) -> qui donne l'id du monstre -> Qui donne normalement le nom du monstre, présent sur un autre table sql.
Avec les valeur commune entre les deux première table (Items et MobItems) Grade (int), et les valeur commune entre les deux dernières (MobItems et Mobs) MobID(int)

Actuellement, mon script marche jusqu'a l'étape 2 et donne comme résultat tout les identifiants des monstres, mais le problème est qu'un joueur ne connait pas ces identifiant, et n'en a pas accès.

Le problème étant que le résultat de l'étape deux se présente sous cette forme:
977
1813
1814

et le nombre de résultat peut varier et je ne sais pas comment récupérer individuellement ces résultat pour trouver leur nom.
Je débute le PHP et je ne sais pas si la fonction array peut faire le travail, mais je ne sais pas comment l'utiliser pour, j'aurais besoin d'un petit peut d'aide ^^
Bonne journée à vous et merci d'avance :)

Popovitch Popovitch
MP
Niveau 10
23 avril 2015 à 14:20:57

Si j'ai bien compris, tu as une table MobItems qui contient les ID des Mobs et ce que tu veux faire c'est à partir d'un MobItems.MobID récupérer le Mobs.MobName :question:

Si c'st bien ça : il faut que tu apprennes à te servir des jointures (je te laisse faire une recherche Google la dessus)

SELECT Mob.MobID, Mob.MobName
FROM MobItems 
INNER JOIN Mob ON Mob.MobID = MobItems.MobID
WHERE ...

PS : Tes noms de table / colonne sont pas top
PS2 : Essaie de faire plus court la prochaine fois :-)))

Message édité le 23 avril 2015 à 14:21:29 par Popovitch
_Fali_ _Fali_
MP
Niveau 4
23 avril 2015 à 14:38:02

faire c'est à partir d'un MobItems.MobID récupérer le Mobs.MobName

Oui c'est bien ça!
Je vais essayer sa tout de suite, merci bien, je connaissait pas trop les jointres, j'essaye sa tout de suite! ;)
Et oui désolé du pavé, j'avais peur de pas être compris
et ceci:

Tes noms de table / colonne sont pas top

C'est à dire? Au faite c'est pas moi qui les ai crée mais un studio de jeu directement (je suis l'administrateur d'un serveur privé - shaiya-legacy.lyrosgames.com/)

Popovitch Popovitch
MP
Niveau 10
23 avril 2015 à 14:47:12

Le 23 avril 2015 à 14:38:02 _Fali_ a écrit :

Tes noms de table / colonne sont pas top

C'est à dire?

Premièrement ne met pas de majuscules : par exemple au lieu de MobItem mets plutôt mob_item, pareil pour MobName, MobId, ...

Ensuite dans ta table Mobs je trouve pas ça très pertinent d'avoir un champ MobName, l'idéal serait simplement name (on sait que ce que tu mets dans ta table Mobs à un rapport avec des Mobs, pas la peine de le rappeler)

:d) Une page qui regroupe les bonnes pratiques : http://sql.sh/1396-nom-table-colonne

_Fali_ _Fali_
MP
Niveau 4
23 avril 2015 à 18:31:09

Von voici mon code:

include ('db.php');
//include ('query.php');
Echo ('Retour au <a href="form.php">formulaire</a><br/>');
if (isset($_POST['Var1']))
{
$ItemName=$_POST['Var1'];

$MobID="USE PS_GameDefs
SELECT MobID, MobName
FROM dbo.MobItems
INNER JOIN Mobs ON dbo.Mobs.MobID = dbo.MobItems.MobID
WHERE Grade = (SELECT Grade from dbo.Items
WHERE ItemName like '$ItemName')";
//2-3
$end=odbc_exec($conn,$MobID);
while( $row = odbc_fetch_array($conn,$end) ) {
print_r($row);

}
}

Else if (empty($_POST['Var1']))
{
echo("Merci de remplir le ou les champs obligatoires");
}
(essayez de coller dans un logiciel comme notpad++ je n'ai pas trouver la fonction [code] des atres forum désolé)
Il retourne ça:

Warning: odbc_exec(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Ambiguous column name 'MobID'., SQL state 37000 in SQLExecDirect in C:\www\dropfinder\proc.php on line 24

Warning: odbc_fetch_array(): supplied resource is not a valid ODBC result resource in C:\www\dropfinder\proc.php on line 25

Et aucun résultat désiré, j'ai oublié quelque chose? Mal interprété la façon d'utiliser "INNER JOIN" ?

Je suis vraiment débutant désolé pour tout mes questions :/

Message édité le 23 avril 2015 à 18:32:59 par _Fali_
Popovitch Popovitch
MP
Niveau 10
23 avril 2015 à 19:49:52

Le truc imporant c'est ça :

Ambiguous column name 'MobID'

Ce qu'il te dit c'est que dans ta requête le champ MobID appartient à plusieurs table différente et il ne sait simplement pas lequel choisir :ok:

Il te suffit de prefixer le nom du champ par la table qui t'interesse

SELECT Mobs.MobID, Mobs.MobName ...

+ T'as pas besoin de répéter le nom de la base de donnée (à moins que ce soit une spécificité de ODBC :()

_Fali_ _Fali_
MP
Niveau 4
23 avril 2015 à 22:58:37

T'as pas besoin de répéter le nom de la base de donnée

ma variable $conn ne contient pas le nom de la base de données, pour sa que je le met.
Par contre, la mon script ne génère aucune erreur, mais ne donne aucun résultat, rien.
Voici la page proc.php


<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Drop Finder</title>
	</head>
	<body>
<?
include ('db.php');
//include	('query.php');
Echo ('Retour au <a href="form.php">formulaire</a><br/>');
if (isset($_POST['Var1']))
 {
$ItemName=$_POST['Var1']; 

$MobID="USE PS_GameDefs
SELECT dbo.Mobs.MobID, dbo.Mobs.MobName
FROM dbo.MobItems 
INNER JOIN Mobs ON dbo.Mobs.MobID = dbo.MobItems.MobID
WHERE Grade = (SELECT Grade from dbo.Items
WHERE ItemName like '$ItemName')";

$end=odbc_exec($conn,$MobID);
while($row = odbc_fetch_array($end)) { 
    print_r($row); 

	
}
} 

Else if (empty($_POST['Var1']))
{
echo("Merci de remplir le ou les champs obligatoires");
}
?>
	</body>
</html>

et son formulaire, form.php:


<!DOCTYPE html>

<html>
	<head>
		<meta charset="UTF-8">
		<title>Drop finder</title>
	</head>
	<body>
	<center>Drop Finder
		<h1>Trouver un drop</h1>
		<small>Vous devrez au préalable connaitre le nom EXACTE de l'objet recherché (Exemple: Poudre Alchimique Magique) afin de trouver la liste des monstres qui le détienne</small>
		<br/>
		<br/>	
			<form action = "proc.php" method="post">
				<p>Nom de l'objet* <input type = "text" name = "Var1"><br /></p>
				<br/>
				<input type="submit" name="send_price" value="Envoyer">
			</form>
			<br/>
			<br/>
			<small></small></center>
	</body>
</html>

et enfin la page db.php


<?php
	
	
$host='MONIP';  
$user='MONID; 
$pass='MONPW'; 

$conn = @odbc_connect("Driver={SQL Server};Server=$host;", $user, $pass) or die("Unable to connect to database!");


	
function mssql_escape_string($data) {
	if(!isset($data) or empty($data)) return '';
	if(is_numeric($data)) return $data;
	$non_displayables = array(
		'/%0[0-8bcef]/',			// url encoded 00-08, 11, 12, 14, 15
		'/%1[0-9a-f]/',				// url encoded 16-31
		'/[\x00-\x08]/',			// 00-08
		'/\x0b/',					// 11
		'/\x0c/',					// 12
		'/[\x0e-\x1f]/'				// 14-31
	);
	foreach($non_displayables as $regex)
		$data = preg_replace($regex,'',$data);
		$data = str_replace("'","''",$data);
	return $data;
}
?>

Pouvez vous m'éclairer sur ce qui ne va pas? Je suis à cour d'idée je m'arrache les cheveux dessus, je ne vois vraiment pas, j'ai regardé sur plusieurs site pour vérifier les fonction qui j'aurais pu éventuellement mal utiliser mais je vois pas, si vous voulez je pourrais envoyer mes tables vous vous en avez besoins. Ecore une fois je débute, et je suis vraiment désolé de vous déranger... Mais je vous remerci énormément en tout cas de m'aider.

Message édité le 23 avril 2015 à 23:01:26 par _Fali_
_Fali_ _Fali_
MP
Niveau 4
24 avril 2015 à 20:40:32

Ok c'est bon j'ai trouvé,
SELECT dbo.Mobs.MobID, dbo.Mobs.MobName
FROM dbo.MobItems
INNER JOIN Mobs ON dbo.Mobs.MobID = dbo.MobItems.MobID
WHERE Grade = (SELECT Grade from dbo.Items
WHERE ItemName like '$ItemName')"

Enfaite, c'est ceci (SELECT Grade from dbo.Items
WHERE ItemName like '$ItemName') qui peut retourner plusieurs ligne, j'ai donc mis un message d'érreur si c'était le cas. Merci beaucoup pour ton aide! sujet résolu

Popovitch Popovitch
MP
Niveau 10
25 avril 2015 à 15:06:25

Transforme ça...

WHERE Grade = (SELECT Grade from dbo.Items WHERE ItemName like '$ItemName')"

... en ça...

WHERE Grade IN (SELECT Grade from dbo.Items WHERE ItemName like '$ItemName')"

... et ton problème sera corrigé

:ok:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : Thymotep
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment