[RESOLU] [Update MYSQL] form PHP

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 : [RESOLU] [Update MYSQL] form PHP

Re: [Update MYSQL] form PHP

par alwaysmore » 12 déc. 2013, 17:27

Ben non je n'ai pas oublié :D

Ca marche nikel je te remercie encore une fois pour ton aide.

Re: [Update MYSQL] form PHP

par alwaysmore » 12 déc. 2013, 11:56

Hello !

Merci beaucoup d'avoir refait l'explication. C'est plus clair. Je vais essayer cela, je te tiens au courant.

Encore merci.

Re: [Update MYSQL] form PHP

par moogli » 11 déc. 2013, 23:21

cela ne peux fonctionner tu met en dur l'id match.

une ligne de formulaire
<?php
echo $data['EQUIPE_A'] . '<input type="text" name="equipeA[' . $date['ID_MATCH'] . ']" value="' . $data['P_EQUIPE_A'] . '">';
echo ' - ';
echo '<input type="text" name="equipeB[' . $date['ID_MATCH'] . ']" value="' . $data['P_EQUIPE_B'] . '">' . $data['EQUIPE_B'];
tu auras donc une ligne par match.
A la validation tu auras des tableaux dans $_POST['equipeA'] et $_POST['equipeB'];
les index des tableaux seront les id des matchs.

du coup
<?php
foreach($_POST['equipeA'] as $idMatch => $scoreA) {
    $scoreB = $_POST['equipeB'][$idMatch];
   // insertion etc 
}
 
te permet une insertion simple dans une table réalisant le jointure entre les utilisateurs, les matchs et les pronostiques. (genre idUtilisateur, idMatch, scoreA, scoreB).
bien entendus cela n'est pas top coté modèle mais bon c'est simple.

@+

Re: [Update MYSQL] form PHP

par alwaysmore » 11 déc. 2013, 19:08

Je ne comprends pas à quel endroit je dois mentionner les champs que tu dis... Puis le foreach ensuite plante..

Là j'ai fait cela :
echo '<tr><input type="hidden" name="'.$data['ID_MATCH'].'">
			<td align="left" width=30%>'.date("d/m/Y H:i",strtotime($data['DATE_HEURE_MATCH'])).'</td>
			<td align="left" width=25%>'.$data['M_EQUIPE_A'].'</td>';
			if (date("d/m/Y H:i:s",strtotime($data['DATE_HEURE_MATCH']))<= date("d/m/Y H:i:s")){
				echo '<td align="center" width=5%><input type="text" name="equipeA[]" value="'.$data['P_EQUIPE_A'].'" disabled="disabled" style="width:12px;font-size:12px;"></td>
				<td align="center" width=3%>-</td>
				<td align="center" width=5%><input type="text" name="equipeB[]" value="'.$data['P_EQUIPE_B'].'" disabled="disabled" style="width:12px;font-size:12px"></td>';
			} else {
				echo '<td align="center" width=5%><input type="text" name="equipeA[]" value="'.$data['P_EQUIPE_A'].'" style="width:12px;font-size:12px;"></td>
				<td align="center" width=3%>-</td>
				<td align="center" width=5%><input type="text" name="equipeB[]" value="'.$data['P_EQUIPE_B'].'" style="width:12px;font-size:12px"></td>';
			}
			
			echo '<td align="right" width=25%>'.$data['M_EQUIPE_B'].'</td>
			<td style="font-size:12px;" align="center" width=7%><b>'.$data['NB_POINTS'].'</b></td></tr>';
			}
echo '
<tr><input type="hidden" name="'.$data['ID_MATCH'].'" id="'.$data['ID_MATCH'].'" value="'.$data['ID_MATCH'].'">
<td align="left" width=30%>'.date("d/m/Y H:i",strtotime($data['DATE_HEURE_MATCH'])).'</td>
<td align="left" width=25%>'.$data['M_EQUIPE_A'].'</td>';
                        
// je génère les input (actif ou inactif) en fonction de la date du match
if (date("d/m/Y H:i:s",strtotime($data['DATE_HEURE_MATCH']))<= date("d/m/Y H:i:s")){
                                echo '<td align="center" width=5%><input type="text" name="prono_a" id="prono_a" value="'.$data['P_EQUIPE_A'].'" disabled="disabled" style="width:12px;font-size:12px;"></td>
                                <td align="center" width=3%>-</td>
                                <td align="center" width=5%><input type="text" name="prono_b" id="prono_b" value="'.$data['P_EQUIPE_B'].'" disabled="disabled" style="width:12px;font-size:12px"></td>';
                        } else {
                                echo '<td align="center" width=5%><input type="text" name="prono_a" id="prono_a" value="'.$data['P_EQUIPE_A'].'" style="width:12px;font-size:12px;"></td>
                                <td align="center" width=3%>-</td>
                                <td align="center" width=5%><input type="text" name="prono_b" id="prono_b" value="'.$data['P_EQUIPE_B'].'" style="width:12px;font-size:12px"></td>';
                        }
                        
                        echo '<td align="right" width=25%>'.$data['M_EQUIPE_B'].'</td>
                        <td style="font-size:12px;" align="center" width=7%><b>'.$data['NB_POINTS'].'</b></td></tr>';
                        } 
Encore merci de ton aide.

Re: [Update MYSQL] form PHP

par alwaysmore » 11 déc. 2013, 17:17

Bonjour moogli,

Merci pour ta réponse.

Je réponds à ta question : oui il n'y a qu'un seul ID par match.

Par contre, je suis désolé j'ai beau relire ton message mais je ne comprends rien :(:(

Comment je dois nommer mes champs du formulaire en fait ?

Merci beaucoup.

Re: [Update MYSQL] form PHP

par moogli » 11 déc. 2013, 17:07

salut,


le problème viens du fait que tu ne peux pas connaitre les noms des champs à l'avance et que ton formulaire ne permet pas de les déterminer à l'avance.

le plus simple c'est d'utiliser la notation tableau pour nommer les champs de formulaire (par exemple <input type="text" name="equipea[]" />).
cela te fournit un tableau php dans l'index correspondant de $_POST(dans les exemple $_POST['equipea'] est un tableau).
de plus si tu précise un index pour le tableau celui ci est conservé.

du coup si ton champ ce nomme equipea[$idMatch], et que tu fait pareil pour l'équipe b coté php cela devient simple (pour ne pas dire trivial ;) )
<?php
foreach($_POST['equipeA'] as $idMatch => $scoreA) {
    $scoreB = $_POST['equipeB'][$idMatch];
   // insertion etc 
}
Attention il manque les contrôles élémentaires d’existence des index avant d'essayer de les utiliser ;).

Du coup tu t'affranchie de savoir dans quel groupe c'est vu que ce qui compte c'est l'id du match (et que j'espère que tu n'as pas les mêmes id de match dans chaque groupe 8-) ).
tant que tout ton affichage est dans un seul formulaire, le submit final de ce qui est affiché à l'écran fonctionnera sur les quelque lignes que j'ai posté plus haut.

l'avantage c'est que c'est la même chose quelque soit l'affichage, en groupe ou pas, et quelque soit l'avancé dans la compétition (1/2, 1/4, final etc).

le système devient dynamique et fonctionne tout le temps sans que tu ai besoin de dupliquer la chose pour chaque étape de la compétition :mrgreen:


@+

Re: [Update MYSQL] form PHP

par alwaysmore » 11 déc. 2013, 15:31

En gros cela donne cela :

[img]groupe%20A.jpg[/img]

[Update MYSQL] form PHP

par alwaysmorephp » 11 déc. 2013, 15:14

Bonjour bonjour,

Un petit coup de main svp ne serait pas de refus :)

Je fais une page qui permet de faire un mini tournoi de pronostics pour la coupe du monde.
J'ai une page qui contient un formulaire qui lui-même contient plusieurs tableaux. Mon souci c'est que j'arrive pas à récupérer pour chaque pronostics des tableaux les scores pour les enregistrer en base. Je suppose que je dois faire une boucle mais je n'arrive pas à parcourir tous mes tableaux...car j'en ai un par groupe. Ci-dessous je n'ai mis que l'extrait du groupe A.

Merci beaucoup pour votre aide.


// ici je teste si l'ID du joueur passé en URL existe
if (isset($_GET['id']) and strlen($_GET['id'])==8) {
			// CREATION DU TABLEAU
			echo '<form method="post" name="validePronos" action="">';
			echo '<TABLE class=match width=100%>';
				echo '<TR>';
					echo '<TH COLSPAN=7>GROUPE A</TH>';
				echo '</TR>';
				echo '<TR>';
					echo '<TH>Date et heure</TH>';
					echo '<TH COLSPAN=5>Match</TH>';
					echo '<TH>Points</TH>';	
				echo '</TR>';
			// REMPLISSAGE GROUPE A
			$sql = 'SELECT WP_CM_2014_MATCH.ID_MATCH as ID_MATCH, WP_CM_2014_MATCH.EQUIPE_A as M_EQUIPE_A, WP_CM_2014_MATCH.EQUIPE_B as M_EQUIPE_B, 
			WP_CM_2014_MATCH.DATE_HEURE_MATCH as DATE_HEURE_MATCH, WP_CM_2014_PRONO.DATE_HEURE_PRONO as DATE_HEURE_PRONO, WP_CM_2014_PRONO.PRONO_EQUIPE_A as P_EQUIPE_A, 
			WP_CM_2014_PRONO.PRONO_EQUIPE_B as P_EQUIPE_B, WP_CM_2014_PRONO.POINTS as NB_POINTS
			FROM WP_CM_2014_MATCH, WP_CM_2014_PRONO
			WHERE WP_CM_2014_MATCH.GROUPE="A"
			AND WP_CM_2014_MATCH.ID_MATCH = WP_CM_2014_PRONO.ID_MATCH
			AND WP_CM_2014_PRONO.ID_JOUEUR = '. htmlspecialchars($_GET["id"]) .'
			ORDER BY DATE_HEURE_MATCH'; 
			$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
			while($data = mysql_fetch_assoc($req)) 
			{ 
		        // id du match caché
                        echo '<tr><input type="hidden" name="'.$data['ID_MATCH'].'" id="'.$data['ID_MATCH'].'" value="'.$data['ID_MATCH'].'">
			<td align="left" width=30%>'.date("d/m/Y H:i",strtotime($data['DATE_HEURE_MATCH'])).'</td>
			<td align="left" width=25%>'.$data['M_EQUIPE_A'].'</td>';
			
// je génère les input (actif ou inactif) en fonction de la date du match
if (date("d/m/Y H:i:s",strtotime($data['DATE_HEURE_MATCH']))<= date("d/m/Y H:i:s")){
				echo '<td align="center" width=5%><input type="text" name="prono_a" id="prono_a" value="'.$data['P_EQUIPE_A'].'" disabled="disabled" style="width:12px;font-size:12px;"></td>
				<td align="center" width=3%>-</td>
				<td align="center" width=5%><input type="text" name="prono_b" id="prono_b" value="'.$data['P_EQUIPE_B'].'" disabled="disabled" style="width:12px;font-size:12px"></td>';
			} else {
				echo '<td align="center" width=5%><input type="text" name="prono_a" id="prono_a" value="'.$data['P_EQUIPE_A'].'" style="width:12px;font-size:12px;"></td>
				<td align="center" width=3%>-</td>
				<td align="center" width=5%><input type="text" name="prono_b" id="prono_b" value="'.$data['P_EQUIPE_B'].'" style="width:12px;font-size:12px"></td>';
			}
			
			echo '<td align="right" width=25%>'.$data['M_EQUIPE_B'].'</td>
			<td style="font-size:12px;" align="center" width=7%><b>'.$data['NB_POINTS'].'</b></td></tr>';
			} 
			echo '</TABLE>';
echo '</form>';