IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Je bute : Form Textearea insert SQL dans une boucle fetch_assoc


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut Je bute : Form Textearea insert SQL dans une boucle fetch_assoc
    Salutations,

    je bute comme un couillon depuis qq heures ...

    J'ai un listing MySQL dressé en PHP avec des tickets clients.

    Chaque ticket est affiché grâce à une boucle fetch_assoc qui pompe dans une BDD MySQL.
    Il n'y a la que de l'affichage, aucune insertion ou update.

    Cependant, je dois rajouter un champ textearea dans chaque ticket affiché pour permettre à mes bénévoles de placer des nota béné.

    Et la, hé bien, cela ne donne rien, et me reload une page vierge, et aucun insert effectif. Des variables doivent se perdre ... Mais ou ...

    Voici les bouts de codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
    (...)
     
    	// Connexion SQL
    	$connexion = mysqli_connect("$chemin_db","$login","$pass","$database");
     
    (...)
     
    	// Requetes SQL
    	$sql = $connexion->query ("SELECT * FROM $table");
     
    (...)
     
    	// NotaBene
    	if(isset($_POST['submit']))
    	{
    		$textareaValue = trim($_POST['NotaBene']);
     
    		$requete = $connexion->query ("INSERT INTO " . $table. " (NotaBene) VALUES ('$textareaValue') WHERE Id = " . $_POST['id'] . "");
    		$affectedRows = mysqli_affected_rows($requete);
     
    		if($affectedRows == 1)
    		{
    			$successMsg = "Validation de la modification en ligne.";
    		}
    	}
     
    	if(isset($successMsg))
    	{
    		print_r($successMsg);
    	}
     
    (...)
     
    		// On fait une boucle qui va faire un tour pour chaque enregistrement
    		$i = 0;
    		while ($data = $select->fetch_assoc())
    			{
     
    (...)
     
    					<div align="center">
    						<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    							<textarea name="NotaBene" cols="40"><?php echo $data['NotaBene']; ?></textarea>
    							<input type="hidden" name="id" value="<? echo $data['Id']; ?>">
    							<input type="submit" name="submit" value="MaJ">
    						</form>
    					</div>
     
    (...)
     
    			}
     
    (...)
     
    	// Fermeture  de la connexion
    	$connexion->close();
    ?>
    Ou ai-je donc cafouillé ?!?

    Merci de m'avoir lu ...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2019
    Messages : 67
    Points : 72
    Points
    72
    Par défaut
    Salut,

    Je dirai que ta requête INSERT est pas bonne, pourquoi tu mets un WHERE à la fin ?

    WHERE c'est quand tu fais un SELECT ou un UPDATE, mais la tu veux insérer donc il n'y a aucun condition à mettre dans la requête.

    Après si c'est bel et bien un UPDATE que tu veux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE " . $table. " SET NotaBene = '$textareaValue' WHERE Id = " . $_POST['id']

  3. #3
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    Bonjour,
    1 je te conseil de faire un débug donc tu écris un echo "debug"; et tu le déplaces dans ton code voir jusqu’à quand il apparaît
    cela te permettra de voir s'il y a une interruption dans ton code.
    ensuit n'as tu aucune erreur?(idem dans les logs)

    2 les var_dump sont bien pratiques pour controller la valuer de tes variables
    3 ce que tu peux faire pour test ta requête c'est de directement l'utiliser dans ta base de donnée sans passer par php donc via phpmyadmin(si mysql) sinon l'ide approprié si cela passes tu peux éliminer le problème => erreur requête
    De plus tu mets ceci
    Citation Envoyé par Casio Voir le message
    Il n'y a la que de l'affichage, aucune insertion ou update.
    ton utilisateur sql a-t-il donc bien les droits nécessaires pour faire des updates?

  4. #4
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Pour le $i, voici la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (...)
    		<?php
    		// On fait une boucle qui va faire un tour pour chaque enregistrement
    		$i = 0;
    		while ($data = $select->fetch_assoc())
    			{
    			// Variables
    			$datesaisie = date("Y-m-d", strtotime($data['Saisie'])); // Formatage de la date de saisie
    			$i = (($i++%2)+1); // Couleur de fond aleatoire
    			?>
    (...)
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  5. #5
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Les datas ne s'insèrent pas dans la BDD (je regarde bien évidemment avec PHPMyAdmin).

    Voici le genre de listes sur laquelle je bosse présentement :
    Nom : Capture d'écran 2020-01-27 12.19.26.png
Affichages : 95
Taille : 160,2 Ko
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  6. #6
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    D'accord je penses que le $i peut être simplifié mais passons ce n'est pas ça le sujet de discussion.
    As tu comme je t'ai conseillé essayé de débugger?
    Aurais tu des erreur php/logs?
    Car sans cela c'est un peu dure de t'aider sans savoir vers ou regarder et sans vraiment connaitre ton code.
    As tu testé tes requêtes SQL directement via l'ide comme conseillé
    cf. dernier message

  7. #7
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Je viens de tester en insérant tout à la suite dans la boucle, cela ne change rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    (...)
     
    					<!-- Nota bene !-->
    					<div align="center">
    						<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    							<textarea name="NotaBene" cols="40" placeholder="Post-it (en test) ..."><?php echo $data['NotaBene']; ?></textarea>
    							<input type="hidden" name="id" value="<? echo $data['Id']; ?>">
    							<input type="submit" name="submit" value="MaJ">
    						</form>
    					</div>
    					<?php
    						if(isset($_POST['submit']))
    						{
    							$textareaValue = trim($_POST['NotaBene']);
     
    							$requete = $connexion->query ("UPDATE " . $table. " SET NotaBene = '$textareaValue' WHERE Id = " . $_POST['id'] . "");
    							$affectedRows = mysqli_affected_rows($requete);
     
    							if($affectedRows == 1)
    							{
    								$successMsg = "Validation de la modification en ligne.";
    							}
    						}
     
    						if(isset($successMsg))
    						{
    							print_r($successMsg);
    						}
    					?>
     
    (...)
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  8. #8
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Bon, j'ai bidouillé, et j'ai sorti le moteur PHP sur un autre fichier. Du coup, cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (...)
    					<!-- Nota bene !-->
    					<br />
    					<div align="center">
    						<form name="notabene" action="https://admin.wda-fr.org/Apport/nb-send.php" method="Post" target="_blank">
    							<textarea name="NotaBene" cols="40" placeholder="Post-it ..."><?php echo $data['NotaBene']; ?></textarea>
    							<input type="hidden" name="id" value="<? echo $data['Id']; ?>">
    							<input type="submit" name="submit" value="MaJ">
    						</form>
    					</div>
    (...)
    Fichier appelé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    	// Connexion SQL
    	$connexion = mysqli_connect("$chemin_db","$login","$pass","$database");
     
    	if(isset($_POST['submit']))
    	{
    		$textareaValue = trim($_POST['NotaBene']);
     
    		$requete = $connexion->query ("UPDATE " . $table. " SET NotaBene = '$textareaValue' WHERE Id = " . $_POST['id'] . "");
    		$affectedRows = mysqli_affected_rows($requete);
    	}
     
    	// Confirmation visuelle
    	if ($textareaValue == "") {$textareaValue = "- Post-it vide -"; }
     
    	echo "Le contenu :<br /><br />" . $textareaValue . "<br /><br />vient d'&ecirc;tre appliqu&eacute; sur le ticket " . $_POST['id'] ." !";
    	echo "<br /><br />Vous pouvez fermer cette fen&ecirc;tre, ou onglet...<br />";
     
    	// Fermeture  de la connexion
    	$connexion->close();
    ?>
    Merci de vos aides.

    Je clos.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/01/2011, 10h38
  2. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 17h18
  3. [MySQL] Problème de SQL dans une boucle
    Par Bozomobile dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/11/2008, 20h17
  4. [SQL] Boucle SQL dans une boucle for
    Par architecte dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/08/2007, 11h47
  5. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo