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
    Membre habitu�
    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
    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 506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activit� : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    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
    Membre habitu�
    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
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    Membre habitu�
    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
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    Membre habitu�
    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
    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
    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
    Membre habitu�
    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
    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
    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
    Membre habitu�
    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
    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, 16h08
  2. R�ponses: 2
    Dernier message: 09/08/2010, 18h30
  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, 09h25
  4. probl�me pour cr�er une table
    Par zyriuse dans le forum Installation
    R�ponses: 11
    Dernier message: 16/11/2007, 11h26
  5. probl�me pour updater une BD
    Par yoda_style dans le forum ASP
    R�ponses: 6
    Dernier message: 17/03/2005, 10h56

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