Petite question d'un ultra debutant

Avatar du membre
ViPHP
ViPHP | 3008 Messages

25 mai 2009, 21:58

Regarde avec soin ton code. Si tu ne fais que "balayer" tu rencontreras d'autres difficultés on ne peut plus difficile. En plus tu avais toi-même donné la solution (Cf citation de thehawk)...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 mai 2009, 22:15

Bonsoir lectonet,

Je trouve ta démarche un peu trop galopeuse. Le 23 tu installe easyphp et tu commence la pratique et un jour après tu t'attaque directement à un exemple où l'on peut voir des $_POST et du MySQL, alors qu'il faudrait d'abord travailler sérieusement les bases de la programmation PHP et passer en revue :
  • - les différentes méthodes d'aménagement du code PHP et HTML et la génération dynamique du contenu HTML par PHP
    - l'organisation du code PHP et de ses structures (if, boucles ...)
    - les méthodes d'usage des variables, des constantes, des tableaux indexés et associatifs à une ou plusieurs dimensions
    - les techniques de dialogue avec un formulaire et passage de paramètres GET et POST
    - les techniques de déboguage d'un programme PHP pour retrouver une erreur et de la corriger
    - les techniques de téléchargement et d'upload de fichiers
    - la gestion des fichiers texte ou de données textes (csv) et xml
    - la gestion des sessions
- Et C'EST EN DERNIER LIEU QUE TU PEUX attaquer les bases de données et SQL en tant que 3° partie de l'applicatif

Autrement dit, L'exemple, sur lequel tu bloque contient non seulement des instructions très évoluées mais aussi il traite de plusieurs techniques et technologies différentes. Je vais t'énumérer ses différents techniques de cet exemple en espérant que tu te positionne raisonnablement par rapport à ça:

To exemple contient :
  • Du code HTML comme : <html><head><title><body><h4><table><tr><td><th><form><input><hr> ... Bref, sais-tu à quoi sert toutes ses balises? si oui ok, sinon, il faudra faire d'abord HTML sans PHP.

    Du code PHP comme : // et /* echo if for foreach @ $ empty() stripslashes() ini_get() str_replace() ...
    Sais-tu à quoi et quand utiliser ses instructions, si oui ok sinon fait d'abord des exercices en PHP pour chaque instruction ou fonction pour en comprendre la finalité ou l'effet.

    Des variables PHP comme : $host, ... et des paramètres HTTP comme $_POST, sais-tu ce que c'est? si oui ok, sinon va travailler des exercices simples de la communication entre un formulaire et un script PHP basique en testant le POST et le GET.

    Du code Mysql comme : mysqli_connect(), ... Connais-tu ce qu'est MYSQL ou l'extension mysqli, ce qu'est un serveur SQL, une ouverture de connexion et ce qu'est une exécution de requête et surtout c'est quoi une base de données et ce qu'est le langage SQL. Si oui, ok, sinon tu dois faire d'abord du SQL sans PHP en utilisant PHPMyAdmin sur easyPHP.
Modifié en dernier par sadeq le 26 mai 2009, 00:38, modifié 4 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 13 Messages

25 mai 2009, 22:19

Regarde avec soin ton code. Si tu ne fais que "balayer" tu rencontreras d'autres difficultés on ne peut plus difficile. En plus tu avais toi-même donné la solution (Cf citation de thehawk)...
Non je n'avais pas donner la solution car en faite le probleme venait que j'avais mis : au lieu de ; et je ne l'avais pas vu

Il est pas bon de faire de la programmation a 4h du matin il y a les yeux qui se croise

merci pour votre aide
Merci à vous pour votre aide

Lectonet

Avatar du membre
ViPHP
ViPHP | 3008 Messages

25 mai 2009, 22:27

Je recite ce que tu as mis
Je ne sais vraiment pas d'ou cela pourrais venir apparament ce message arrive lorsque l'on a oublié un point virgule quelque par mais la je seche , quelqu'un pourrait m'aider?
Ce n'était pas la solution ? "oublié un point virgule".

Il n'est pas encore 4h du mat, tu aurais dû tilter tout à l'heure avec les : :lol:

Eléphanteau du PHP | 13 Messages

25 mai 2009, 22:38

Apres avoir finit le code ci dessous, lancement du php OK lorsque j'envoie un erequete à MYSQL , j'ai un message d'erreur qui apparait qui est le suivant :

FORBIDDEN

You don't have permission to acces /<br/><b>Notice</b>: Undefined index : PHP-SELF in <b>C:/wamp/www/mysql_envoi.php</b>on line<b>81</b><br/> on this server???

Je tenais a vous remerciez pour votre aide car grace a vous mon apprentissage du php et mysql sans trouve vraiment amelioré.


Ok sa avance doucement

Code : Tout sélectionner

<?php /*Programme : mysql_envoi.php *Description : Envoi d'une requete SQL au serveur SQL * et affichage des résulats. */ echo "<html> <head><title>Envoi de requetes SQL(Edition 2007)</title></head> <body>"; if(ini_get("magic_quotes_gpc") == "1") { $_POST['query'] = stripslashes($_POST['query']); } $host="": $user=""; $password=""; /* Section d'execution de la requete et affichage des résultats */ if(!empty($_POST['form'])) { $cxn = mysqli_connect($host,$user,$password, $_POST['database']); $result = mysqli_query($cxn,$_POST['query']); echo "Base de données sélectionnée : <b>{$_POST['database']}</b><br> Requete : <b>{$_POST['query']}<b> <h3>Résultats</h3><hr>"; if($result == false) { echo "<h4> Erreur SQL : ".mysqli_error($cxn)."</h4>"; } elseif(@mysqli_num_rows($result) ==0) { echo "<h4>Requete executee. aucun resultat envoye.</h4>"; } else { /*affiche les resultats */ echo"<table border='1'><thead><tr>"; $finfo = mysqli_fetch_fields($result); foreach($finfo as $field) { echo "<th>".$field->name."</th>"; } echo "</tr></thead> <tbody>"; for ($i=0;î < mysqli_num_rows($result);$i++) { echo"<tr>"; $row = mysqli_fetch_row($result); foreach($rpw as $value) { echo "<td>".$value."</td>"; } echo "</tr>"; } echo "</tbody></table>"; } /* affiche le formulaire avec des boutons apres les resultats */ $query = str_replace("'","%&%",$_POST['query']); echo "<hr><br> <form action='{$_SERVER['PHP_SELF']}'method='POST'> <input type='hidden' name='query' value='$query'> <input type='hiden' name='database' value={$-POST['database']}> <input type='submit' name='queryButton' value='Nouvelle requete'> <input type='submit' name='queryButton' value='Modifier la requete> </form>"; exit(); } /* affiche le formulaire de saise de requete */ if (@$_POST['queryButton'] != "Modifier la requete") { $query =" "; } else { $query = str_replace("%&%","'",$_POST['query']); } ?> <form action="<?php echo $_SERVER['PHP-SELF'] ?>" method="POST"> <table> <tr><td style='text-align: right; font-weight: bold'> Saisir le nom de la basse de données</td> <td><input type="text" name"database" value=<?php echo @$_POST['database'] ?> ></td> </tr> <tr><td style='text-align: right; font-weight: bold' valign="top">saisir la requete SQL</td> <td><textarea name="query" cols="60" rows="10"><?php echo $query ?></textarea></td> </tr> <tr><td colspan="2" style='text-align: center'> <input type="submit" value="valider la requete></td> </tr> </table> <input type="hidden" name="form" value="yes"> </form> </body></html>
Merci
Merci à vous pour votre aide

Lectonet

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

26 mai 2009, 00:47

Bon, je te propose une réécriture du code de ton exemple en un peu plus clair:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>Envoi de requetes SQL(Edition 2007)</title>
</head>
<body>
<form action="" method="POST">
<table>
<tr>
<th style="text-align: right">Saisir le nom de la basse de données</td>
<td><input type="text" name="database" value="<?php echo (isset($_POST['database'])?$_POST['database']:''); ?>" /></td>
</tr>
<tr>
<th valign="top" style="text-align: right">Saisir la requête SQL</td>
<td><textarea name="query" cols="60" rows="10"><?php echo (isset($_POST['query'])?$_POST['query']:'SELECT * FROM matable'); ?></textarea></td>
</tr>
<tr><td></td><td><input type="submit" name="valider" value="valider la requête" /></td>
</tr>
</table>
</form>
<?php
/*
 * Programme : mysql_envoi.php
 * Description : Envoi d'une requete SQL au serveur SQL
 *                      et affichage des résulats.
 */

// variables du programme
$host = "localhost";
$user = "root";
$password = "";

// Exécuter la requete et afficher le résultat si les données du formulaire sont envoyées
if (empty($_POST['valider']) || empty($_POST['database']) || empty($_POST['query'])) die ('<p><i>Veuillez saisir un nom de base de données et une requête comme : SELECT * FROM matable</i></p>');

// Traitement
echo 'Base de données sélectionnée : <b>', $_POST['database'], '</b><br />Requete : <b>', $_POST['query'], '</b><h3>Résultats</h3><hr />';
	
// ouvrir la connexion au serveur
$con = @mysqli_connect($host, $user, $password, $_POST['database']) or die ('<h4>Erreur de connexion à la base de données</h4>');

// exécuter SQL
$result =  @mysqli_query($con,  stripslashes($_POST['query'])) or die ('<h4>Erreur SQL: ' . @mysqli_error($con) . '</h4>');

// si le resultat est vide
if (@mysqli_num_rows($result) <= 0) die('<h4>Requête exécutée.	Aucun résultat envoyé.</h4>');

// si aucune erreur n'est rencontrée, alors ok pour l'affichage

// L'entête de la grille html contient les noms des champs de la table interrogée
echo '<table border="1"><thead><tr>';
$fields = @mysqli_fetch_fields($result);
foreach ($fields as $field)
{
	echo '<th>', $field->name, '</th>';
}
echo '</tr></thead><tbody>';
		
// Le détail de la grille html contient les enregistrements retournés par la requête
while ($row = @mysqli_fetch_row($result)) // $row : l'enregistrement lu, contient un tableau de champs
{
	echo '<tr>';
	foreach($row as $field_value) // parcourt et affichage des champs du $row
	{
		echo '<td>', $field_value, '</td>';
	}
	echo '</tr>';
}
echo '</tbody></table>';

// fermer la connexion
@mysqli_close($con);
?>
</body>
</html>
Modifié en dernier par sadeq le 26 mai 2009, 10:16, modifié 2 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
AB
ViPHP | 5818 Messages

26 mai 2009, 00:49

De nombreuses fautes d'inattention... du même niveau que précédemment...

Du code généré à la va vite sans essayer d'indenter pour rendre les choses plus lisibles.

Du code html sans cesse géré par php alors que tu pourrais gagner en clarté en séparant les deux.

Bref tu as un gros moteur, mais manque pas mal de méthode et tu n'as pas fini de buter sur des choses simples à cause de cela.

Sadeq t'a fait un énoncé clair et structuré pour acquérir les bonnes bases. Sans être nécessairement aussi rigoureux que lui, il faut quand même l'être un minimum car on ne va pas passer du temps en continu pour corriger tes erreurs parce qu'à la place d'écrire PHP_SELF tu tapes PHP-SELF et qu'en plus PHP te montre l'erreur du doigt ! Si tu ne veux pas tout prendre des conseils de son post à la lettre ce n'est pas pour autant qu'il faut le négliger.

Dis toi bien aussi qu'en générant du code aussi bordélique dans son organisation et sa présentation tu seras vite limité quand les choses vont se compliquer et qu'en plus tu risque fort de ne trouver personne pour t'aider parce qu'on a pas envie de passer 10 minutes à comprendre un code qui pourrait l'être en 2 s'il était simplement mieux présenté.

Et voilà j'ai passé 15 minutes pour te redire ce que les autres t'ont déjà dit. Si on le fait c'est parce qu'il serait bien que tu prenne conscience qu'il ne faut pas confondre vitesse et précipitation, et que l'investissement que tu feras pour t'organiser et bien poser les choses te sera rendu au centuple. La prog ce n'est pas un sprint mais plutôt une course de fond qui demande préparation et stratégie.

Enfin, étant donné que tu n'as pas trop l'air de prendre en compte ce que l'on te dit, je te suggère de potasser en premier lieu la phase débuggage (c'est toujours utile) :wink:

EDIT : Je viens de voir le dernier message de sadeq... si après ça tu n'a pas progressé, garre à toi :axe:
Un autre exemple de code complet structuré différemment que tu pourras comprendre sans problème http://www.phpfrance.com/forums/voir_sujet-242539.php