Besoin de comprendre un code

Eléphant du PHP | 65 Messages

08 janv. 2007, 13:07

Bonjour à tous! Me revoilà encore, lol! Cette fois-ci avec un code que j'ai recopié d'un bouquin PHP, ils n'expliquent rien! Je vais vous copier coller le code et le commenter tel que je le comprend, mais y'a certain truc que je pige pas, si vous pouviez m'eclairer :
<html>
<head>
<title>Envoi de requetes sql</title>
</head>
<body>
<?php

$host="localhost";
$user="root";
$password="";

if(@$_GET['form'] == "yes"){  /* C'est quoi l'@ avant $_GET? et pourquoi ne pas utiliser $_POST? */
	mysql_connect($host, $user, $password); //connection sql
	mysql_select_db($_POST['database']); // on selectionne la base 
//en fonction de ce qui a été tapé dans le formulaire plus bas
	$query = stripslashes($_POST['query']); //suprimme les antislashes
	$result = mysql_query($query);
	echo 	"Base de données selectionnée : <b>{$_POST['database']}</b><br>
		Requête : <b>$query</b><h3>Resultats</h3><hr>";
	if($result == 0) //si y'a aucune table
		echo "<b>erreur ".mysql_errno().": ".mysql_error()."</b>";
	elseif (@mysql_num_rows($result) == 0){//a partir de la je comprend plus rien
		echo ("<b> requete executee. Aucun resultat envoyé.</b><br>");
		}
	else{
		echo    "<table border='1'>
			<thread>
			<tr>";
		for($i = 0;$i < mysql_num_fields($result);$i++){
			echo "<th>".mysql_field_name($result,$i)."</th>";
			}
		echo 	"</tr>
			</thread>
			<tbody>";
		for ($i = 0;$i < mysql_num_rows($result);$i++){
			echo "<tr>";
			$row = mysql_fetch_row($result);
			for ($j = 0;$j < mysql_num_fields($result);$j++){
				echo ("<td>".$row[$j]."</td>");
				}
			echo "</tr>";
		}
		echo 	"</tbody>
			</table>";
			
	}
	echo 	"<hr><br>
		<form action=\"{$_SERVER['PHP_SELF']}\" method=\"POST\">
		<input type='hidden' name='query' value='$query'>
		<input type='hidden' name='database' value={$_POST['database']}>
		<input type='submit' name=\"queryButton\" value=\"nouvelle requete\">
		<input type='submit' name=\"queryButton\" value=\"editer la requete\">
		</form>";
	unset($form);
	exit();
}
$query = " ";

?>

//le formulaire
<form action="<?php echo $_SERVER['PHP_SELF'] ?>?form=yes" method="POST"> 
// qu'est ce que $_SERVER['PHP_SELF'] ?
<table>
<tr>
<td align="right"><b>Indiquez le nom<br>de la base de donnée</b></td>
<td><input type="text" name="database" value="<?php echo @$_POST['database'] ?>"></td> 
// pourquoi un @ devant $_POST?
</tr>
<tr>
<td align="right" valign="top"><b>saisissez la requete sql</b></td>
<td><textarea name="query" cols="60" rows="10"><?php echo $query ?></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="envoyer la requete"></td>
</tr>
</table>
</form>
</body>
</html>

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

08 janv. 2007, 13:20

/* C'est quoi l'@ avant $_GET? et pourquoi ne pas utiliser $_POST? */
L'arobase permet de ne pas faire afficher de message d'alerte en cas d'erreur de la commande... Personnellement je suis contre : mieux vaut prendre soin de gérer une erreur que de la cacher, et le jour où il y a un problème, impossible de savoir lequel de ces @ nous empêche de savoir ce qui plante :) (et ça coute pas beaucoup plus cher de faire un isSet())

Quant à l'utilisation de $_GET au lieu de $_POST, c'est tout simplement parce que la donnée est envoyée via l'url (donc en get) et non en post :
<form action="<?php echo $_SERVER['PHP_SELF'] ?>?form=yes" method="POST"> 
"form" est passé dans l'url, et non en champ hidden, donc pas envoyé en post mais en get et récupérée dans $_GET.

elseif (@mysql_num_rows($result) == 0){//a partir de la je comprend plus rien 
        echo ("<b> requete executee. Aucun resultat envoyé.</b><br>"); 
else ...
On compte simplement le nombre de résultat, s'il n'y en a pas, on le dit. Et dans le else, on fait le traitement prévu (Pour plus d'info, y a qu'à cliquer les liens, ça t'emmennes directement sur les docs associées aux fonctions)

<form action="<?php echo $_SERVER['PHP_SELF'] ?>?form=yes" method="POST">  
// qu'est ce que $_SERVER['PHP_SELF'] ? 
$_SERVER est une variable super globale, comme $_POST ou $_GET, à ceci près qu'elle contient des informations relatives au serveur. La valeur contenu à l'index "PHP_SELF" permet nottament de connaitre le nom de la page en cours, et donc de ne pas avoir à modifier le script si jamais la page change de nom.
Voir la doc et phpinfo() pour plus de détail :)


Nota : ce n'est pas <thread> mais <thead> comme Table HEAD :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 601 Messages

08 janv. 2007, 13:27

le @ permet de ne pas afficher une erreur en cas de problème et la place on met sont message à la place. Pour développer il faut l'enlever et le mettre quand tu as finis !
Autrement si tu débute essaie de diviser ta page en plusieurs, sa te permettra d'y voir plus clair. Evite le
echo SERVER['PHP_SELF'];
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Eléphant du PHP | 65 Messages

08 janv. 2007, 13:33

Merci pour ta réponse, j'ai compris, donc $_SERVER['PHP_SELF'] m'évite de taper ywz.php pour le cas ou je modifie le nom de la page c'est pratique.

par contre y'a un truc que je comprend pas ici :

Code : Tout sélectionner

for($i = 0;$i < mysql_num_fields($result);$i++){ echo "<th>".mysql_field_name($result,$i)."</th>"; }
d'ou sort la variable $i ? et $j ? Je capte pas la fonction de ces lignes

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

08 janv. 2007, 14:04

Hum.... c'est pas méchant mais, peut être faudrait-il commencer par apprendre les bases du php avant de te lancer dans de tels script :-k
La boucle for() est quand même un élément assez basique de la programmation...

Fais donc un petit tour sur ce site : http://www.siteduzero.com/tuto-3-4-0-un ... c-php.html, ça ne peut pas faire de mal :)

Et pour la boucle for() :
http://www.siteduzero.com/tuto-3-118-1- ... #ss_part_2
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 65 Messages

08 janv. 2007, 14:53

Salut Ryle,

Ce code est dans le bouquin php pour les nuls, dans le début du livre!!!! Et c'est super mal expliqué! cela dis je vais aller visiter tes liens, merci bien!!

Eléphant du PHP | 445 Messages

08 janv. 2007, 16:48

Ce bouquin n'est pas à conseiller.

Pour ma part, et de loin, le meilleur est PHP 5 Avancé, aux éditions Eyrolles.

http://www.phpfrance.com/forums/voir_su ... rolles.php

Si tu te le procures, je peux t'assurer que tu ne le regretteras pas ;)
LLDC
Ulti

Mammouth du PHP | 601 Messages

08 janv. 2007, 17:35

php 5 anvancé c'est bien(on l'a tous en bibliothèque) mais il faut à mon sens se blinder en livre, il ne faut pas négliger cet investissement, notamment au débutant qui veux taper dans le clavier.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"