Message d'erreur conçernant insértion des données dans bdd

Fermé
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020 - Modifié le 24 oct. 2020 à 21:00
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020 - 24 oct. 2020 à 22:31
Bonjour messieurs: Je vous prie de m'aider à résoudre le problème suivant et je vous remercie d'avance: Message d'erreur: Fatal error: Call to a member function escape_string() on null in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\foruteste\add_topic.php on line 25
- voila les fichiers config.php et add_topic.php
<?php
$link = new mysqli('localhost','root','') or die ('Erreur : '.$link->error );

$link->select_db('topsawa_forum') or die ('Erreur :'.$link->error);
?>

<?php    
 include("espace/verif.php");
 include("config.php"); global $mysqli;
// on teste si le formulaire a été soumis
if (isset ($_POST['go']) && $_POST['go']=='Poster') {
 // on teste la déclaration de nos variables
 if (!isset($_POST['auteur']) || !isset($_POST['titre']) || !isset($_POST['message'])) {
 $erreur = 'Les variables nécessaires au script ne sont pas définies.';
 }
 else {
 // on teste si les variables ne sont pas vides
 if (empty($_POST['auteur']) || empty($_POST['titre']) || empty($_POST['message'])) {
  $erreur = '<b><big><big>Remplir tous les champs.</big></big><big></b>';
 }

 // si tout est bon, on peut commencer l'insertion dans la base
 else {

  // on calcule la date actuelle
   $date = date("Y-m-d H:i:s");



  // préparation de la requête d'insertion (pour la table forum_sujets)
   $sql = 'INSERT INTO forum_sujets VALUES("", "'.$mysqli->escape_string($_POST['auteur']).'", "'.$mysqli->escape_string($_POST['titre']).'", "'.$mysqli->escape_string($_POST['message']).'", "'.$date.'")';


  // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
   $mysqli->query($sql) or die('Erreur SQL !'.$sql.'<br />'.$mysqli->error);

  // on recupère l'id qui vient de s'insérer dans la table forum_sujets
  $id_sujet = $mysqli->insert_id;

  // lancement de la requête d'insertion (pour la table forum_reponses
  $sql = 'INSERT INTO forum_reponses VALUES("", "'.$mysqli->escape_string($_POST['auteur']).'", "'.$mysqli->escape_string($_POST['message']).'", "'.$date.'", "'.$id_sujet.'")';

  // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
   $mysqli->query($sql) or die('Erreur SQL !'.$sql.'<br />'.$mysqli->error);
 
  // on ferme la connexion à la base de données
  //->close();
               mysqli_close($conn); //-> mysqli_close($link); 
  // on redirige vers la page d'accueil
  header('Location: index.php');

  // on termine le script courant
  exit;
 }
 }
}  
?>
<html>
<head>
<title>Insertion d'un nouveau sujet</title><link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript">

function add_icone(ico)
{
 var elem  = document.getElementById("message");
 var tmp  = elem.value;
 var lentmp  = tmp.length;
 var debcurseur = elem.selectionStart;
 var fincurseur = elem.selectionEnd;
 
 // place le code du smiley a la position du curseur
 elem.value = tmp.substring(0, debcurseur) + ico + tmp.substring(fincurseur, lentmp);
 
 // place le curseur juste apres le smiley
 elem.setSelectionRange(debcurseur+ico.length, debcurseur+ico.length);
}

</script>
</head>
<body>
<?php include("header.html"); ?>
<?php include("liens_menu.html"); ?>
<!-- on fait pointer le formulaire vers la page traitant les données -->

<?php
 
// on affiche les erreurs éventuelles
if (isset($erreur)) echo '<br />',$erreur;
?>
<?php

// on affiche le contenu de la zone de texte
if (isset($_POST['envoi']))
{
 $message = $_POST['message'];
 
 $message = str_replace('*)', '<img src="simileys/bravo.gif" />', $message);


 
 echo $message.'<br /><hr /><br />';
}
?>   
<center><b><big>Ajoutez un nouneau sujet maintenant !</big></b>
<br>
<center><b><big>Tous les champs sont obligatoires</big></b>

<table bgcolor="#660000 width="700" border="20" cellpadding="0" cellspacing="5">
<tr><td>
<form action="add_topic.php" method="post">
<span style="font-weight: bold; color: white;">Auteur :</span>
<input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>">
<br><br>
<span style="font-weight: bold; color: white;">Titre :</span> :

<input type="text" name="titre" maxlength="80" size="50" value="<?php if (isset($_POST['titre'])) echo htmlentities(trim($_POST['titre'])); ?>">

<br><br>

<span style="font-weight: bold; color: white;">Message :</span> :
<img src="simileys/bravo.gif" onclick="add_icone('*)');" />
 
<br />
<textarea id="message" name="message" cols="60" rows="10"><?php if (isset($_POST['message'])) echo htmlentities(trim($_POST['message'])); ?></textarea>
</textarea></table>
<br>
Entrer le code <img src="captcha.php">
 <input type="text" name="captcha">
<input type="submit" name="go" value="Poster">
</tr></td>
</form></table></center>

<br>
<?php 
session_start();
  if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"])
  {
    $status = "<p style='color:#FFFFFF; font-size:20px'>
    <span style='background-color:#46ab4a;'>Votre code captcha est correct.</span></p>"; 
  }else{
    $status = "<p style='color:#FFFFFF; font-size:20px'>
    <span style='background-color:#FF0000;'>Le code captcha entré ne correspond pas! Veuillez réessayer.</span></p>";
  }
  echo $status;
?>  
<br>
<?php include("footer.html"); ?>
</body>
</html>   
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 oct. 2020 à 21:03
Bonjour,

Déjà, lorsque tu postes du code sur le forum, il faut que tu y indiques le langage pour avoir la coloration syntaxique.
Merci de lire entièrement le lien suivant avant de nous poster à nouveau du code :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite,
Ton message d'erreur ne concerne pas mysql .. mais une partie de ton code PHP
Je déplace donc ta question dans le bon forum...
Merci d'y faire attention à l'avenir.

Et donc
l'erreur concerne cette ligne
  // préparation de la requête d'insertion (pour la table forum_sujets)
   $sql = 'INSERT INTO forum_sujets VALUES("", "'.$mysqli->escape_string($_POST['auteur']).'", "'.$mysqli->escape_string($_POST['titre']).'", "'.$mysqli->escape_string($_POST['message']).'", "'.$date.'")';


Il t'indique une erreur sur la fonction escape_string en te précisant qu'il ne peut pas le faire sur une valeur NULL.
Tu n'as donc pas envoyé une (ou plusieurs) de tes variables POST
Pour t'aider à corriger ton souci, je t'invite à lire ET à appliquer le contenu de ce lien :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.
1
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020
24 oct. 2020 à 22:31
Je vous remercie beaucoup de l' importance que vous m' avez donner. Je vais voir avec le lien que vous m' avez envoyé et merci beaucoup.
0