IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

(erreur de syntaxe?) pour UPDATER une table


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    -
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut (erreur de syntaxe?) pour UPDATER une table
    Bonjour,

    J'espère être au bonne endroit pour poser ma question! Il y a beaucoup trop de sections et sous-sections Je suis nouveau ici et débute en programmation web.

    Je fais un site où j'aimerais avoir une page administrative pour modifier le contenu de mes pages. Elles sont stockées dans une base de donnée MariaDB (mySQL). on dit un site dynamique je crois? J'arrive déjà afficher le contenu de ma table grâce à ce code dans ma page d'accueil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <div id="corps">
     
    	<?php
    		$reponse = $bdd->prepare('SELECT * FROM pages WHERE adresse = ?');
    		$reponse->execute(array($page));
     
    		$donnees = $reponse->fetch();
    	?>
     
    	<h1><?php echo htmlspecialchars($donnees['titre']); ?></h1>
     
    	<p><?php echo htmlspecialchars($donnees['contenu']); ?></p>
     
    	<?php
    		$reponse->CloseCursor();
    	?>
     
    </div>
    J'ai fait une page pour modifier le contenu de ma table grâce à un formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <div id="corps">
     
    	<?php
    		$reponse = $bdd->query('SELECT * FROM pages WHERE adresse = \'accueil.php\'');
    		$donnees = $reponse->fetch();	
     
    		$titre = $donnees['titre'];
    		$contenu = $donnees['contenu'];
     
    		$reponse->CloseCursor();
    	?>
     
    	<form action="modifierpage_db.php" method="post">
     
    		<p><label for="titre">Titre: </label><input type="text" name="titre" id="titre" value="<?php echo $titre; ?>" /></p>
     
    		<p><label for="contenu">Contenu: </label><textarea name="contenu" id="contenu" rows="10" cols="50" ><?php echo $contenu; ?></textarea></p>
     
    		<p><input type="submit" value="Envoyer"></p>
    	</form>
     
    </div>
    Et voici modifierpage_db.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    	$reponse = $bdd->prepare('UPDATE pages SET titre = :nvtitre, contenu = :nvcontenu WHERE adresse = \'accueil.php\'');
    	$reponse->execute(array(
    		'nvtitre' => $_POST['titre'], 
    		'nvcontenu' => $_POST['contenu']
    	));
    	$reponse->closeCursor();
     
    	echo 'La page à bien été modifiée';
    	header('Location: index.php?page=modifierpage.php');
     
    ?>
    Malheureusement, il ne modifie rien et je commence à sécher sur mon problème. J'ai mis des marqueurs et j'en ai conclu que ça plantais sur les premières lignes. Quelqu'un à une idée de ce que je fais faux?

    Merci pour vos futurs réponses
    Salutation

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 593
    Points
    12 593
    Par défaut
    Bonjour,
    Je ne pense pas que cela changera grand chose, mais essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reponse = $bdd->prepare("UPDATE pages SET titre = ?, contenu = ? WHERE adresse = 'accueil.php' ");
    	$reponse->execute([$_POST['titre'],$_POST['contenu'] ] );
    Maintenant avez-vous un message d'erreur ?

  3. #3
    Candidat au Club
    Homme Profil pro
    -
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour la réponse. Je viens d'essayer de copier le code et non il ne me génère pas d'erreur. Je me demande si je ne gère pas mal les erreur. J'ai crée un nouveau poste car je me demande la meilleurs solution pour me connecter à une base de donnée: http://www.developpez.net/forums/d15...nee-plusieurs/

    Car j'ai fait comme ça mon fichier index.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <body>
     
    	<?php
    		try{
    			include("connectionmysql.php");			
     
    			include("header.php");
     
    			include("menu.php");
     
    			$page = $_GET['page'];
    			if (!empty($page)) {
    				include($page);
    			}
    			else {
    				$page = 'accueil.php';
    				include('accueil.php');
    			}
     
    			include("footer.php");
     
    		}
    		catch(Exception $e){
    			die('Erreur : ' . $e->getMessage());		
    		}
    	?>
     
    </body>
    Merci et salutation

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    La source du problème :il manque des ":" devant les noms des paramètres dans l'exécution de la requête.
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $reponse = $bdd->prepare('UPDATE pages SET titre = :nvtitre, contenu = :nvcontenu WHERE adresse = \'accueil.php\'');
    $reponse->execute(array(
    	':nvtitre' => $_POST['titre'], 
    	':nvcontenu' => $_POST['contenu']
    ));
    Comme le code de MaitrePylos utilise des marqueurs à la place des paramètres nommés, ça supprime le problème
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Candidat au Club
    Homme Profil pro
    -
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je me suis inspiré d'un tuto pour le faire et il n'y a pas les :, pourquoi?

    En rajoutant les :, j'ai toujours le même problème, une page blanche. Pourquoi il me crache pas d'erreur? Y-a-t-il une solution pour avoir des infromations d'erreur?

    Merci

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux activer les exceptions à la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    PDO - Gestion des erreurs

    Quant au tuto de nos amis d'OC, ben... a priori, il y a une coquille dedans La documentation officielle est assez claire :
    Pour une requête préparée utilisant des marqueurs nommés, ce sera le nom du paramètre sous la forme :name
    Manuel - PDOStatement::execute
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Candidat au Club
    Homme Profil pro
    -
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Dans mon fichier connectionmysql.php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'user', 'password', $pdo_options);
    ?>
    j'ai déjà activé la remontée des erreurs, juste? Ou il faudrait que j'insère ce code à la suite? A mon avis c'est redondant. Par contre ce code serait identique donc valide?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    	$bdd = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'user', 'password');
    	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    ?>

    J'ai toujours ce problème avec une belle page blanche. Je vais résumer et copier les dernier fichier que j'ai. L'index.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    	try{
    		include("connectionmysql.php");
    ?>
     
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
    	<link rel="stylesheet" type="text/css" href="design.css" media="all"/>
    	<title>TITRE</title>
    </head>
     
    <body>
    	<?php	
    			include("header.php");
     
    			include("menu.php");
     
    			$page = $_GET['page'];
    			if (!empty($page)) {
    				include($page);
    			}
    			else {
    				$page = 'accueil.php';
    				include('accueil.php');
    			}
     
    			include("footer.php");
    	?>
    </body>
     
     
    </html>
     
    <?php
    	}
    	catch(Exception $e){
    		include("404.php");
    		die('Erreur : ' . $e->getMessage());		
    	}
    ?>
    Dans catch, théoriquement je n'ai pas besoin d'inclure la page 404, vu qu'il va afficher l'erreur de php? Ou alors faire une page pour avoir une belle mise en page et y inclure le die(...);!! (Je commence à mieux visualisé en postant mes problèmes). Mais revenons sur mon problème sur le formulaire pour modifier ma page, voici le contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <div id="corps">
     
    	<?php
    		$reponse = $bdd->query('SELECT * FROM pages WHERE adresse = \'accueil.php\'');
    		$donnees = $reponse->fetch();	
     
    		$titre = htmlspecialchars($donnees['titre']);
    		$contenu = htmlspecialchars($donnees['contenu']);
     
    		$reponse->closeCursor();
    	?>
     
    	<form action="modifierpage_db.php" method="post">
     
    		<p><label for="titre">Titre: </label><input type="text" name="titre" id="titre" value="<?php echo $titre; ?>" /></p>
     
    		<p><label for="contenu">Contenu: </label><textarea name="contenu" id="contenu" rows="10" cols="50" ><?php echo $contenu; ?></textarea></p>
     
    		<p><input type="submit" value="Envoyer" /></p>
    	</form>
     
    </div>
    Puis le fichier pour l'action (modifierpage_db.php), j'y ai mis des pointeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
    echo 'p1';
    	<$reponse = $bdd->prepare('UPDATE pages SET (titre = :nvtitre, contenu = :nvcontenu) WHERE adresse = \'accueil.php\'');
    	$reponse->execute(array(
    		':nvtitre' => $_POST['titre'], 
    		':nvcontenu' => $_POST['contenu']
    	));
    echo 'p2';
     
    	$reponse->closeCursor();
     
    	echo 'La page à bien été modifiée';
    	header('Location: index.php?page=modifierpage.php');
     
    ?>
    Résultat donc une page blanche et même pas le pointeur 'p1' passe. Dois-je en conclure que que mon code php ne s’exécute pas? AieAie, je sèche grave, j'ai l'impression d'avoir vérifier chaque caractère sans trouver mon problème.
    Merci encore pour votre aide.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as un < qui se ballade ligne 4.

    Et tu ne peux pas avoir un echo et une redirection en même temps, c'est soit l'un soit l'autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'La page à bien été modifiée';
    	header('Location: index.php?page=modifierpage.php');
    Sinon pousse ton debugage jusqu'au bout.
    Fait par exemple uniquement
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    echo 'p1';
    	$reponse = $bdd->prepare('UPDATE pages SET (titre = :nvtitre, contenu = :nvcontenu) WHERE adresse = \'accueil.php\'');
    echo 'p2';
    etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Candidat au Club
    Homme Profil pro
    -
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse.
    C'est vrais je devais mettre plus de marquer si je voulais bien voir ou ça plante. Je l'ai donc fait

    Le < n'avait rien à faire là. Une fois corrigé le problème est toujours là. Il affiche seulement le pointeur 1 donc ne passe pas la requête SQL.

    Je me pose la question si je suis toujours bien connecté sur la base de donnée. Quand on passe par un formulaire, sur la page action=, il faut se reconnecter à la base? ou la connexion est restée enregistrée?

    Je commence à être vraiment bloqué et je sais plus comment faire pour modifier ma table SQL.

    Merci pour votre aide

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dés que tu termines un script, la connexion est détruite.

    Tu devrais vraiment consulter tes logs PHP et/ou t'assurer que ton serveur affiche toutes les erreurs PHP.
    Tu perds du temps inutilement en débugage aveugle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Candidat au Club
    Homme Profil pro
    -
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup sabotage. Depuis que j'ai activé les logs, c'est beaucoup plus facile pour résoudre les problèmes.

    Alors mon problème venait du faite que je ne me reconnectais pas à la BD donc il ne connaissait pas ma variable $bdd. J'ai rajouté les fameuses lignes pour la connexion et voilà le code juste:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    	try{
    		include("connectionmysql.php");
     
    		$reponse = $bdd->prepare('UPDATE pages SET titre = :nvtitre, contenu = :nvcontenu WHERE adresse = \'accueil.php\'');
    		$reponse->execute(array(
    			':nvtitre' => htmlspecialchars($_POST['titre']),
    			':nvcontenu' => htmlspecialchars($_POST['contenu'])
    		));
     
    		$reponse->closeCursor();
     
    		echo 'La page à bien été modifiée';
    		header('Location: index.php?page=modifierpage.php');
     
    	}
    	catch(Exception $e){
    		include("404.php");
    		die('Erreur : ' . $e->getMessage());		
    	}
     
    ?>

    Tous fonctionne comme je veux, merci pour vos aides. Je vais pouvoir reprendre mon apprentissage et faire évoluer mon code! Prochaine étape les fonctions pour le simplifier.

    Salutation à tous

Discussions similaires

  1. Problème pour récupérer une table
    Par Flow_75 dans le forum Débuter
    Réponses: 4
    Dernier message: 01/02/2013, 17h08
  2. Réponses: 2
    Dernier message: 09/08/2010, 19h30
  3. problème pour separer une table avec une procedure
    Par mathieu38 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 09/04/2009, 10h25
  4. problème pour créer une table
    Par zyriuse dans le forum Installation
    Réponses: 11
    Dernier message: 16/11/2007, 12h26
  5. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo