Bonjour,
je cherche une solution pour garder une adresse de video posée par un formulaire. J'aimerais ne pas telecharger la vidéo et ne pas avoir besoin de changer le code php a chaque fois que je partage une vidéo privée sur mon site.
J'ai actuellement ceci:
<?php require CORE.DS.'videoadmin.php'; ?>
<video width="320" height="240" controls>
<source src="<?php echo $_POST['adresseVideo']; ?>" type="video/mp4">
Votre navigateur ne supporte pas la balise vidéo.
</video><p>Actualité vidéo</p>
et
<form class="form-inline" action="" method="POST">
<div class="form-group">
<p class="form-control-static">Adresse de la video</p>
</div>
<div class="form-group mx-sm-3">
<label for="" class="sr-only">adress</label>
<input type="text" name="adresseVideo" class="form-control" id="inputAdresse" placeholder="http://*serveur*:yyyy/dossier/dossier">
</div>
<button type="submit" class="btn btn-success">Envoyer</button>
</div>
</form>
Je ne sais pas comment je peux garder "$_POST['adresseVideo']"
jusqu'à ce que je le remplace avec mon formulaire (un mois après par exemple) et qu'il soit visible par tout ceux qui viennent sur mon site.
Quelqu'un aurait-il un solution ? Merci à vous.
Puisque je m'acharne dans l'erreur, j'ai recommencé depuis le début.
J'ai pensé differemment et ai prit vos commentaires en considération.
$requete = $pdo->prepare('SELECT * FROM medias WHERE name = "adresseDeLaVideo" LIMIT 1'); //recupération de la base de donnée
$requete->execute();
$adresse = $requete->fetch(PDO::FETCH_ASSOC);
//var_dump($adresse);
if($adresse['file'] == NULL){ // si il n'y a aucune adresse, la creer.
$req = $pdo->prepare('INSERT INTO medias(name, file, type) VALUES(:name, :file, :type)');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo'],
'type' => 'http'
));
echo 'l\'adresse de la vidéo est en mémoire.';
}else{
if($adresse['file'] !== $_POST['adresseVideo']){ // si une adresse existe et qui est différente, updater.
$req = $pdo->prepare('UPDATE medias SET file = :file where name = :name');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo a été changée.';
}else{
echo 'Cette adresse à déjà été enregistrée.';
}
}
?>
<video width="320" height="240" controls>
<source src="<?php echo $adresse['file']; ?>" type="video/mp4">
Votre navigateur ne supporte pas la balise vidéo.
</video><p>Actualité vidéo</p>
<?php
}
}
?>
J'a résolu mon problème !!!! enfin, normalement. Après les tests, c'est bon. Mais je vais modifier un peu pour "sécuriser" plus.
De cette façon, en validant une adresse http, le code regarde si une adresse existe, sinon il la créé. Si une adresse existe, il vérifie ensuite qu'il ne s'agit pas de la même adresse que l'on envoie.
Plus tard, je ferais en sorte qu'il s'agisse bien d'une adresse provenant de mon serveur et qu'il s'agit bien d'une vidéo.
Merci encore du temps que vous avez passé à m'aider.
Salut,
Tu peux utiliser les sessions PHP afin de persister de manière temporaire ta variable ($_SESSION
). Il y a des ressources sur le sujet sur le site, je te laisse creuser de ton côté ;)
En effet, en base de donnée je pense. 4faut juste que je trouve comment faire au plus simple. Merci à vous
Après tu peut tout enregistrer en BDD et mettre un champ etat
ou si il est à 1
la vidéo est visible par tout le monde 0
seulement par les admin...
Bonjour,
Je poursuis l'idée d'un enregistremant en bdd. Seulement, mon niveau en php est encore très faible
et je nage...
Voici ce que j'ai fait:
<form class="form-inline" action="" method="POST">
<div class="form-group">
<p class="form-control-static"> Modifier la vidéo dans "actualités" </p>
</div>
<div class="form-group mx-xl-3">
<label for="" class="sr-only">adress</label>
<input type="text" name="adresseVideo" class="form-control" id="inputAdresse" placeholder="http://*serveur*:yyyy/dossier/dossier">
</div>
<button type="submit" class="btn btn-success">Envoyer</button>
</div>
</form>
//-------------------------------------------------------------------------------------
//verifier si l'utilisateur est connecté et une adresse vidéo est enregistrée en base de donnée.
if(!isset($_SESSION['auth'])){
header('Location: http://localhost:8080/sitefamillehuvelledervogne%20-%20bootstrap/layout/default');
}else{
$name = 'adresseVideo';
require_once CORE.DS.'db.php';
// Est-ce qu'une adresseVideo à déjà été enregistrée ?
$query = $pdo->query('SELECT * FROM medias WHERE name="'.$name.'"'); //recupération de la base de donnée
$query->execute(array(
'name' => $name,
'type' => $_POST['adresseVideo']
));
$exist = $query->fetch(); //je regarde si elle existe
if(!$exist){ // si l'adresse existe déjà il faut modifier l' "adresseVideo"
$req = $pdo->prepare('UPDATE $name SET type = :type');
$req->execute(array(
'type' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo à été changée.';
}else{ // sinon, la creer
$req = $pdo->prepare('INSERT INTO medias(name, type) VALUES(:name, :type)');
$req->execute(array(
'name' => $name,
'type' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo est en mémoire.';
}
}
$adresse = 'SELECT medias FROM adresseVideo WHERE type';
?>
/--------------------------------------------------------------------------------------------
<video width="320" height="240" controls>
<source src="<?php echo "$adresse"; ?>" type="video/mp4">
Votre navigateur ne supporte pas la balise vidéo.
</video><p>Actualité vidéo</p>
J'ai plein d'erreur, mais ne l'ai trouve pas... Quelqu'un peut m'aider ?
Merci à tous.
J'ai des lignes qui sont apparues en bdd (avec "prepare" aussi donc les deux fonctionnent ou mon code marche encore pire que prévu).
je pense avoir un pb pour:
Bon, on dirais que j'avance:
$name = 'AdresseDeLaVideo';
require_once CORE.DS.'db.php';
// Est-ce qu'une adresseVideo à déjà été enregistrée ?
$query = $pdo->prepare('SELECT * FROM medias WHERE name = :name AND type = :type'); //recupération de la base de donnée
$query->execute(array(
'name' => $name,
'type' => $_POST['adresseVideo']
));
$exist = $query->fetch();
if(!$exist){ // si l'adresse existe déjà il faut modifier le "type".
$req = $pdo->prepare('UPDATE medias SET type = :type WHERE name = :name');
$req->execute(array(
'name' => $name,
'type' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo a été changée.';
}else{ // sinon, la creer
$req = $pdo->prepare('INSERT INTO medias(name, type) VALUES(:name, :type)');
$req->execute(array(
'name' => $name,
'type' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo est en mémoire.';
}
}
Cette fois, je ne comprends pas comment la ressortir de la bdd
dans mon bout de code source
<video width="320" height="240" controls>
<source src="<?php echo "$adresse"; ?>" type="video/mp4">
Votre navigateur ne supporte pas la balise vidéo.
</video><p>Actualité vidéo</p>
Est-ce que quelqu'un peu me corriger ? pas violemment hein ! pas de ça ici ^^
En fait, je créé une entrée a chaque fois au lieu de modifier la ligne que je veux (qui se nomme "adresseDeLaVideo")
<?php require CORE.DS.'videoadmin.php';
//verifier si l'utilisateur est enregistré.
if(!isset($_SESSION['auth'])){
header('Location: http://localhost:8080//default');
}else{
if(isset($_POST['adresseVideo'])){
require_once CORE.DS.'db.php';
// Est-ce qu'une adresseVideo à déjà été enregistrée ?
$requete = $pdo->prepare('SELECT type FROM medias WHEREname = "AdresseDeLaVideo"'); //recupération de la base de donnée
$requete->execute(array());
$adresse = $requete->fetch();
if($adresse['file'] == 'adresseVideo'){ //si le "dossier" existe,
if($adresse['file'] == $_POST['adresseVideo']){ // si l'adresse existe déjà il faut modifier l'id adresseVideo
$req = $pdo->prepare('UPDATE medias SET file = :file where name = "adresseDeLaVideo"');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo a été changée.';
}else{ echo 'Une erreur est survenue, merci de recommencer.';}
}else{ // sinon, la creer
$req = $pdo->prepare('INSERT INTO medias(name, file, type) VALUES(:name, :file, :type)');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo'],
'type' => 'http'
));
echo 'l\'adresse de la vidéo est en mémoire.';
}
?>
<video width="320" height="240" controls>
<source src="<?php echo '.$adresse["type"].'; ?>" type="video/mp4">
Votre navigateur ne supporte pas la balise vidéo.
</video><p>Actualité vidéo</p>
<?php
}
}
?>
Salut oui le soucis est quand tu sélectionnes :
$requete = $pdo->prepare('SELECT type FROM medias WHEREname = "AdresseDeLaVideo"'); //recupération de la base de donnée
$requete->execute(array());
$adresse = $requete->fetch();
Change par quelque chose du genre
$requete = $pdo->prepare('SELECT type FROM medias WHERE name= "AdresseDeLaVideo" LIMIT 1');
$requete->execute();
$adresse = $requete->fetch();
plus exactement:
$requete = $pdo->prepare("SELECT type FROM medias WHERE name= 'AdresseDeLaVideo'LIMIT 1");
$requete->execute();
$adresse = $requete->fetch();
sinon, php laisse pas passer ;)
@plus
Pierre
Merci a vous deux. J'ai modifié et ça m'a eclairé sur l' erreur.
Ca me dit que je ne peux pas utiliser utiliser l'objet de type stdClass comme tableau d'objet aux lignes de confitions "IF".
Je modifie mais je ne comprends pas comment faire autrement.
$requete = $pdo->prepare('SELECT * FROM medias WHERE name = "adresseDeLaVideo" LIMIT 1'); //recupération de la base de donnée
$requete->execute();
$adresse = $requete->fetch();
if($adresse['file'] == $_POST['adresseVideo']){ // si l'adresse existe déjà il faut modifier l'id adresseVideo
$req = $pdo->prepare('UPDATE medias SET file = :file where name = "adresseDeLaVideo"');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo']
));
"File" est le "nom du dossier" dans sql qui contient l'adresse.
Je dois modifier ceci.
if($adresse['file'] == $_POST['adresseVideo']){
En fait, quand je supprime l'adresse de la vidéo dans la base, le code me créé la ligne. C'est quand j'update que l'erreur s'affiche.
Donc l'erreur est bien là...
remplace $adresse = $requete->fetch(); par $adresse = $requete->fetch(PDO::FETCH_ASSOC);
@plus
Pierre
bonjour à vous deux.
Alors, j'ai modifié selon le conseil de Pierrot. Visiblement, ça fonctionne. J'ai quand même fait un var dump:
array (size=5)
'id' => string '46' (length=2)
'name' => string 'AdresseDeLaVideo' (length=16)
'file' => string 'http://192.168**/**/Kermess%2016-06-17/MOV031.mp4' (length=95)
'post_id' => null
'type' => string 'http' (length=4)
Donc, nickel pour ça.
Par contre, quand je dois modifier (update) ça enregistre des nouvelles entrées et en plus, les double...
J'ai une adresse => j'update=> j'en ai 3 : l'initiale, puis deux nouvelles.
Je dois avoir une boucle...
A ta place je remetterai déjà à 0 la BDD ensuite tu peux mettre ton name en UNIQUE (si il est unique).
Peux-tu nous remettre ton code mis à jour.
Mon name en unique ?
Ce que j'ai fait et où il n'y a pas de message d'erreur:
$requete = $pdo->prepare('SELECT * FROM medias WHERE name = "adresseDeLaVideo" LIMIT 1'); //recupération de la base de donnée
$requete->execute();
$adresse = $requete->fetch(PDO::FETCH_ASSOC);
if($adresse['file'] == $_POST['adresseVideo']){ // si l'adresse existe déjà il faut modifier le FILE adresseVideo
$req = $pdo->prepare('INSERT INTO medias(name, file, type) VALUES(:name, :file, :type)');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo'],
'type' => 'http'
));
echo 'l\'adresse de la vidéo est en mémoire.';
}else{ // sinon, la creer
$req = $pdo->prepare('UPDATE medias SET file = :file where name = "adresseDeLaVideo"');
$req->execute(array(
'name' => $name,
'file' => $_POST['adresseVideo']
));
echo 'l\'adresse de la vidéo a été changée.';
}
?>
<video width="320" height="240" controls>
<source src="<?php echo '.$adresse["file"].'; ?>" type="video/mp4">
Votre navigateur ne supporte pas la balise vidéo.
</video><p>Actualité vidéo</p>
<?php
}
}