Boucle et mysql

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 : Boucle et mysql

Re: Boucle et mysql

par sirakawa » 11 mars 2012, 18:56

merci du merci.
Simplement en divisant les problèmes on a plus de chance de trouver l'erreur, c'est pourquoi:
pour mysql je fais toujours
$requete = "select * from $table where `champ` = $valeur ";
// et si ça ne marche pas comme je veux :
// print "<br>$requete";
//et éventuellement avant $requete =...,; print "==>$table<==>$valeur<=="; les ==><== ayant pour but de s'assurer que rien ne traîne autour (plutôt un héritage de Dbase avec ses champs compétés automatiquement pas des espaces...)
// requete que je passe en ligne de commande quand ça coince trop car plus commode à modifier.
$resultat = mysql_query ($requete);
et division systématique... en particulier:
$var_1 = isset($_POST['var_1']) ? $_POST['var_1']: -12312 ; //ou toute valeur impossible et facile à repérer par la suite
Ça fait un code plus long, en lignes, et un peu plus gourmand en mémoire, mais je ne suis pas sûr qu'il soit plus lent.

Re: Boucle et mysql

par davidb1967 » 11 mars 2012, 18:29

Merci pour toute l'aide, mais je viens de finir et j'obtiens le resultat voulu.

il reste plus qu'a faite le formatage du tout pour imprimer sur des etiquettes et un petit probleme d'images residuelle sur le serveur .

C'est vrai que ca aurai été plus claire comme tu me l'indique avec des definition de variable. Maintenant que je metrise ce que veux faire je vais surement faire le menage dans mon code.

Quand au francais c'est vraiment pas mon fort, ni l'anglais non plus.

En tous cas vrai un grand merci pour ton aide

Re: Boucle et mysql

par sirakawa » 11 mars 2012, 17:29

Ca progresse

le seul probleme qui me reste c'est que ca s'incremente pas dans le code QR comme ca le fait dans le code en toute lettre et chiffre.
<?php
$client = 000 ;
$row_code_client['date'] = date("dmy");
$url_prefixe = ($row_code_client['prefix'] . $row_code_client['photographe'] . $row_code_client['date'] . $row_code_client['carte'] . ($str_client = str_pad($client, 3, "0", STR_PAD_LEFT) . print "$str_client") . $row_code_client['magazin'] . $row_code_client['sufix']);



do
{

$filename="temp".session_id().".png";
QRcode::png($url_prefixe, $filename,'S',4,1);
echo '<img src="'.$filename.'" /><br>';

echo $row_code_client['photographe']; ?><?php echo $row_code_client['date']; ?><?php echo $row_code_client['carte']; ?><?php $str_client = str_pad($client, 3, "0", STR_PAD_LEFT);

print "$str_client"; ?><?php echo $row_code_client['magazin'] . '<br />';
$client++ ;
}
while($client<$row_code_client['nb_client']);
?>
Plusieurs remarques :
1) On se crirait à un concours de obfuscated code:
le début me semble plus clair ainsi:
<?php
$num_client = 000 ;
$row_code_client['date'] = date("dmy");
$row_code_client['prefix'] = "prefixe";
$row_code_client['photographe'] = "photographe";
$row_code_client['carte'] = "carte";
$row_code_client['magazin'] = "magasin";
$row_code_client['suffix'] = "suffixe";
$prefixe = $row_code_client['prefix'];
$photographe = $row_code_client['photographe'] ;
$la_date = $row_code_client['date'] ;
$carte = $row_code_client['carte'] ;
$magazin = $row_code_client['magazin']; 
$str_client = str_pad($num_client, 3, "0", STR_PAD_LEFT);
$suffixe =  $row_code_client['suffix'];
 $url_prefixe =  $prefixe.$photographe.$la_date.$carte.$str_client.$magazin.$suffixe;

print"<br> $url_prefixe";
?>
1a) magazin n'existe pas en français: magasin pour le lieu, magazine pour la revue
prefix se dit prefixe en français et sufix se dit en anglais suffix et suffixe en français
2) do
while; s'exécutera au moins une fois
2a) cette succession de <?php echo?> est-elle utile? Elle a, en tous les cas le mérite de compliquer les tests...

Re: Boucle et mysql

par davidb1967 » 11 mars 2012, 13:05

Ca progresse

le seul probleme qui me reste c'est que ca s'incremente pas dans le code QR comme ca le fait dans le code en toute lettre et chiffre.
<?php
$client = 000 ;
$row_code_client['date'] = date("dmy");
$url_prefixe = ($row_code_client['prefix'] . $row_code_client['photographe'] . $row_code_client['date'] . $row_code_client['carte'] . ($str_client = str_pad($client, 3, "0", STR_PAD_LEFT) . print "$str_client") . $row_code_client['magazin'] . $row_code_client['sufix']);



do
{

$filename="temp".session_id().".png";
QRcode::png($url_prefixe, $filename,'S',4,1);
echo '<img src="'.$filename.'" /><br>';

echo $row_code_client['photographe']; ?><?php echo $row_code_client['date']; ?><?php echo $row_code_client['carte']; ?><?php $str_client = str_pad($client, 3, "0", STR_PAD_LEFT);

print "$str_client"; ?><?php echo $row_code_client['magazin'] . '<br />';
$client++ ;
}
while($client<$row_code_client['nb_client']);
?>
je retombe donc sur le probleme rencomtré précedement

Re: Boucle et mysql

par davidb1967 » 11 mars 2012, 05:03

je commence a entrevoir un debut de solution
$url_prefixe = ($row_code_client['photographe'] . $row_code_client['date'] . $row_code_client['carte'] . $str_client = str_pad($client, 3, "0", STR_PAD_LEFT) . $row_code_client['magazin']);
Suis je sur la bonne voie???

Re: Boucle et mysql

par davidb1967 » 11 mars 2012, 03:06

Bonsoir,

le generateur de code fonctionne tres bien, mais le but ultime de tout ca était de le coupler avec un générateur de code QR. j'ai trouver des source pour genérer ce code QR et integrer a la page de resultat .

Voici le code
<?php
$client = 000 ;
$row_code_client['date'] = date("dmy");
$url_prefixe= 'www.xxxxxx.fr/galerie7.php?show_heading=detail&dir=' ;


do
{

$filename="temp".session_id().".png";
QRcode::png($url_prefixe, $url_code, $filename,'S',4,1);
echo '<img src="'.$filename.'" /><br>';

echo $row_code_client['photographe']; ?><?php echo $row_code_client['date']; ?><?php echo $row_code_client['carte']; ?><?php $str_client = str_pad($client, 3, "0", STR_PAD_LEFT);

print "$str_client"; ?><?php echo $row_code_client['magazin'] . '<br />';
$client++ ;
}
while($client<$row_code_client['nb_client']);
?>
</body>
</html>
<?php
mysql_free_result($code_client);
?>
Cela fonctionne dans la boucle, hors dans la variable $url_prefixe a la suite de "dir=" il va me faloir le code correspondant que j'ai generer soit une adresse complete de type:

http://www.xxxxxx.fr/galerie7.php?show_ ... 121000XXX1

Pour que l'adresse soit complete et renvoi bien a l'album photo voulu.*

Chaque teste que j'ai pu faire pour le moment et malgre mes recherche me renvoie une erreur de syntax

J'espére ne pas trop abuser en demandant encore de l'aide pour me mettre sur la voix de la solution

Merci

Re: Boucle et mysql

par davidb1967 » 10 mars 2012, 13:13

Yesss,

Merci, ca marche parfaitement cool...

Re: Boucle et mysql

par sirakawa » 10 mars 2012, 10:33

<body>
<?php
$client = 000 ;
/*réduit à ce qui posait problème*/
do
{
//je passe par une variable intermédiaire pour éviter les changements de types sur le même nom
$str_client = str_pad($client, 4, "0", STR_PAD_LEFT); // tête de linotte!!!
print "<br>$str_client";
$client++ ;
}
while($client<11);
?>
</body>

Re: Boucle et mysql

par davidb1967 » 10 mars 2012, 02:11

Bonsoir,

Bon, j'ai fait le choix de travailler sur la page de resultat plutot que sur les entrer en BDD. (je verais plus tard comment le gerer au quotidien)

donc je recupére les infos dans la BDD et j'ai fait une boucle en fonction du nombre de client voulu et voici ce que j'obtiens

DAV110031210TES1
DAV110031211TES1
DAV110031212TES1
DAV110031213TES1
DAV110031214TES1
DAV110031215TES1

Pour 6 client demander

hors j'aurai voulue obtenir

DAV11003121000TES1
DAV11003121001TES1
DAV11003121002TES1
DAV11003121003TES1
DAV11003121004TES1
DAV11003121005TES1

Voici mon code:

Code : Tout sélectionner

<body> <?php $client = 000 ; $row_code_client['date'] = date("dmy"); do { echo $row_code_client['photographe']; ?><?php echo $row_code_client['date']; ?><?php echo $row_code_client['carte']; ?><?php echo $client; ?><?php echo $row_code_client['magazin'] . '<br />'; $client++ ; } while($client<$row_code_client['nb_client']); ?> </body>
je suis pas tres loin de la verité mais je bloque sur cette histoir de "000"

Merci pour votre aide

Re: Boucle et mysql

par sirakawa » 09 mars 2012, 11:12

Conseil pour démarrer:
créer la BDD avec les deux champs numero integer auto_increment et numero_texte varchar(6), sachant que tu n'as pas à te soucier de l'auto_increment et qu'on connait une méthode pour créer numero_texte à partir de numéro, soit immédiatement, soit après la création des comptes.

Re: Boucle et mysql

par davidb1967 » 09 mars 2012, 00:34

Je pense aussi que je vais devoir partir sur une feuille blanche.

plus simple

c'est un usage interne et personnel.

Je vais revoir ma copie

en toute cas je te remercie de tes interventions

cordialement

Re: Boucle et mysql

par sirakawa » 08 mars 2012, 20:55

Eh bien, si chez MM, ils faisaient, il y a dix ans, du code moins cochon que celui de Frontpage, je constate qu'ils ont plutôt régressé: entre les balises non reconnues depuis HTML 5 au moins, jusqu'aux fonctions bavardes destinées semble-t-il à couvrir toutes les versions de PHP...

Est-ce une application destinée à être diffusée à d'autres ou est-elle à usage perso, au moins ce module?

Si je m'écoutais, je dirais de tout reprendre à zéro sans s'occuper de Dreamweaver, et d'obtenir un code qui fonctionne avec simplicité:
Une page d'identification de celui qui va opérer, à moins que ce soit fait précédemment. (html, Mysql/php)
Une page demandant le nombre de clients à créer (html)
Une page faisant le travail (PHP, My, html)
Une fois opérationnel, on peut le sécuriser. En procédant ainsi, on va mieux voir où ça coïnce.

Au fait, crée-t-on des clients vides ou bien renseigne-ton tous les champs les concernant?
Si on saisit tous les renseignements, il serait, me semble-t-il, plus commode de saisir dans un tableur, d'exporter au format CSV, et d'importer dans PHP qui se chargerait du pasage vers mysql, sans qu'on ait besoin de donner le nombre de clients à traiter. Ça, je sais faire, et je ne suis pas le seul ici, si tu crains de ne pas t'en tirer.
On aurait juste besoin de dire où se trouve le fichier de données. Par expérience, je trouve plus commode de passer par le tableur, où les corrections sont plu faciles, où on peut s'interrompre et reprendre sans grands soucis...

Re: Boucle et mysql

par davidb1967 » 08 mars 2012, 17:52

J'ai créer une boucle mais cela ne fonctionne pas

Voici le code
<?php require_once('Connections/newtrip.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO Code_client (photographe, `date`, carte, nb_client, magazin) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['photographe'], "text"),
GetSQLValueString($_POST['date'], "date"),
GetSQLValueString($_POST['carte'], "int"),
GetSQLValueString($_POST['nb_client'], "text"),
GetSQLValueString($_POST['magazin'], "text"));

mysql_select_db($database_newtrip, $newtrip);
$Result1 = mysql_query($insertSQL, $newtrip) or die(mysql_error());

$insertGoTo = "code_resultat.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

$colname_codage = "+1";
if (isset($_GET['nb_client'])) {
$colname_codage = $_GET['nb_client'];
}
mysql_select_db($database_newtrip, $newtrip);
$query_codage = sprintf("SELECT nb_client FROM Code_client WHERE nb_client < %s", GetSQLValueString($colname_codage, "text"));
$codage = mysql_query($query_codage, $newtrip) or die(mysql_error());
$row_codage = mysql_fetch_assoc($codage);
$totalRows_codage = mysql_num_rows($codage);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
<?php do { ?>
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right">Photographe:</td>
<td><input type="text" name="photographe" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Date:</td>
<td><input type="text" name="date" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Carte:</td>
<td><input type="text" name="carte" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Nb_client:</td>
<td><input type="text" name="nb_client" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Magazin:</td>
<td><input type="text" name="magazin" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">&nbsp;</td>
<td><input type="submit" value="Créer code" /></td>
</tr>
</table>
<?php } while ($row_codage = mysql_fetch_assoc($codage)); ?>
<input type="hidden" name="MM_insert" value="form1" />
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($codage);
?>
je doit faire une erreur quelque part sachant que cette boucle est generer par dreamweaver.

Un peu d'aide !!!

Re: Boucle et mysql

par sirakawa » 08 mars 2012, 14:22

c'est à dire que, quand tu ajoutes un client "B", si le numéro de client le plus élevé est "000009", il faut que B ait le numéro "000010", je suppose.
J'ai trouvé un truc qui me plaît:
dans mon exemple
le champ varchar(6) se nomme num_text
ajouter un champ num auto_increment
tu fais l'insertion comme ceci( rien de spécial, il est inutile de s'occuper de l'auto_increment qui est géré par mysql)
insert users ( date, nom) values(NOW(), "toto");
et tu fais suivre de cette incantation
mysql> update users set num_text = lpad(last_insert_id(),6, "0") where num = last_insert_id();

je n'ai pas le courage d'expliquer, mais la doc mysql est assez claire une fois qu'on a trouvé les fonctions voulues
http://dev.mysql.com/doc/refman/5.0/fr/ ... rt-id.html

Re: Boucle et mysql

par davidb1967 » 08 mars 2012, 13:36

Bonjour,

Merci sirakawa de t'etre pencher sur mon cas.

j'ai testé en declarant dans la BDD Nb_client en varchar(6) et ca fonctionne.
sachant que je ma future boucle doit incrementer ce chiffre cela restera t il toujour possible ?


Pour la date je vais avoir a la manipuler effectivement.
déja pour l'affichage finale pour n'afficher que les code des jour voulu.

J'ai pour le moment contourner le probleme en utilisant ceux ci dans ma page de resultat:
<?php echo $today = date("dmy"); ?>