Je fait partie d'une WebTV et j'ai codé avec mon peu de connaissance une page multicast Facebook. Le problème, c'est que cette page ne peut être actualisé qu'en local. Je dispose d'une page "formulaire" ou je rentre l'url de mes vidéos et d'une page "lives" vers laquelle sont envoyé les url.
Mon code se présente ainsi :
un bête formulaire html
Le problème est que je patauge pour faire la liaison avec ma BDD qui permettrais à un intervenant de modifier les liens et au présentateur, qui diffuse les images, d'avoir les nouvelles vidéos juste en actualisant son navigateur car jusque là, seul l'animateur peut modifier les url car le code ne fonctionne qu'en local. :/
Merci d'avance pour votre aide.
EDIT : Correction des balises de code pour avoir la coloration syntaxique.
Tu as déjà créé ta bdd ?
Avec quel sgbd ? Mysql ?
Si c'est le cas... il te suffit de coder la connexion à la bdd en PDO ou mysqli.
Puis, pour mettre à jour les liens.. utiliser une requête UPDATE.
<?php
//connexion à la bdd
require_once "cnxBdd.php";
//récupération des variables POST
$lien_facebook1 = !empty($_POST['lien_facebook1']) ? $_POST['lien_facebook1'] : NULL;
$lien_facebook2 = !empty($_POST['lien_facebook2']) ? $_POST['lien_facebook2'] : NULL;
$lien_facebook3 = !empty($_POST['lien_facebook3']) ? $_POST['lien_facebook3'] : NULL;
if(isset($_POST['Valider']){ //si on a cliqué sur le submit
//préparation de la requête et des variables
$sql = "UPDATE matable SET lien_facebook1 = :lien1 ,lien_facebook2= :lien2 ,lien_facebook3 = :lien3";
$datas = array(':lien1'=>$lien_facebook1 , ':lien2'=>$lien_facebook12, ':lien3'=>$lien_facebook3);
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
}
}
?>
<form action="" method="post">
<p style="background-color:black;">
<input type="text" name="lien_facebook1" />
<input type="submit" value="Valider" />
Et dans le fichier lives.php
//connexion à la bdd
require_once "cnxBdd.php";
//on récupère les données de la bdd
$sql = "SELECT * FROM matable ";
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute() ;
$result = $requete->fetch(); //on stocke les données dans un array
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
}
//on boucle sur le résultat de la requete
foreach($result as $K=>$lien){
?>
<iframe src="https://www.facebook.com/plugins/video.php?href=<?php echo $lien; ?>%2F&show_text=1&width=267" width="267" height="476" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>
<?php
}
?>
Ma base de donnée est déjà créée. C'est une base SQL hébergé chez Ionos (ex 1and1).
Jvais étudier tout ça, tester et je te tiens au jus. Merci pour ton aide en tout cas.
Alors voilà, j'ai créer ma table que j'ai apellé tout bêtement "facebook" puis j'ai éditer le code en fonction de ma base et ma table.
Mais j'ai cette erreur :
Parse error: syntax error, unexpected '$sql' (T_VARIABLE) in /homepages/xx/xxxxxxxx/htdocs/xxxxxxxx/xxxxxx/lives/formulaire2.php on line 10
le code du formulaire :
<?php
//connexion à la bdd
require_once "cnxBdd.php";
//récupération des variables POST
$lien_facebook1 = !empty($_POST['lien_facebook1']) ? $_POST['lien_facebook1'] : NULL;
$lien_facebook2 = !empty($_POST['lien_facebook2']) ? $_POST['lien_facebook2'] : NULL;
$lien_facebook3 = !empty($_POST['lien_facebook3']) ? $_POST['lien_facebook3'] : NULL;
if(isset($_POST['Valider']) //si on a cliqué sur le submit
//préparation de la requête et des variables
$sql = "UPDATE facebook SET lien_facebook1 = :lien1 ,lien_facebook2 = :lien2 ,lien_facebook3 = :lien3";
$datas = array(':lien1'=>$lien_facebook1, ':lien2'=>$lien_facebook2, ':lien3'=>$lien_facebook3);
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
}
}
?>
<form action="" method="post">
<p style="background-color:black;">
<input type="text" name="lien_facebook1" />
<input type="submit" value="Valider" />
A savoir, j'ai nommé, dans ma table, 3 ligne : lien_facebook1 lien_facebook2 lien_facebook3
Etant débutant en liaison php/sql, je serait pas étonné d'avoir fait une boulette. Mais ou? J'ai tester pas mal de chose, essayé de comprendre mais je patauge. :/
Yes ! Il manquais une accolade au début et une fermeture de parenthèse également à la fin. ce qui donne :
{if(isset($_POST['Valider']))
Maintenant, j'ai bien mon formulaire avec mes 3 champs (j'ai d'ailleurs rajouter 2 lignes afin d'avoir 3 champs et pas 1).... Mais j'ai cette erreur en retour :
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty Les datas : Array ([:lien1] => [:lien2] => [:lien3] => )
les données concernant ma table "facebook":
interclassement : utf8mb4_unicode_ci
chaque ligne (1, 2 et 3) se composent ainsi :
nom : lien_facebook1 type: varchar(255) interclassement: utf8mb4_unicode_ci et je n'ai rien mis dans ce qu'il reste.
Toutes mes excuses pour le code. Je l'ignorais. :p
Pour le formulaire, tout semble fonctionner au poil.
En revanche, c'est pour ma BDD que ça se corse. Quand je rentre une ou plusieurs url, elles ne s'enregistrent pas dans ma BDD. Je n'ai jamais créer de table SQL de ma vie. Donc, j'avoue que je suis un peu perdu.
Tu l'as créé comment ta bdd ?
Qu'as tu définis comme "champs" dans ta table facebook ?
Pourrais tu nous en faire un export et nous montrer son code sur le forum ?
Il serait bien égalemetn que tu nous montres ton code COMPLET...
Sachant que .. vu que tu fais un UPDATE ... il faut qu'il y ait déjà au moins UNE ligne de créée manuellement dans ta table.... sinon ça ne se mettra pas à jour....
<?php
//connexion à la bdd
require_once "cnxBdd.php";
//récupération des variables POST
$lienfacebook1 = !empty($_POST['lienfacebook1']) ? $_POST['lienfacebook1'] : NULL;
$lienfacebook2 = !empty($_POST['lienfacebook2']) ? $_POST['lienfacebook2'] : NULL;
$lienfacebook3 = !empty($_POST['lienfacebook3']) ? $_POST['lienfacebook3'] : NULL;
if(isset($_POST['Valider'])){ //si on a cliqué sur le submit
//préparation de la requête et des variables
$sql = "UPDATE facebook SET lienfacebook1 = :lien1 ,lienfacebook2 = :lien2 ,lienfacebook3 = :lien3";
$datas = array(':lien1'=>$lienfacebook1, ':lien2'=>$lienfacebook2, ':lien3'=>$lienfacebook3);
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
}
}
?>
<form action="" method="post">
<p style="background-color:black;">
<input type="text" name="lienfacebook1" />
<input type="text" name="lienfacebook2" />
<input type="text" name="lienfacebook3" />
<input type="submit" value="Valider" />
Le code pour le live
<?php
//connexion à la bdd
require_once "cnxBdd.php";
//on récupère les données de la bdd
$sql = "SELECT * FROM facebook ";
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute() ;
$result = $requete->fetch(); //on stocke les données dans un array
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
}
//on boucle sur le résultat de la requete
foreach($result as $K=>$lien){
?>
<iframe src="https://www.facebook.com/plugins/video.php?href=<?php echo $lien; ?>%2F&show_text=1 width="267" height="476" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>
<?php
}
?>
Et le code SQL (auto généré après une série de manip...je l'ai fait via l'éditeur visuel)
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de données : `db722178080`
--
-- --------------------------------------------------------
--
-- Structure de la table `facebook`
--
CREATE TABLE `facebook` (
`facebookid` bigint(20) UNSIGNED NOT NULL,
`lienfacebook1` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`lienfacebook2` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`lienfacebook3` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Index pour les tables exportées
--
--
-- Index pour la table `facebook`
--
ALTER TABLE `facebook`
ADD PRIMARY KEY (`facebookid`),
ADD KEY `lienfacebook1` (`lienfacebook1`(250)),
ADD KEY `lienfacebook2` (`lienfacebook2`(250)),
ADD KEY `lienfacebook3` (`lienfacebook3`(250));
--
-- AUTO_INCREMENT pour les tables exportées
--
--
-- AUTO_INCREMENT pour la table `facebook`
--
ALTER TABLE `facebook`
MODIFY `facebookid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Ta Table est pour l'instant vide... donc tu ne peux pas UPDATE...
Donc.. commence par créer une ligne dans la table
Dans phpmyadmin par exemple.. exécute la requête :
INSERT INTO facebook (facebookid,lienfacebook1,lienfacebook2,lienfacebook3)
VALUES (1,'','','');
Mes liens ne s'actualisent pas du tout. :/
J'ai essayer de mettre des 1 partout via la commande "inert into" comme tu as montré dans ton exemple. La base prend bien en compte les modifs. Mais dès que je rentre un ou plusieurs liens à travers mon formulaire, aucune modif de ma BDD. re :/
J'ai essayé => erreur ligne 18.
J'ai retourné le code (modifier les noms, metre des noms identique partout, faire que sur une ligne)... Rien à faire. Tout ce que je rentre ne va pas dans ma base de donnée! J'ai bien les chiffres qui apparaissent (ceux que j'ai insérés dans ma table comme tu indiquais)... Mais mes bout d'url ne s'intègrent pas via mon formulaire. :/ Je désespère. J'ai même testé un autre code PHP que j'ai modifié comme ci-dessous...mais toujours rien qui s'inscrit dans ma bdd :
<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//Si l'action de validation a été faite
if(isset($_POST["Valider"]))
{
// On récupère les valeurs du formulaire
$lienfacebook1 = $_POST['lienfacebook1'];
$lienfacebook2 = $_POST['lienfacebook2'];
$lienfacebook3 = $_POST['lienfacebook3'];
$lienfacebook4 = $_POST['lienfacebook4'];
$lienfacebook5 = $_POST['lienfacebook5'];
//on vérifie les champs pour voir si ils ne sont pas vides
if (empty($_POST['lienfacebook1']) ) {
$Erreur_lienfacebook1 = '<span class="erreur">Société manquante.</span>';
}
if
(empty($_POST['lienfacebook2']) ) {
$Erreur_lienfacebook2 = '<span class="erreur">lienfacebook2 manquant.</span>';
}
if
(empty($_POST['lienfacebook3']) ) {
$Erreur_lienfacebook3 = '<span class="erreur">lienfacebook3 manquant.</span>';
}
if
(empty($_POST['lienfacebook4']) )
{
$Erreur_lienfacebook4 = '<span class="erreur">lienfacebook4 manquant.</span>';
}
if
(empty($_POST['lienfacebook5']) )
{
$Erreur_lienfacebook5 = '<span class="erreur">lienfacebook5 manquant.</span>';
}
else{
}
// si tout les champs sont remplis (non vides), on continue.
if (($lienfacebook1 != "") && ($lienfacebook2 != "") && ($lienfacebook3 != "") && ($lienfacebook4 != "") && ($lienfacebook5 != "") )
{
// on se connecte au serveur
//connexion à la bdd
require_once "cnxBdd.php";
if (!$link) {
die ('Erreur de connection au serveur '.mysql_error() ) ;
}
// on se connecte à la base de données
$db=mysql_select_db('facebook');
if (!$db)
{
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}
// on enregistre les valeurs
$table=mysql_query("insert into facebook (lienfacebook1, lienfacebook2, lienfacebook3, lienfacebook4, lienfacebook5) values ( '$lienfacebook1' , '$lienfacebook2' , '$lienfacebook3' , '$lienfacebook4' , '$lienfacebook5');");
//Si il y a une erreur
if (!$table) {
die('<p style="color:#ff0000;">Requête invalide :</p>' . mysql_error());
}
else
{
$succes = '<span class="succes">base mise à jour.</span>';
}
}
}
?>
<body>
<form method="post" action="live3.php">
Lien1 : <input name="lienfacebook1" value="<?php echo trim(@$_POST['lienfacebook1']);?>" type="text"/><br>
Lien2 : <input name="lienfacebook2" value="<?php echo trim(@$_POST['lienfacebook2']);?>" type="text"/><br>
Lien3 : <input name="lienfacebook3" value="<?php echo trim(@$_POST['lienfacebook3']);?>" type="text"/><br>
Lien4 : <input name="lienfacebook4" value="<?php echo trim(@$_POST['lienfacebook4']);?>" type="text"/><br>
Lien5 : <input name="lienfacebook5" value="<?php echo trim(@$_POST['lienfacebook5']);?>" type="text"/><br><br>
<input type="submit" value="Envoyer">
<input type="reset" value="Effacer">
</form>
Tu fais n'importe quoi .....
Coller des lignes dans ton code sans comprendre à quoi elles servent est totalement bête et inutile !
Que vient faire ici ta variable $link ?
Que viennent faire ici les instruction mysql_* ?
Je t'ai donné un code en PDO .....qui fonctionne hormis un oubli de parenthèse à la ligne 18 que tu sembles avoir corrigé...
Et puis.. c'est quoi ce "live3.php" ? d'où ça sort ????
Et maintenant tu es passé à 5 liens ???
Au départ 1
Puis 3
Et maintenant 5 ???
Tu vas en ajouter encore beaucoup comme ça ???
A moins que la taille de ta liste ne soit pas fixe ? Et dans ce cas faudra modifier la structure de ta table....
Bref.....
Avant toute chose il serait bien de fixer clairement le cahier des charges.....
Et surtout.. de ne pas mélanger des instructions trouvées au pif sur le net...
Tu mélanges le PDO que je t'ai donné avec du mysqli et du mysql ... un grand n'importe quoi !
Comme je l'ai dit, je suis vraiment novice en php et encore plus en sql.. Mes connaissances se limitent vraiment au langage HTML. Je comprend le principe de fonctionnement du SQL et du php mais c'est tout.
Je suis aller à la recherche d'exemple de code que j'ai tenté d'analyser et d'adapter. j'ai surement fait n'importe quoi (comme un bon débutant) mais j'ai au moins essayé. Pour la question du "live3.php"... En fait, pour faire le test avec mon "nouveau code tout pourris", j'ai créer un fichier "formulaire3.php" qui pointe vers la page qui est censé afficher mes vidéos (qui récupère les URL via la BDD) nommée "live3.php" pour ne pas avoir à toucher au code précédent (qui étaient respectivement nommés "formulaire2" et "live2").
Le fait d'ajouter ou supprimer des liens, je ne pense pas que ça change grand chose de la finalité. Si ce n'est 2 colonnes en plus dans ma BDD et quelques lignes de codes en plus. Bon, pour notre exemple, on va rester sur 3.
On va reprendre dans l'ordre.
- Souhaites tu avoir un nombre de vidéos qui peut être amené à varier ? Oui ou non.
- Quel est le nom du fichier qui contient ton formulaire pour enregistrer les liens dans la bdd ?
- Dans quel fichier PHP (son nom...) souhaites tu réaliser le traitement de ton formulaire pour ENREGISTRER les liens dans la bdd ?
- Dans quel fichier PHP (son nom également...) souhaites tu placer le code qui te permettra de visualiser le contenu de tes liens (live.php je suppose).
J'ai réussi a faire fonctionner la liaison formulaire=>bdd=>live
-Pour répondre à tes questions, le nombre de vidéos peut être variable, oui. Mais on peut aussi le laisser fixe, c'est pas gênant).
Pour reprendre le fil de fonctionnement c'est : formulaire.php => bdd avec la table facebook => live.php pour l'affichage des lives.
-Dans l'idéal, c'est le fichier formulaire lui même qui traite les informations du formulaire.
-Le fichier PHP qui permet de visualiser est bien live.php.
Bon. Voici mon formulaire. J'y ai ajouter un "preview" pour la personne qui va être chargé de mettre à jour les liens :
<style type="text/css">
<!--
body {
color:black;
background-color:black;
}
#alert {
background-color: #fff;
-->
</style>
<?php
//connexion à la bdd
require_once "cnxBdd.php";
//on récupère les données de la bdd
$sql = "SELECT * FROM facebook ";
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute() ;
$result = $requete->fetch(); //on stocke les données dans un array
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
}
//on boucle sur le résultat de la requete
foreach($result as $K=>$lien){
?>
<iframe src="https://www.facebook.com/plugins/video.php?href=<?php echo $lien; ?>%2F&show_text="0" width="267" height="476" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></br><input type="button" onclick="refresh()" value="Rafraichir"/></iframe>
<?php
}
?>
</body>
</html>
Le dernier point qu'il me reste à résoudre, c'est comment garder en mémoire (et ça je n'y avais pas pensé) les liens si un ou plusieurs champs restent vide. Je pense qu'avec if/else je pourrait résoudre ça si je ne m'abuse. En disant "si le champ est vide, ne pas mettre à jour...si le champ est plein, mettre à jour".
Bref, encore un peu de boulot en perspective. En tout cas, un ENORME merci pour ton aide précieuse!!
Jvais étudier tout ça, tester et je te tiens au jus. Merci pour ton aide en tout cas.