Problème nombre de caractères

Petit nouveau ! | 4 Messages

29 avr. 2011, 11:10

Bonjour,

Je suis débutante en PHP. J'ai réalisé un formulaire et une base de données sous PgAdmin III dans le cadre d'un stage en entreprise.
Les informations entrées dans le formulaire sont insérées dans ma base de données. Il fonctionne à partir du moment où je n'entre pas beaucoup de caractères (une vingtaine) dans le champ destiné au commentaire. Mais dès que j'en mets plus, le code me dit qu'il a bien été ajouté à la base de données, alors que celle-ci n'affiche pas la dernière entrée que j'ai faite.

Voici le formulaire :
<form method="post" name="commentaires" id="comms" action="commentaire_agri.php">
            <fieldset><legend>Commentaire sur l'Agriculture : </legend>
                <span class="formw">Entrez un titre :<br /><input type="text" name="titre" id="titre" size="30" maxlength="20" /></span><br /><br />
                <span class="formw">Tapez votre commentaire :<textarea rows="6" cols="42" name="commentaire" id="commentaire" ></textarea></span>
                <span class="formw">Entrez votre code INSEE :<input type="text" name="code" id="code" size="30" maxlength="5" /></span><br /><br />
            </fieldset>
                <p><span class="formw"><input type="submit" name="envoyer" value="Envoyer" class="submit" /></span>
                <span class="formw"><input type="reset" name="annuler" value="Annuler" class="submit" /></span></p>
</form>
Et le code PHP :
<?php
/* On commence par récupérer les champs :*/
if(isset ($_POST['titre'])){$titre = $_POST['titre'];}
else {$titre = "";}
if(isset ($_POST['commentaire'])){$commentaire = $_POST['commentaire'];}
else {$commentaire = "";}
if(isset ($_POST['code'])){$code = $_POST['code'];}
else {$code = "";}

/* On vérifie si les champs sont vides : */
if(empty($titre) OR empty($commentaire) OR empty($code))
{
    echo "Attention, certains champs ne sont pas remplis.\n<a href='/projet_territoires/commentaire/commentaire_agri.html'>Cliquez ici pour recommencer.</a>\n";
}

/* Si aucun champ n'est vide, on peu enregistrer dans la table :*/
else
{
    /* Connexion à la base de données :*/
    $conn = @pg_pconnect("host=localhost dbname=base_communes user=****** password=******");

    /* On écrit la requête SQL :*/
    $requete = @pg_query($conn, "INSERT into com_agriculture(commentaire_agri,code_insee,titre_agri) values('$commentaire','$code','$titre')");

    /* On insère les informations du formulaire dans la table :*/
    $result= @pg_query($requete);
   
    /* On affiche le résultat pour le visiteur :*/
    echo "Votre commentaire a bien été ajouté à la base de données sous le nom ".$titre.".\n
        <a href='/projet_territoires/commentaire.html'>Cliquez ici pour revenir à la page précédente.</a>\n";

    /* On ferme la connexion :*/
    pg_close($conn);
}
?>
Pour information, le champ "commentaire_agri" dans ma base de données est un "character varying" de taille 300. Si quelqu'un a une idée du pourquoi ça ne fonctionne pas je lui en serais très reconnaissante. :) Merci d'avance.

Eléphant du PHP | 50 Messages

29 avr. 2011, 11:44

Bonjour,

A combien de caractères est définie ton champs commentaire_agri dans ta bdd ?

Petit nouveau ! | 4 Messages

29 avr. 2011, 11:47

A 300. C'est pour ça que je ne comprend pas pourquoi il ne veut pas me l'insérer à delà de 20 caractères.

Eléphant du PHP | 50 Messages

29 avr. 2011, 12:04

Pardon je n'avais pas vu la dernière phrase ou tu précisais la taille.
Que t'affiche $commentaire avant l'insert ?

Mammouth du PHP | 672 Messages

29 avr. 2011, 12:04

Bonjour.

1. Affiche le contenu de $_POST (print_r[$_POST]).
2. Affiche la requête.
// Afficher le contenu de POST
print_r[$_POST];
/* On commence par récupérer les champs :*/
/* On vérifie si les champs sont vides : */
/* Si aucun champ n'est vide, on peu enregistrer dans la table :*/
else
{
    /* Connexion à la base de données :*/
    $conn = @pg_pconnect("host=localhost dbname=base_communes user=****** password=******");

    /* On écrit la requête SQL :*/
// On commence par construire et afficher la requete.
$marequete = "INSERT into com_agriculture(commentaire_agri,code_insee,titre_agri) values('$commentaire','$code','$titre')";
echo $marequete;
    $requete = @pg_query($conn, $marequete);
}

Petit nouveau ! | 4 Messages

29 avr. 2011, 12:12

Avec les modifications il m'affiche les données que j'ai entré dans le formulaire, même si le nombre de caractères est plus grand que 20. :?
Mais toujours pas dans ma base de données.

Petit nouveau ! | 4 Messages

04 mai 2011, 16:21

Je crois que c'est dû aux accents ou au style de caractère ... Parce que quand je fais un copier/coller de générateur de texte latin (qui doit bien faire dans les 100 à 200 caractères), ça me l'insère dans la base de données =/

Je vois pas du tout. =(

ViPHP
ViPHP | 2577 Messages

04 mai 2011, 16:32

Bonjour,

Essayes d'utiliser pg_escape_string() cf : http://fr2.php.net/manual/en/function.p ... string.php

De plus enlève le @ devant @pg_query() pour voir s'il y a un message et affiche pg_last_notice() pg_last_error() après la requete.