[RESOLU] Problème script tuto

Timoron
Invité n'ayant pas de compte PHPfrance

29 août 2014, 16:56

Salut.

J'ai un problème pour faire marcher un script PHP d'un tutoriel Gamemaker (celui-ci http://gmc.yoyogames.com/index.php?showtopic=535885). Le script ci-dessous est censé m'envoyer un 1 si la rangée existe dans la table, et un 0 si elle n'existe pas. Je reçois bien les 1 si elle existe, mais si elle n'existe pas rien ne se passe. Si je teste la chose dans une page web, la page reste blanche. Il s'agit d'un tutoriel assez ancien, donc c'est possible que la syntaxe ne soit plus d'actualité, et vu que je suis débutant aucune idée de ce que je dois modifier :
function info_salles($con, $mysql_table, $idsalle)
{
$result = mysql_query("SELECT * FROM $mysql_table WHERE idsalle = '$idsalle'");
while($row = mysql_fetch_array($result))
if ($row <= 0)
{
echo "0";
}
else
{
echo "1";
}
}
Un grand merci d'avance. :wink:

Mammouth du PHP | 2278 Messages

29 août 2014, 18:01

function info_salles($con, $mysql_table, $idsalle)
{
$result = mysql_query("SELECT * FROM $mysql_table WHERE idsalle = '$idsalle'");

while($row = mysql_fetch_array($result))
print "<br>valeur de row";
var_dump($row);

if ($row <= 0)
{

echo "0";
}
else
{
echo "1";
}
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Timoron
Invité n'ayant pas de compte PHPfrance

29 août 2014, 19:52

Merci je vais essayer ça. :) Si je comprends bien je dois juste ajouter la ligne : print "<br>valeur de row";

Invité
Invité n'ayant pas de compte PHPfrance

29 août 2014, 19:55

Ah et aussi : var_dump($row); Nikel.

Eléphant du PHP | 113 Messages

29 août 2014, 22:51

Merci je vais essayer ça. :) Si je comprends bien je dois juste ajouter la ligne : print "<br>valeur de row";
Ah et aussi : var_dump($row); Nikel.
C'est juste pour t'aider à déboguer, sa résout pas ton problème

$row = mysql_fetch_array($result) va te retourner le résultat de chaque ligne sous la forme d'un tableau. A chaque tour de la boucle while c'est une nouvelle ligne jusqu'à ce qu'elle soit null. Donc tu dois explorer ses champs. $row[0], $row[1]...

cette fonction te retournera le nombre de lignes retournés par ta requête: http://php.net//manual/fr/function.mysql-num-rows.php

Sinon si tu veux juste sa voir si ta salle existe, et ne pas récupéré les champs de ta table tu peux changer ta requête:

SELECT count(*) FROM .... => count(*) va te retourné le nombre de ligne au total (avec ta condition)

Timoron
Invité n'ayant pas de compte PHPfrance

30 août 2014, 00:10

Salut. Merci beaucoup pour ces conseils, ça me sera certainement utile. :wink:

Oui je me disais bien aussi, en chipotant et en testant j'ai fini par trouver un code qui fonctionne, celui-ci que j'ai trouvé sur le net :
function info_salles($con, $mysql_table, $idsalle)
{
// global $con;
$idsalle = mysql_real_escape_string($idsalle);
$sql = "SELECT 1 FROM $mysql_table WHERE idsalle='$idsalle'";
$result = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
if (mysql_fetch_row($result)) {
echo 'Assigned';
}
else{
echo 'Available';
}
}
Ce qui est bizarre c'est que j'ai essayé plein de codes qui sont censés faire la même chose, mais il n'y a que celui-ci qui fonctionnait. Et encore, j'ai dû changer return en echo et un ou deux autres trucs. Est-ce que c'est possible que des fonctions aient carrément changé d'utilisation dans les versions suivantes? Je pensais que certaines avaient juste été enlevées. 8-|

Mammouth du PHP | 2278 Messages

30 août 2014, 09:09

Une fonction est conçue en général pour retourner un résultat qui est exploité par la partie de code qui l'appelle:
function produit ($x, $y)
{
return $x* $y;
}

$z= produit(2,3
);
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 août 2014, 09:28

Salut,

Les fonction n'ont pas changées par contre les différents codes indiqués ici abuse fortement du transtypage et ce n'est pas une bonne pratique et ce n'est pas simple a comprendre pour un débutant.

Par exemple mysql_fetch_row retourne un tableau ou false.

Sachant que if attend un booléen (vrai / faux) passer un tableau n'a pas de sens.
Le test correct serait, au minimum,
<?php
$row = mysql_fetch_row($result);
if($row != false){
echo 'ok';
}else{
echo 'ko';
}
Pour ce qui est de return il permet d'avoir une valeur retournée par la fonction.
Si tu souhaites un affichage pas besoin de return.

A savoir :
- utiliser la fonction mysql_free_result est important pour 'libérer' le jeux de result (libération des ressources et de la mémoire associée)
- l'extension mysql est dépréciée est vouée à disparaître. Utilise l'extension mysqlia la place. La syntaxe est similaire et t'offrira d'autre possibilité (comme les requêtes préparées).

@+
Il en faut peu pour être heureux ......

Timoron
Invité n'ayant pas de compte PHPfrance

30 août 2014, 09:39

Oki, je commence à comprendre l'idée. :D En tout cas le code fonctionne maintenant. Merci pour votre aide. :wink:

Timoron
Invité n'ayant pas de compte PHPfrance

30 août 2014, 09:41

(Je me souviendrai de passer au mysqli si jamais le truc marche subitement plus. :D )