[Mon premier script][Aide]

Necromoine
Invité n'ayant pas de compte PHPfrance

25 oct. 2010, 21:30

Bonjour, voila quelque temps que je me suis lancé dans le (x)HTML et le CSS.
Pensant bien maitriser ces deux langages, je me suis lancé dans le PHP.
J'ai trouvé de nombreux tutoriaux sur internet, mais tous parlaient de la methode PDO, que ne m'autorise pas mon hebergeur (gratuit...) j'ai donc essayé de "traduire" ces tutoriaux en Mysqli, mais je recontre actuellement quelques difficultées.
Je doit dire que le code de base est tiré du site du zéro, et la base de donné test que j'utilise aussi.
<?php 
$serveur = "segsg";   // serveur
$user= "26sgn";         // identifiant
$password = "esges3";         // mot de passe
$bdd = "tseg";      // Base de donnée
function my_error($errno, $error)
{
	$message = "Erreur MySQL $errno<br />$error";
	trigger_error($message, E_USER_ERROR);
}
$sql = new mysqli($serveur, $user, $password, $bdd) or my_error(mysqli_connect_errno(),mysqli_connect_error());
$result= $sql->query('SELECT nom, prix FROM jeux_video') or my_error($sql->errno, $sql->error);
while(($row = $result->fetch_assoc()) !== Null)
{


}
$result->free();

$stmt = $sql->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ?');
$stmt->bind_param('si', $possesseur, $prix_max);
$possesseur = $_GET['possesseur'];
$prix_max = $_GET['prix_max'];
$stmt->execute() or my_error($stmt->errno,$stmt->error);
//$result = $stmt->result_metadata();
$stmt->bind_result($nom, $prix);
echo '<ul>';
while($stmt->fetch())
{
echo '<li>' . $nom . ' (' . $prix . ' EUR)</li>';
}
echo '</ul>';

$stmt->free_result();
$sql->close();
?>
Mais cette page ne m'affiche rien.
De plus je ne comprend pas la 1ere boucle WHILE.
Pourriez vous m'aider ?

Merci beaucoup.
Necromoine

Eléphant du PHP | 256 Messages

25 oct. 2010, 22:41

Bonjour,

Je ne peux t'aider, parce que je ne connais que Pdo, d'un naturel paresseux.

Mais si tu veux juste apprendre, pourquoi ne pas installer Wamp en local ? Ainsi ne seras-tu pas limité par un hébergeur qui propose des fonctionnalités limitées. :mrgreen:

Cordialement,

Gaspard

Mammouth du PHP | 19672 Messages

26 oct. 2010, 10:03

Mais si tu veux juste apprendre, pourquoi ne pas installer Wamp en local ? Ainsi ne seras-tu pas limité par un hébergeur qui propose des fonctionnalités limitées.
:shock: Ce n'est pas très futé comme suggestion : que fera-t-il une fois son site prêt en local lorsqu'il sera temps de le mettre en ligne ? S'il développe en local en utilisant PDO, ça ne fonctionnera pas une fois sur le serveur de son hébergeur...
Mais cette page ne m'affiche rien.
De plus je ne comprend pas la 1ere boucle WHILE.
Pourriez vous m'aider ?
La première boucle est vide d'instructions, elle ne sert donc strictement à rien. Sur quelle base es-tu donc parti ? Un tuto ? Il existe des tutos en ligne sur l'utilisation de MySQL, avec ou sans PDO, lesquels as-tu essayé de suivre ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

26 oct. 2010, 10:27

et pour gérer tes erreurs avec mysqli : sql-bases-donnees/gestion-des-erreurs-m ... 55306.html :wink:

necromoine
Invité n'ayant pas de compte PHPfrance

26 oct. 2010, 12:37

Le code était "totalement " faux, je n'ai pas suivi un tuto et j'ai pris des infos un peu partout...
Pour ceux que sa interesse, le "bon" code est :
<?php 
$serveur = "segsgse";   // serveur
$user= "egsgegseg";         // identifiant
$password = "2esegs";         // mot de passe
$bdd = "qfqzfqzzf";      // Base de donnée
function my_error($errno, $error)
{
	$message = "Erreur MySQL $errno<br />$error";
	trigger_error($message, E_USER_ERROR);
}
$sql = new mysqli($serveur, $user, $password, $bdd) or my_error(mysqli_connect_errno(),mysqli_connect_error());
$result= $sql->query('SELECT nom, prix FROM jeux_video') or my_error($sql->errno, $sql->error);
while(($row = $result->fetch_assoc()) !== Null)
{

}
$result->free();

$stmt = $sql->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ?');
$stmt->bind_param('si', $possesseur, $prix_max);
$possesseur = $_GET['possesseur'];
$prix_max = $_GET['prix_max'];
$stmt->execute() or my_error($stmt->errno,$stmt->error);
$stmt->bind_result($nom, $prix);
echo '<ul>';
while($stmt->fetch())
{
echo '<li>' . $nom . ' (' . $prix . ' EUR)</li>';
}
echo '</ul>';

$stmt->free_result();
$sql->close();
?>
Merci a vous tout de meme (nottament le line vers la gestion d'erreur)

ViPHP
ViPHP | 5462 Messages

26 oct. 2010, 13:44

Merci a vous tout de meme (nottament le line vers la gestion d'erreur)
pourtant t'as pas du tout fait la gestion comme dans le lien...

necromoine
Invité n'ayant pas de compte PHPfrance

26 oct. 2010, 14:29

Je n'ai pas eu le temps car j'ai essayer de refaire le code que j'ai poster mais en utilisant un formulaire et une methode POST, mais le probleme est qu'il m'affiche les resultats en ... triple.

ViPHP
ViPHP | 5462 Messages

26 oct. 2010, 14:35

y'a toujours ta boucle qui sert a rien, épure ton code :wink:

Necromoine
Invité n'ayant pas de compte PHPfrance

26 oct. 2010, 14:42

function my_error($errno, $error)
{
	$message = "Erreur MySQL $errno<br />$error";
	trigger_error($message, E_USER_ERROR);
}
$sql = new mysqli($serveur, $user, $password, $bdd) or my_error(mysqli_connect_errno(),mysqli_connect_error());

$stmt = $sql->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ?');

$stmt->bind_param('si', $utilisateur, $prix_max);
$utilisateur = $_GET['possesseur'];
$prix_max = $_GET['prix'];
$stmt->bind_result($nom, $prix);
$stmt->execute() or my_error($stmt->errno,$stmt->error);

echo '<ul>';
while($stmt->fetch())
{
echo '<li>' . $nom . ' (' . $prix . ' EUR)</li>';
}
echo '</ul>';

$stmt->free_result();
$sql->close();
?>

ViPHP
ViPHP | 5462 Messages

26 oct. 2010, 14:45

et quand tu fais ta requête sous phpmyadmin c'est OK ?

Necromoine
Invité n'ayant pas de compte PHPfrance

26 oct. 2010, 14:50

Oui, tout marche, le probleme du triple affichage venait de la BDD.
Reste un interrogation, comment verifié que le nom recupérer avec GET est bien dans la base de donnée ?

ViPHP
ViPHP | 5462 Messages

26 oct. 2010, 14:55

Oui, tout marche, le probleme du triple affichage venait de la BDD.
Reste un interrogation, comment verifié que le nom recupérer avec GET est bien dans la base de donnée ?
tu récupères pas de nom la ? (tu parles du processeur ?)

necromoine
Invité n'ayant pas de compte PHPfrance

26 oct. 2010, 15:01

Oui, je parle bien de possesseur.

ViPHP
ViPHP | 5462 Messages

26 oct. 2010, 15:12

Oui, je parle bien de possesseur.
normalement il est sélectionner partir d'une liste créer en rapport avec la base non ?

necromoine
Invité n'ayant pas de compte PHPfrance

26 oct. 2010, 15:23

Oui normalement, mais il est possible de modifier la requete, ce qui pourrait faire apparaitre une faille typer injection Mysql.
Comment faire pour que si le nom (possesseur) indiqué dans l'URL n'est pas dans la BDD un message d'erreur apparaise.