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.

18 réponses


JoHuv
Auteur
Réponse acceptée

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é ;)

Salut,
Pour un mois, vaut mieux le mettre en base de données.

@plus

Pierre

JoHuv
Auteur

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...

JoHuv
Auteur

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.

$pdo->query('S .................

je crois que c'est prepare.
nan ?

JoHuv
Auteur

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:

  • Modifier l'adresse mail a garder: ça recreer une ligne dans ma bdd
  • récupérer ces adresses sauvegardées et les injecter dans mon code de lecture vidéo.
JoHuv
Auteur

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>
JoHuv
Auteur

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

JoHuv
Auteur

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à...

Bah débug juste avant le if ton $adresse et ton $_POST et montre nous le résultat ;)

remplace $adresse = $requete->fetch(); par $adresse = $requete->fetch(PDO::FETCH_ASSOC);

@plus
Pierre

JoHuv
Auteur

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.

JoHuv
Auteur

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

    }
}