Petite question d'un ultra debutant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Petite question d'un ultra debutant

par AB » 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

par sadeq » 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>

par lectonet » 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

par charabia » 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:

par lectonet » 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

par sadeq » 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.

par charabia » 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)...

par thehawk » 25 mai 2009, 21:55

$host="localhost": //Incorrect
$host="localhost";//Correct 
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?
Bye Hawk

par lectonet » 25 mai 2009, 21:50

Il est marqué que tu as une erreur ligne 13. Je trouve sur cette ligne :
$host="":
Tu ne vois pas mieux ?
Bonsoir , j'ai mis
$host="localhost":
ou j'ai laissé vide mais toujours le meme probleme

par charabia » 25 mai 2009, 21:47

Il est marqué que tu as une erreur ligne 13. Je trouve sur cette ligne :
$host="":
Tu ne vois pas mieux ?

par lectonet » 25 mai 2009, 02:40

Ok sa avance doucement

me voici encore avec un soucis

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>
et lorsque je lance en local host voici le message qu'i m'indique


Parse error: parse error in C:\wamp\www\mysql_envoi.php on line 13


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?

Merci

par Berzemus » 24 mai 2009, 16:15

(Ceci étant pour l'avoir vu tourner en prod sur un serveur pendant 3 ans)
Une bonne idée de torture ça.. ligoter un quidam sur une chaise, et lui mettre un serveur web sous easyphp devant les yeux, bien en évidence, et attendre qu'il craque..

Quoique, IIS 5 ou 4 étaient sympa aussi, les processus tournaient avec des droits systèmes (équivalent root, en plus puissant encore).

par Ryle » 24 mai 2009, 09:48

Personnellement, j'ai une préférence pour easyphp qui est vraiment le plus simple pour commencer, wamp proposant déjà des fonctions un peu plus avancées avec lesquelles on a pas forcément envie de se prendre la tête quand on veut juste faire un "hello world" :)

Le mode production, c'est tout simplement l'usage du serveur en production (par opposition au développement) dans lequel ton site est accessible aux utilisateurs. Le paramétrage par défaut d'easyphp est le plus basique possible et ne prend pas (ou très peu) en compte la charge sur le serveur ou la sécurité de celui-ci (encore qu'il s'améliore doucement avec les évolutions de php).

C'est pourquoi il est fortement déconseillé de l'utiliser tel quel sur un serveur de production où n'importe qui peut accéder :) (Ceci étant pour l'avoir vu tourner en prod sur un serveur pendant 3 ans, ça fonctionne très bien. C'est juste.... pas rassurant ;))

par lectonet » 23 mai 2009, 22:39

des deux, wamp est (je pense) le mieux. :wink:

Bonne suite, reviens-nous vite :pouce:
Merci du conseille mais en faite j'ai acheté le boukin php pour les.... vous voyez du quel je parle ;-) et donc comme il parle de easy php je vais me tourner vers celui ci afin de continué mon apprentissage PHP .

Une petite question qu'est ce que le mode production?

Est ce que easy php permet de faire son propre hebergeur sur un pc?

Merci

par Berzemus » 23 mai 2009, 22:32

des deux, wamp est (je pense) le mieux. :wink:

Bonne suite, reviens-nous vite :pouce: