[RESOLU] update sql avec case à cocher

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 sql avec case à cocher

Re: update sql avec case à cocher

par cris84 » 19 févr. 2014, 22:08

Ah oui effectivement tout fonctionne...
J'ai adapté le code avec l'erreur si la ou les cases ne sont pas cochées :
<?php 
if (empty($_POST['update'])) {
echo'<p><div class="alert alert-error">Vous n\'avez pas cochez de case !</div><p><a href="admin_validation_membres.php">Retour à la validation des membres</a></div>';
?>
Un grand merci pour votre aide toujours précieuse pour avancer quand on est débutant =D>

Re: update sql avec case à cocher

par moogli » 18 févr. 2014, 23:17

Warning: Invalid argument supplied for foreach() in /homepages.......admin_membres_valide.php on line 26
y a 20 lignes dans le code que tu fournis, je conclus donc que :
- soit tu ne fournit pas le code complet
- soit ce n'est pas le bon code.

voila comment tu peux faire (note l'utilisation de mysqli plutôt que mysql qui est dépréciée et vouée à la suppression dans une future version)
<?php
//connexion mysql
$conn = mysqli_connect('localhost', 'user', 'password', 'la base');

if (!empty($_POST['update']) && is_array($_POST['update']) && count($_POST['update']) > 0) {
    // utilise mysqli_real_escape_string  http://fr2.php.net/manual/fr/mysqli.real-escape-string.php
    // sinon tu t'expose à une faille type injection sql
    $sql = 'UPDATE membres SET valide=1 WHERE membres.id in(' . implode(',', $_POST['update']) . ')';

    $ret = mysqli_query($conn, $sql);
    if ($ret !== false) {
        // erreur
        $err = mysqli_error($conn);
    }
}
?>
<!Doctype html>
<html>
<head>
    <title>Validation membre</title>
</head>
<body>
<h1>Liste des membres à valider</h1>
<?php
if (!empty($err)) {
    // affiche un beau qui va bien pour les gens
    echo $err;
}
?>
<form method="post" action="">
    <table>
        <thead>
        <tr>
            <th>Pseudo</th>
            <th>Email</th>
            <th>Date d'inscription</th>
            <th>profil</th>
            <th>Modifier</th>
            <th>Valider</th>
        </tr>
        </thead>
        <tbody>
        <?php
        $sql = 'select id,date_inscription,pseudo, email from membres where valide=0';
        $result = mysqli_query($conn, $sql);
        while ($data = mysqli_fetch_array($result)) {
            echo '<tr>';
            echo '<td>', $data['pseudo'], '</td>';
            echo '<td>', $data['email'], '</td>';
            echo '<td>', date('d/m/Y', $data['date_inscription']), '</td>';
            echo '<td><a href="profil.php?id=', $data['id'], '">Voir le profil</a></td>';
            echo '<td><a href="admin_modifier_profil.php?id=', $data['id'], '">Modifier le profil</a></td>';
            echo '<td><input type="checkbox" name="update[]" value="', $data['id'], '"</td>';
            echo '<td></td>';
            echo '</tr>';
        }
        mysqli_free_result($result);
        mysqli_close($conn);
        ?>
        </tbody>
    </table>
    <input type="submit" name="validation" value="Valider"/>
</form>
</body>
</html>
@+

Re: update sql avec case à cocher

par cris84 » 18 févr. 2014, 19:19

Oui je l'ai pas remis car c'est le même que plus haut en ajoutant simplement print_r

merci encore
<?php

	$update = isset($_POST['update']) ? $_POST['update'] : array(); 
	$id = isset($_POST['id']) ? $_POST['id'] : array();
	print_r($_POST);
		if (sizeof($update)==0){
echo '<div class="alert alert-error">Vous n\'avez pas selectionné de membre à valider !</div>';
echo'<p>';
echo'<a href="admin_validation_membres.php">Retour à la validation des membres</a>';
exit;
}
else
{

foreach ($update as $id){
$sql='UPDATE membres SET valide="1" WHERE membres.id='.$id;

echo '<div class="alert alert-success">Le membre a bien été validé</div><p><a href="admin_validation_membres.php">Retour à la validation des membres</a>';
$req= mysql_query($sql);
}
 ?>

Re: update sql avec case à cocher

par moogli » 18 févr. 2014, 18:14

ben voila php a toujours raison :)

si tu nous donne le code complet (et pas des brides) on y verras plus clair.
masque seulement les données de connexions que tu peux utiliser (sgbd etc etc).

@+

Re: update sql avec case à cocher

par cris84 » 18 févr. 2014, 17:36

Bonjour,
oui de cette manière :
<?php
$update = isset($_POST['update']) ? $_POST['update'] : array(); 
	$id = isset($_POST['id']) ? $_POST['id'] : array();
	print_r($_POST);
		if (sizeof($update)==0){
echo '<div class="alert alert-error">Vous n\'avez pas selectionné de membre à valider !</div>';
echo'<p>';
echo'<a href="admin_validation_membres.php">Retour à la validation des membres</a>';
exit; ?>
et voici le résultat : Array ( [update] => valider )
Warning: Invalid argument supplied for foreach() in /homepages.......admin_membres_valide.php on line 26

Re: update sql avec case à cocher

par moogli » 18 févr. 2014, 08:05

Le message indique qu'au moment du foreach $_POST['update'] n'est pas un tableau.

Le print_r($_POST); tu l'as mis avant le if ?


@+

Re: update sql avec case à cocher

par cris84 » 18 févr. 2014, 05:25

j'avoue que je m'y perds.
En t'autres termes ça veut dire quoi ?

Re: update sql avec case à cocher

par moogli » 17 févr. 2014, 22:00

Tu contre dit le message d'erreur de ton 1er message ....

Re: update sql avec case à cocher

par cris84 » 17 févr. 2014, 19:48

J'utilise un tableau pas pure esthétique, et if au lieu de while simplement par confort, validation un par un.

J'ai bien coché la case, car l'erreur est gérée par ceci :
<?php
if (sizeof($update)==0){
echo '<div class="alert alert-error">Vous n\'avez pas selectionné de membre à valider !</div>';
echo'<p>'; ?>
j'ai rajouté print_r($_POST);

voici le message retourné : Array ( [update] => Array [valider] => valider )

merci encore de votre aide :D

Re: update sql avec case à cocher

par moogli » 17 févr. 2014, 18:25

salut,

le message d'erreur indique que $_POST['update'] n'est pas un tableau (tu n'as pas coché la case ?)

au vu de ton code pourquoi utiliser une tableau ? Et même pourquoi ramener x lignes de résultats depuis la base de donnée pour n'en traiter qu'un seul ?

je pense que tu as oublié une boucle (while généralement) pour l'affichage des checkbox).

@+

update sql avec case à cocher

par cris84 » 17 févr. 2014, 16:34

Bonjour à tous,
j'ai un souci avec l'update de ma table avec checkbox, j'ai une erreur que je n'arrive pas à résoudre :
Warning: Invalid argument supplied for foreach()....../admin_membres_valide.php on line 26

Je vous joins les deux codes correspondants .
Merci de votre aide...
voici celui du formulaire :
<?php
 $reponse = mysql_query('SELECT * FROM '.$prefix.'membres WHERE valide="0"') or die(mysql_error()); 
 if ($donnees = mysql_fetch_array($reponse))
{


?>
<form method='POST' action='admin_membres_valide.php'>
<?php
$_SESSION['pseudo'] = $donnees['pseudo'];
$_SESSION['email'] = $donnees['email'];
 	?>
<table width="100%" border="1">
<tr>
<td width='18%'><div align="center">Date d'inscription </div></td>
<td width='20%'><div align="center">pseudo</div></td>
<td width='18%'><div align="center">email</div></td>
<td width='10%'>Valider / <a href="admin_modifier_profil.php?id=<?php echo $donnees['id']; ?>">Modifier</a> </td>
<tr><td><?php echo date('d/m/Y', $donnees['date_inscription']); ?></td>

  <td><a href="profil.php?id=<?php echo $donnees['id']; ?>"><?php echo $donnees['pseudo']; ?></a></td>
<td><?php echo $donnees['email']; ?></td>
<td><input type='checkbox' name='update[]' value="<?php echo $donnees['id'] ; ?>" /></tr>
</table>
<div align="right"><input accesskey="S" name="valider" value="valider" type="submit"></div><br />


</form>

<?php 
}
else
{
echo '<h8>Il n\'y a plus de membre à valider</h8><p>';
}
?>
Et celui de la validation :
<?php

	$update = isset($_POST['update']) ? $_POST['update'] : array(); 
	$id = isset($_POST['id']) ? $_POST['id'] : array();
	
		if (sizeof($update)==0){
echo '<div class="alert alert-error">Vous n\'avez pas selectionné de membre à valider !</div>';
echo'<p>';
echo'<a href="admin_validation_membres.php">Retour à la validation des membres</a>';
exit;
}
else
{

foreach ($_POST['update'] as $id){
$sql='UPDATE membres SET valide="1" WHERE membres.id='.$id;
}
?>