[RESOLU] problème variables/updates/ SELECT OPTION

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:04

Voilà le home.php
<form action="update.php" method="POST" >
			<?php
				$select = 'SELECT * FROM cream';
				$result = mysqli_query($connexion, $select) or die ('Erreur : '.mysql_error() );
				$total = mysqli_num_rows($result);

			       if($total) {
				// debut du tableau
								
				echo '<table border="1px solid black">'."\n";
				// première ligne on affiche les titres prénom et surnom dans 2 colonnes
					echo '<tr>';
				        echo '<td><b><u>CREAM</u></b></td>';
					echo '<td><b><u>AVAILABILITY</u></b></td>';
					echo '</tr>'."\n";
						// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
						while($row = mysqli_fetch_array($result)) {


							// 0 = Not Available 1 = Available					
							if ($row["available"] == 0) {
								$row["availability"] = "Not Available";
							}
							else {
							        $row["availability"] = "Available";
							}
					echo '<tr>';
					echo '<td>'.$row["name"].' <input type="text" name="id[]" value="'.$row["id"].'"> </td>';
					echo '<td>
					<SELECT name="available[]">
						<OPTION VALUE="0"'.($row["available"] ? '' : ' selected="selected"').'>Not Available</OPTION>
      						<OPTION VALUE="1"'.($row["available"] ? ' selected="selected"' : '').'>Available</OPTION>
					</SELECT>
					</td>';
					echo '</tr>'."\n";
					}
					echo '</table>'."\n";
								
					// fin du tableau.
					} 

					?>
					<input type="submit" value="Apply" name="submit" />
				</form>
et l'update.php
<?php
	session_start();
	include_once('../php/connexion.php');

		if(isset($_SESSION["userId"])){
		include('home.html');
	}
	else {
		header("location: connect.php");
	}



		if(isset($_POST["submit"])){
		  $id = $_POST['id'];
		  $available = $_POST['available'];

		  foreach($_POST['available'] as $index => $available) {
			  $id = $_POST['id'][$index];
			  /* écriture et exécution de la requête */
			}
								
		  $query = "";
		  $query = "UPDATE cream SET available ='".$available."' WHERE id = '".$id."' ";
		  $result = mysqli_query($connexion, $query) or die (mysql_error());
				}
?>

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 15:07

Ok le code d'écriture et exécution de la requête est a insérer à l'endroit du commentaire. Pas après le foreach.
Ceci dit ça devrait au moins mettre à jour la dernière ligne.

EDIT
Pour des colonnes de type numérique les ' sont facultatifs dans la requête.
Et les 2 lignes suivantes, juste après le if post submit sont inutiles :
$id = $_POST['id'];
$available = $_POST['available'];
Modifié en dernier par Saian le 21 mai 2015, 15:10, modifié 1 fois.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:09

if(isset($_POST["submit"])){
		  $id = $_POST['id'];
		  $available = $_POST['available'];

		  foreach($_POST['available'] as $index => $available) {
			  $id = $_POST['id'][$index];
			  
			   $query = "";
				  $query = "UPDATE cream SET available ='".$available."' WHERE id = '".$id."' ";
				  $result = mysqli_query($connexion, $query) or die (mysql_error());
						}
			}
Voilà après modification comme tu m'as dis, et ça ne marche toujours pas :s
Merci de ton aide :D

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 15:11

Bon ben te reste plus qu'à ajouter un print_r($_POST) avant le if isset pour vérifier le contenu du tableau $_POST.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:12

J'ai du nouveau ! Ce code fonctionne bien ! Il faut juste que je réactualise une deuxième fois pour voir le changement !!
Merci beaucoup à vous :DD

Tu as une idée quand même pour la réactualisation ?

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 15:16

Euh après l'update tu as quoi ? une page blanche ? et tu fais précédent pour revenir à la liste ?

Généralement après une procédure de mise à jour on fait une redirection avec la fonction header().

Par exemple après le foreach tu peux ajouter :
header('Location: home.php');
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:20

Après l'update j'avais rien, ça rester sur update avec un include du home
J'ai mis le header et il n'y a aucune redirection :')
Même ça c'est la base et j'arrive à rester planter dessus

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 15:25

Généralement on met aussi un exit() derrière un header de redirection. Ca peut éviter des comportements inattendus dans certains cas :
if(isset($_POST["submit"])) {
  foreach($_POST['available'] as $index => $available) {
    $id = $_POST['id'][$index];
    $query = "UPDATE cream SET available='$available' WHERE id = '$id'";
    $result = mysqli_query($connexion, $query) or die (mysql_error());
  }
	
  header('Location: home.php');
  exit();
}
EDIT
A noter qu'aucune sortie ne doit être présente avant l'appel de la fonction header().
L'ouverture du PHP doit donc être en première ligne du fichier et ne doit jamais être fermé.
Et rien ne doit être imprimé dans la page (pas de echo, print_r, var_dump et autre fonctions qui génèrent une sortie).

Dans ton cas tu dois avoir un warning du genre header already sent mais ton serveur doit être configuré pour ne pas afficher les erreurs.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:30

Ca ne change rien du tout :/

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 15:31

Si la configuration du serveur le permet, tu peux mettre ces deux lignes au début du code PHP pour voir les erreurs :
ini_set('display_errors', 1);
error_reporting(E_ALL);
A enlever quand tu as fini de travailler sur ton code.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:39

Je suis sur easyPhP en localhost
Mais rien ne s'affiche comme message d'erreur

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 15:52

Normalement ça devrait fonctionner. Au pire tu devrais avoir une 404 (en admettant que l'adresse de home.php ne soit pas bonne) sauf s'il y a une erreur header already sent.

Essaye de voir s'il n'y a pas quelque chose dans le log d'erreurs.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

21 mai 2015, 15:59

J'ai rien dans le log d'erreurs a part ça:
ReferenceError: $ is not defined update.php:287:8
Mais c'est en rapport avec du js donc rien a voir

Eléphanteau du PHP | 25 Messages

21 mai 2015, 16:00

En gros c'est comme si le header n'existait pas

Avatar du membre
Mammouth du PHP | 1609 Messages

21 mai 2015, 16:09

Oui sauf qu'il y a bien un header. Donc soit le moteur php ne passe pas sur la ligne, mais si tu l'as placé comme dans mon exemple et que les mises à jour se font biens, il passe forcément dessus. Et dans ce cas, soit il y a une erreur header already sent auquel cas la redirection ne se fera effectivement pas.

As tu vérifié les points suivant :
A noter qu'aucune sortie ne doit être présente avant l'appel de la fonction header().
L'ouverture du PHP doit donc être en première ligne du fichier et ne doit jamais être fermé.
Et rien ne doit être imprimé dans la page (pas de echo, print_r, var_dump et autre fonctions qui génèrent une sortie), JE PRECISE avant l'appel de la fonction header.
Développeur web depuis + de 20 ans