array dans mysql

Eléphanteau du PHP | 13 Messages

24 avr. 2012, 14:27

Bonjour,
Voilà j'ai un petit soucis pour enregistré un array dans mysql. Je sais que je peux utiliser (un)serialize ou implode/explode. J'aimerais avoir vos conseils pour ma requete.

Voilà mon tableau :

Code : Tout sélectionner

Array ( [tableau1] => Array ( [0] => valeur1 [1] => valeur3 ) [tableau2] => Array ( [0] => valeur2 [1] => valeur4 ) )
Je voudrais enregistrer dans la bdd, mes valeurs pour que je puisse les afficher ainsi :
Valeur1 - valeur2 <br />
valeur3 - valeur4
Ma question est la suivante, comment enregistrer dans la bdd, les valeurs dans l'ordre pour les resortir dans l'ordre également.
Je pense que ma requête pose problème, car elle ne prends en compte que les dernières valeurs (soit valeur3 et valeur 4).

Voici mon bout de code avec la requete sql
//variable au POST
$tableauun = $_POST['tableau1'];
$tableaudeux= $_POST['tableau2'];
//Foreach pour boucler sur les valeurs du tableau avec un sprintf pour garder plus facilement leurs type.
foreach ($lexiquefr as $key => $value)
{
$sql = sprintf('INSERT INTO news (tableauun, tableaudeux) VALUES ("%s", "%s") WHERE id="7" ', $value, $tableauun[$key], $tableaudeux[$key]);
$req=mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
}
Merci de votre aide !

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

24 avr. 2012, 15:25

heu where ? sur un insert O_o c'est au minimum étonnant, si le tuple existe c'est un update ^^

tu met 32 arguments dans le sprintf alors qu'il n'y en a que deux dans la chaine de caractère.

utilise la concaténation et mysql_real_esacape_string :)


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

Eléphanteau du PHP | 13 Messages

24 avr. 2012, 16:03

Merci moogli pour ta réponse.

Effectivement pour la requête c'est bien un UPDATE ^^', et donc je modifie également le VALUE en SET.
Je n'oublierais pas d'ajouter un mysql_escape_string sur le $_POST ;) Merci du conseil.

Concernant la requête, je sais bien qu'il y a trop d'element, mais je ne vois pas comment faire autrement pour tout enregistrer dans la table :/

ViPHP
xTG
ViPHP | 7331 Messages

24 avr. 2012, 16:05

Non il voulait dire que ton prototype de sprintf tient compte de deux paramètres (deux Strings) alors que tu lui passes trois variables.

Eléphanteau du PHP | 13 Messages

24 avr. 2012, 16:37

C'est bien le $value qui est en trop?

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

24 avr. 2012, 18:12

Priori oui, il fait doublon avec le 1er tableau.


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

Eléphanteau du PHP | 13 Messages

25 avr. 2012, 16:11

en modifiant le script en y ajoutant la sécurité sur le POST et en concatenant la requête. J'arrive à ça :
$lexiquefr = mysql_real_esacape_string($_POST['languefr']);
$lexiquear = mysql_real_esacape_string($_POST['languear']);
foreach ($lexiquefr as $key => $value)
{

$sql = sprintf('UPDATE news (lexiquefr, lexiquear) SET ("%s", "%s") WHERE id="7", '.$lexiquefr[$key].', '.$lexiquear[$key]);

$req=mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
}
Mais j'ai un retour d'erreur et je ne vois pas d'où cela peut provenir:
Erreur SQL !

Query was empty
Si je me trompe pas, le "%s" permet de savoir que l'on envoi une chaine de caractère (string) et ensuite les valeurs qui suivent sont justement les strings que l'on cherche à affecter à la chaîne.
Auriez, vous une idée?

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

26 avr. 2012, 10:37

mwé, pourquoi tu n'essai pas la concaténation ?

pour info, en SQL les chaines sont délimitées par des ' et non des " (même si parfois les deux sont autorisés).
Les chiffres n'ont pas a être entre '.
$sql = 'UPDATE news (lexiquefr, lexiquear) SET ("'.$lexiquefr[$key].'","'.$lexiquear[$key].'") WHERE id=7';
var_dump($sql);
Pour voir ce que cela donne.

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