Partie admin gérer base de donnée [Résolu/Fermé]

Signaler
-
Messages postés
34
Date d'inscription
dimanche 6 mars 2011
Statut
Membre
Dernière intervention
19 janvier 2018
-
Bonjour,
J'ai créé un site avec une partie "admin" pour modifier les texte affichés via ma base de donnée.

Seulement le problème est que
le "titre" n'est pas modifié
Le "texte "est codé ex :
• Le premier entretien est gratuit ; câ€(TM)est lâ€(TM)entretien de la naissance de lâ€(TM)idée, la nature de la demande.
• Jâ€(TM)exerce ma profession dans le cadre strict de mes compétences, si jâ€(TM)estime quâ€(TM)une prestation qui mâ€(TM)est soumise requiert le concours dâ€(TM)un professionnel, jâ€(TM)orienterai mon client vers celui-ci (avocat, notaire, conseil juridique, etc…).
• Devis gratuit.
• Le travail est effectué après signature du devis accepté et signé.
• Tarifs transparents (consultables).


Voici mon code php avec dreamweaver :
<?php require_once('../Connections/Ecrivain_public.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO texte_acc (titre, texte) VALUES (%s, %s)",
                       GetSQLValueString($_POST['titre'], "text"),
                       GetSQLValueString($_POST['texte'], "text"));

  mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
  $Result1 = mysql_query($insertSQL, $Ecrivain_public) or die(mysql_error());

  $insertGoTo = "mentions.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
mysql_query("SET NAMES UTF8");
$query_mentions = "SELECT * FROM texte_acc";
$mentions = mysql_query($query_mentions, $Ecrivain_public) or die(mysql_error());
$row_mentions = mysql_fetch_assoc($mentions);
$totalRows_mentions = mysql_num_rows($mentions);
?>


et celui qui s'affiche dans ma page :
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
            <table align="center">
              <tr valign="baseline">
                <td nowrap align="right">Titre:</td>
                <td><input type="text" name="titre" value="<?php echo $row_mentions['titre']; ?>" size="32"></td>
              </tr>
              <tr valign="baseline">
                <td nowrap align="right" valign="top">Texte:</td>
                <td><textarea name="texte" cols="50" rows="5"><?php echo $row_mentions['texte']; ?></textarea>
                </td>
              </tr>
              <tr valign="baseline">
                <td nowrap align="right">&nbsp;</td>
                <td><input type="submit" value="Insérer l'enregistrement"></td>
              </tr>
            </table>
            <input type="hidden" name="MM_insert" value="form1">
          </form>


Merci d'avance pour votre aide

10 réponses

personne n'a de réponse ????
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
89
Bonjour
Ce n'est pas quand vous allez exposer tout votre code qu'on saura vous aider.
Quel est le souci avec le titre ?
Et quelle partie du code est concernée ?
Bonjour et merci pour votre réponse
En fait lorsque je vais dans mon admin pour modifier le texte d'accueil (par exemple) texte qui s'affiche depuis ma base de donnée. lorsque je clique sur enregistrer les modifs mon texte ressemble plus a rien exemple ci-dessus.

A la base il ressemble a ça AVANT:
Transparence :

* Le premier entretien est gratuit ; c'est l'entretien de la naissance de l'idée, la nature de la demande.
* J'exerce ma profession dans le cadre strict de mes compétences, si j'estime qu'une prestation qui m'est soumise requiert le concours d'un professionnel, j'orienterai mon client vers celui-ci (avocat, notaire, conseil juridique, etc...).
* Devis gratuit.
* Le travail est effectué après signature du devis accepté et signé.
* Tarifs transparents (consultables).


Si je le modifie en rajoutant ex "essai" APRES:

essai modification rajout de texte
• Le premier entretien est gratuit ; câ€(TM)est lâ€(TM)entretien de la naissance de lâ€(TM)idée, la nature de la demande.
• Jâ€(TM)exerce ma profession dans le cadre strict de mes compétences, si jâ€(TM)estime quâ€(TM)une prestation qui mâ€(TM)est soumise requiert le concours dâ€(TM)un professionnel, jâ€(TM)orienterai mon client vers celui-ci (avocat, notaire, conseil juridique, etc…).
• Devis gratuit.
• Le travail est effectué après signature du devis accepté et signé.
• Tarifs transparents (consultables).

Et là je ne vois pas comment éviter ces changement de caractères
Merci d'avance pour votre aide
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
89
Ce code est-il inclu (en dur) dans du PHP ou bien provient t-il d'une requête de base de données ?
Je pense qu'il faut utiliser une fonction pour applique le bon encodage...
requête de la base de donnée pour tous les textes affichés
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
89
Il faut faire un truc du genre
SELECT CONVERT(mon_champ) using latin1 as monChamp
FROM TABLE

Quand j'ai à faire ça le problème est résolu.
Souvent c'est une fonction utilisée sur la chaine de caractère qui ne sait pas traiter l'encodage qui renvoie cette anomalie.
Si ça persiste.. Faites voir la requete + indiquer la version de mySQL..
version MySQL5.0
pour ma page et requête c'est noté dans l'intitulé de mon message
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
89
Ok. Donc vous avez la réponse. Utiliser cette fonction CONVERT (indiqué plus hat) au niveau de la requete SQL qui renvoie l'anomalie
le problème est que je ne sais pas comment faire
je viens d'essayer mais pas bon
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
89
çà marche çà ?
mysql_query("SET NAMES UTF8");
$query_mentions = "SELECT * FROM texte_acc";

Il faut faire un truc comme j'ai indiqué...
SELECT CONVERT(mon_champ) using latin1 as monChamp
FROM TABLE

Aller vous avez la réponse bon courage
oui cette fonction fonctionne bien mes textes venant de la base de donnée s'affichent correctement mais plus si je passe par l'admin.
Je pense que ça doit venir de ce code qui enregistre les données dans ma base :
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO texte_acc (titre, texte) VALUES (%s, %s)",
                       GetSQLValueString($_POST['titre'], "text"),
                       GetSQLValueString($_POST['texte'], "text"));

  mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
  $Result1 = mysql_query($insertSQL, $Ecrivain_public) or die(mysql_error());

  $insertGoTo = "mentions.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

j'ai tenté
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO texte_acc (titre, texte) VALUES (%s, %s)",
                       GetSQLValueString($_POST['titre'], "text", ENT_COMPAT, 'utf-8'), <--------
                       GetSQLValueString($_POST['texte'], "text", ENT_COMPAT, 'utf-8')); <------

  mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
  $Result1 = mysql_query($insertSQL, $Ecrivain_public) or die(mysql_error());

  $insertGoTo = "mentions.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
Messages postés
34
Date d'inscription
dimanche 6 mars 2011
Statut
Membre
Dernière intervention
19 janvier 2018
1
Bonsoir à tous

Ca avance, encore une petite erreur mais :
voici le texte modifié via l'admin (a comparer avec le premier en intitulé de mon post) :
? Le premier entretien est gratuit ; c?est l?entretien de la naissance de l?idée, la nature de la demande.
? J?exerce ma profession dans le cadre strict de mes compétences, si j?estime qu?une prestation qui m?est soumise requiert le concours d?un professionnel, j?orienterai mon client vers celui-ci (avocat, notaire, conseil juridique, etc?).
? Devis gratuit.
? Le travail est effectué après signature du devis accepté et signé.
? Tarifs transparents (consultables).


Modification apporté à mon code :
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE texte_acc SET titre=%s, texte=%s WHERE id=%s",
                       GetSQLValueString(utf8_decode($_POST['titre']), "text"),
                       GetSQLValueString(utf8_decode($_POST['texte']), "text"),
                       GetSQLValueString($_POST['id'], "int"));

  mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
  $Result1 = mysql_query($updateSQL, $Ecrivain_public) or die(mysql_error());

  $updateGoTo = "/mentions.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));
}

mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
mysql_query("SET NAMES UTF8");
$query_texte_modif = "SELECT * FROM texte_acc";
$texte_modif = mysql_query($query_texte_modif, $Ecrivain_public) or die(mysql_error());
$row_texte_modif = mysql_fetch_assoc($texte_modif);
$totalRows_texte_modif = mysql_num_rows($texte_modif);


en fait ça :
 GetSQLValueString(utf8_decode($_POST['titre']), "text"),
                       GetSQLValueString(utf8_decode($_POST['texte']), "text"),


Mais j'ai des ? à la place des * et des '
est ce que ça pourrait venir de la fonction ?
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);


Merci d'avance pour votre aide
Messages postés
34
Date d'inscription
dimanche 6 mars 2011
Statut
Membre
Dernière intervention
19 janvier 2018
1
ps: a savoir que l'affichage si je fais des modif en direct dans ma base donnée tout est nickel.
Mais pas en passant par l'admin... si ça peut aider
Messages postés
34
Date d'inscription
dimanche 6 mars 2011
Statut
Membre
Dernière intervention
19 janvier 2018
1
Bonjour à tous
je viens encore de passer encore quelques heures (de perdues) pour ma requête.
J'ai téléphoné à mon hébergeur 1&1 qui me dis que j'ai un encodage répété (2 fois) et que pour cela il faut que je fasse un débogage via methode "post"
Je suis allez là :
https://portail.polytechnique.edu/informatique/fr

Mais je n'ai pas réussi car rien compris (trop fatiguée je pense et trop dessus.. je bloque !)
Si quelqu'un pouvais m'aider à comprendre ?????!!!
Merci d'avance

ps: je suis novice en développement alors SVP pas de "essaies la méthode bidule du style machin" parce que cela résulterait encore à passer des heures sur Internet à trouver ce genre de "message codé à demi-mots" pour comprendre ce qu'on tente de me dire ! :$ merci
Messages postés
34
Date d'inscription
dimanche 6 mars 2011
Statut
Membre
Dernière intervention
19 janvier 2018
1
Comme vous dites moderno31 ....J'avais la réponse... :p

TROUVE !!!!
C'était une broutille comme je l'avais soupçonnée.

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE texte_acc SET titre=%s, texte=%s WHERE id=%s",
					   GetSQLValueString($_POST['titre'], "text"),
                       GetSQLValueString($_POST['texte'], "text"),
                       GetSQLValueString($_POST['id'], "int"));
  
  
  mysql_select_db($database_Ecrivain_public, $Ecrivain_public);
  mysql_query("SET NAMES UTF8");
  $Result1 = mysql_query($updateSQL, $Ecrivain_public) or die(mysql_error());

	
  $updateGoTo = "/mentions.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));
}


mysql_query("SET NAMES UTF8"); je ne l'avais pas mis au bon endroit lors de mes essais.... Fatiguée la fille.

bonne journée à tous