Mise à jour PHP SQL

Mammouth du PHP | 620 Messages

23 déc. 2011, 11:15

Bonjour,
j'ai des tarifs dans ma base de données.
Je souhaite modifier ces tarifs en une seule fois et j'ai donc créé 2 pages.
une première qui contient u formulaire avec les tarifs et une deuxième qui valide la modification.

La problème que je rencontre est que les modifications sur un version de php PHP Version 5.2.17 fonctionnent mais sur un autre hébergement avec une version PHP Version 5.3.2-1ubuntu4.9 ne se font pas et je n'arrive pas à trouver d’où est le problème.

voici la page avec formulaire :
<?php
$sql="SELECT * FROM IWtarifschbr ORDER BY id ASC";
$result=mysql_query($sql);
// On compte le nombre de lignes dans la table
$count=mysql_num_rows($result);
echo 'Count = '.$count;

// On fait une boucle pour lister tout ce que contient la table :
while($rows=mysql_fetch_array($result) )
{
?>
<input type="hidden" name="Id[]" id="Id" value="<?php echo $rows['id'] ;?>">
<input type="hidden" name="count" id="count" value="<?php echo $count;?>">
<input name="nbrpers[]" type="text" id="nbrpers" class="nbrpers" value="<?php echo $rows['nbrpers']; ?>" size="20">
<input name="unenuit[]" type="text" id="unenuit" class="miniinput" value="<?php echo $rows['unenuit']; ?>" size="20">
<input name="nuitplus[]" type="text" id="nuitplus" class="miniinput" value="<?php echo $rows['nuitplus']; ?>" size="10" />
 <?php
}
?>
<input type="submit" name="Submit" value="Modifier">
</form>
et le page de traitement :
<?php
		$nbrpers = mysql_real_escape_string($_POST['nbrpers']);
		$unenuit = mysql_real_escape_string($_POST['unenuit']);
		$nuitplus = mysql_real_escape_string($_POST['nuitplus']);
		$count = mysql_real_escape_string($_POST['count']);
		$Id = mysql_real_escape_string($_POST['Id']);

echo $count;
// Check if button name "Submit" is active, do this
	for($i=0;$i<$count;$i++){
		$sql1="UPDATE IWtarifsloca SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id='$Id[$i]'";
		$result1=mysql_query($sql1);
}

mysql_close();
?>


ViPHP
ViPHP | 2577 Messages

23 déc. 2011, 12:06

Il y a une incohérence entre :
$Id = mysql_real_escape_string($_POST['Id']);
et
$sql1="UPDATE IWtarifsloca SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id='$Id[$i]'";

Il ne faut pas de ' autour des nombres
$sql1="UPDATE IWtarifsloca SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id='$Id[$i]'";

Après un mysql_query(), il faut ajouter :
If (mysql_errno() <> 0) echo mysql_error(),'<br>',$sql1,'<br>';
(pour avoir des info sur l'erreur)

Mammouth du PHP | 620 Messages

23 déc. 2011, 12:14

je viens de faire cette modification :
<?php
		include("bdd.php");
		
		$nbrpers = mysql_real_escape_string($_POST['nbrpers']);
		$unenuit = mysql_real_escape_string($_POST['unenuit']);
		$nuitplus = mysql_real_escape_string($_POST['nuitplus']);
		$count = mysql_real_escape_string($_POST['count']);
		$Id = mysql_real_escape_string($_POST['Id']);

// Check if button name "Submit" is active, do this
	for($i=0;$i<$count;$i++){
		$sql1="UPDATE IWtarifsloca SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id=$Id[$i]";
		$result1=mysql_query($sql1);
		if (mysql_errno() <> 0) echo mysql_error(),'<br>',$sql1,'<br>';
}

mysql_close();
?>

et j'ai comme erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
UPDATE IWtarifsloca SET nbrpers='', unenuit='', nuitplus='' WHERE id=

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 déc. 2011, 12:32

au pif : les variables ne sont pas des tableaux et les [$i] servent a rien.

les variables sont des tableaux et les mysql_real_escape_string sont a faire dans la boucle for.

Pour une telle chose tu peux utiliser PDO et les requêtes préparées ça e simplifiais un peu la tache ;)

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 620 Messages

23 déc. 2011, 12:43

je ne connait pas PDO.
Se que je ne comprend pas c'est pourquoi d'une version php a un autre sa ne fonctionne plus.
j'ai essayé avec et sans les ''
je ne récupère rien ! je ne comprend vraiment pas pourquoi sa ne fonctionne pas...
j'ai mis des echo et je n’obtient rien c'est le vide. comme si les infos du formulaire n'arrivaient pas dans la page de validation
<?php
include("../connexion-sql.php");
		$nbrpers = mysql_real_escape_string($_POST['nbrpers']);
		$unenuit = mysql_real_escape_string($_POST['unenuit']);
		$nuitplus = mysql_real_escape_string($_POST['nuitplus']);
		$count = mysql_real_escape_string($_POST['count']);
		$Id = mysql_real_escape_string($_POST['Id']);

// Check if button name "Submit" is active, do this
	for($i=0;$i<$count;$i++){
		echo 'nbrpers : '.$nbrpers;
		echo 'unenuit : '.$unenuit;
		echo 'nuitplus : '.$nuitplus;
		echo 'Id : '.$Id. '<br/>';

		$sql1="UPDATE IWtarifsloca SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id='$Id[$i]'";
		$result1=mysql_query($sql1);
		if (mysql_errno() <> 0) echo mysql_error(),'<br>',$sql1,'<br>';
}

mysql_close();
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 déc. 2011, 12:53

Se que je ne comprend pas c'est pourquoi d'une version php a un autre sa ne fonctionne plus.
Suppression de register globals et c'est une bonne chose, cela t'oblige a contrôler tes données et peux éviter failles de sécurités.

réfléchie bien a l'ordre des choses et tu devrais trouver une solution !


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 620 Messages

23 déc. 2011, 13:02

j'ai modifié à nouveau le code afin d'inclure la réception dans la boucle for mais toujours rien.
<?php
$count = mysql_real_escape_string($_POST['count']);


for($i=0;$i<$count;$i++){
	
		$nbrpers = mysql_real_escape_string($_POST['nbrpers']);
		$unenuit = mysql_real_escape_string($_POST['unenuit']);
		$nuitplus = mysql_real_escape_string($_POST['nuitplus']);
		$Id = mysql_real_escape_string($_POST['Id']);

		echo 'nbrpers : '.$nbrpers[$i];
		echo 'unenuit : '.$unenuit[$i];
		echo 'nuitplus : '.$nuitplus[$i];
		echo 'Id : '.$Id[$i]. '<br/>';

		$sql1="UPDATE IWtarifsloca SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id='$Id[$i]'";
		$result1=mysql_query($sql1);
		if (mysql_errno() <> 0) echo mysql_error(),'<br>',$sql1,'<br>';
}

mysql_close();
?>

Mammouth du PHP | 620 Messages

23 déc. 2011, 13:36

Merci sa fonctionne
j'avais un soucis avec la récupération via tableau.
j'ai donc modifié mon code en fonction et du coup je récupère bien les infos du formulaire.
Bonnes fêtes de fin d'années a tous !