Un multicast via base de donnée

kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019
- Modifié le 19 févr. 2019 à 23:33
jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
- 23 févr. 2019 à 07:59
Bonjour,

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
<form action="lives.php" method="post">
<p style="background-color:black;">
    <input type="text" name="lien_facebook1" /> 
<input type="submit" value="Valider" />
(suivi des liens 2/3, etc...)

Suivi d'une page en php qui récupère mes liens de la manière suivante :

<iframe src="https://www.facebook.com/plugins/video.php?href=<?php echo $_POST['lien_facebook1']; ?>%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>
(idem pour les liens 2/3, etc...)

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.

3 réponses

jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
356
19 févr. 2019 à 23:42
Bonjour,

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.

Par exemple:
<?php
// fichier cnxBdd.php
try{
$bdd =new PDO('mysql:host=localhost; dbname=mabdd; charset=utf8', 'user', 'password');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}


Le 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 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
}
?>


Enfin... un truc du genre...


1
kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019

21 févr. 2019 à 01:51
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.
0
kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019

Modifié le 21 févr. 2019 à 22:31
Bonsoir,

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. :/
0
jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
356
21 févr. 2019 à 21:10
Manque une accolade au if juste avant.
0
kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019
> jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022

21 févr. 2019 à 21:58
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.
0
jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
356
21 févr. 2019 à 22:33
Déjà... merci de poster ton code en précisant le LANGAGE dans les balises de code (pour avoir la coloration syntaxique comme dans le code que je t'ai édité ! )
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite.. non.. l'accolade ne se place pas AVANT le IF .. mais APRES
if(isset($_POST['Valider'])) {


Et pour finir.... sans voir ton "nouveau code" .. impossible de te répondre !
0
kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019
> jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022

21 févr. 2019 à 23:08
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.
0
jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
356 > kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019

21 févr. 2019 à 23:20
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....
0
kris08700
Messages postés
11
Date d'inscription
mardi 19 février 2019
Statut
Membre
Dernière intervention
23 février 2019

23 févr. 2019 à 02:40
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 :

<?php
//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
require_once "cnxBdd.php";

//Preview
echo '<iframe src="https://www.facebook.com/plugins/video.php?href='.$_POST['lienfacebook1'].'%2F&show_text="1" width="150" height="328" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>';
echo '<iframe src="https://www.facebook.com/plugins/video.php?href='.$_POST['lienfacebook2'].'%2F&show_text="1" width="150" height="328" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>';
echo '<iframe src="https://www.facebook.com/plugins/video.php?href='.$_POST['lienfacebook3'].'%2F&show_text="1" width="150" height="328" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>';
echo '<iframe src="https://www.facebook.com/plugins/video.php?href='.$_POST['lienfacebook4'].'%2F&show_text="1" width="150" height="328" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>';
echo '<iframe src="https://www.facebook.com/plugins/video.php?href='.$_POST['lienfacebook5'].'%2F&show_text="1" width="150" height="328" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" autoplay="0" autostart="0"></iframe>';


//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;
$lienfacebook4 = !empty($_POST['lienfacebook4']) ? $_POST['lienfacebook4'] : NULL;
$lienfacebook5 = !empty($_POST['lienfacebook5']) ? $_POST['lienfacebook5'] : NULL;
    
//si on a cliqué sur le submit
if(isset($_POST['Valider']))
{ 

$sql = "SELECT * from facebook WHERE lienfacebook1=1";

$sql = "UPDATE facebook  SET  lienfacebook1 = '$lienfacebook1' ,lienfacebook2= '$lienfacebook2' ,lienfacebook3 = '$lienfacebook3' ,lienfacebook4= '$lienfacebook4' ,lienfacebook5 = '$lienfacebook5'";

//on ajoute une barre de séparation 
  echo $sql ."<hr>";

  //préparation de la requête et des variables
  
  
  $datas = array(':lien1'=>$lienfacebook1 , ':lien2'=>$lienfacebook2, ':lien3'=>$lienfacebook3);

 //Execution de la requete
 try{
  $requete = $bdd -> prepare($sql) ;
  $res = $requete->execute($datas) ;
  if(!$res){
    echo "<br>Erreur lors de la mise à jour !";
    echo "<br>La requete : ".$sql;
    echo "<br>Les datas : " ;
    print_r($datas);
  }else{
    echo "<br>Mise à jour réussie .."; 
  }
 }catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
   print_r($datas);
 }
}
?>
   
<form action="" method="post">

	<label for="lienfacebook1">Lien 1: </label><input type="text" name="lienfacebook1" /> <!--// <label for="ville1">ville 1: </label><input type="text" name="ville1" /> //--> </br>
	<label for="lienfacebook2">Lien 2: </label><input type="text" name="lienfacebook2" /> <!--//<label for="ville2">ville 2: </label><input type="text" name="ville2" />//--></br>
	<label for="lienfacebook3">Lien 3: </label><input type="text" name="lienfacebook3" /> <!--//<label for="ville3">ville 3: </label><input type="text" name="ville3" />//--></br>
	<label for="lienfacebook4">Lien 4: </label><input type="text" name="lienfacebook4" /> <!--//<label for="ville4">ville 4: </label><input type="text" name="ville4" />//--></br>
	<label for="lienfacebook5">Lien 5: </label><input type="text" name="lienfacebook5" /> <!--//<label for="ville5">ville 5: </label><input type="text" name="ville5" />//--></br>
  <input type="hidden" name="Valider" value="ok"/> 
  <input type="submit" value="Valider" />
</form>


Et le code pour mon fichier live.php

<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!!
0
jordane45
Messages postés
35415
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
356
23 févr. 2019 à 07:59
Il ne faut pas laisser vide... mais remettre, par défaut, les liens qui sont déjà en BDD...

Pour ça, il suffit d'éxécuter la requête que tu as déjà prévu
<?php

//le début de ton code  php ( avec le traitement du submit ....)



// puis :
$sql = "SELECT * from facebook WHERE lienfacebook1=1";
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();
 }


?>
<form action="" method="post">
  <?php
    $i = 0;
    foreach( $result as $k=>$lien){
       $i++;
       echo "<label for='$k'>Lien $i:</label>
              <input type='text' name='$k' value='$lien' />";
     }
?>	
  <input type="hidden" name="Valider" value="ok"/> 
  <input type="submit" value="Valider" />
</form>

?>
0