NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nefunkční formulář

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Verquido
Tvůrce
Avatar
Verquido:3.10.2015 16:14

Ahoj, chci se zeptat jak mám udělat abych do formuláře něco zadal a kliknul na Submit tlačítko a pak by se to zapsalo do souboru.

Takhle bych to nějak udělal, prosím upozornit na chyby :)

SOUBOR index.php

<form action="zapis.php" method="post">
   <input name="text" type="text"><br>
   <input type="submit" value="Zapsat">
</form>


SOUBOR zapis.php

<?php

if(isset(POST['text']){
    $text = POST_['text'];
    $handle = fopen("zápisnik.php", "r+");
    fwrite("$handle", "$text");
    fclose("$handle");
}

?>

Když do formuláře napíši větu a kliknu na submit tak mě to akorát přehodí na stránku zapis.php a mám tam vypsaný všechny mé příkazy, ale neprovede to požadovanou funkci. Chtěl bych abych klikl na tlačítko, ale pouze se třeba znovu načetla stránka a bylo to tam napsaný. Nechci aby mě to někam přesměrovávalo. potřebuji zůstat na stávající stránce.

Mnohokrát děkuji :)

 
Odpovědět
3.10.2015 16:14
Avatar
Numero
Člen
Avatar
Odpovídá na Verquido
Numero:3.10.2015 16:47

A co to řešení formuláře udělat na té stránce samé stránce, kdy by se nemusela otevírat nová stránka. A jenom by to vypsalo, že to bylo zapsáno... :)

<?php
if(isset($_POST['odeslat']){
    $text = $_POST['text'];
    $handle = fopen("zápisnik.php", "r+");
    fwrite("$handle", "$text");
    fclose("$handle");
    echo "<h3>Zápis proběhl</h3>";
}

?>

<form method="post">
   <input name="text" type="text"><br>
   <input type="submit" name="odeslat" value="Zapsat">
</form>
Nahoru Odpovědět
3.10.2015 16:47
Co si člověk neudělá sám to nemá...
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Numero
Verquido:3.10.2015 17:14

Ano to by bylo super, ale pořád mi to tu dělá nějak paseku.. Třeba tam kde mám ten kód vložený tak sem ještě ani nezmáčkl tlačítko a už je tam vypsáno to echo a je tam půl toho kódu viditelného. A když to chci zapsat tak se nic neděje.

 
Nahoru Odpovědět
3.10.2015 17:14
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Numero
Verquido:3.10.2015 17:28

Jo a když zapisuji HTML taky třeba v té větě tak se to musí nějak speciálně ošetřit? ty tagy jsou totiž také vidět na stránce kde je to napsané v kódu.

 
Nahoru Odpovědět
3.10.2015 17:28
Avatar
Numero
Člen
Avatar
Numero:3.10.2015 17:29
<?php
if(isset($_POST['odeslat'])){
    $text = $_POST['text'];
    $handle = fopen("zapisnik.php", "a+");
    fwrite($handle, $text);
    fclose($handle);
    echo "<h3>Zápis proběhl</h3>";
}

?>

<form method="post">
   <input name="text" type="text"><br>
   <input type="submit" name="odeslat" value="Zapsat">
</form>

Jsem to neodzkoušel :) teď by mi to mělo fungovat. Chyby si měl:

  • " $handle = fopen("zápisnik­.php", "r+");" - Diakritika se do názvu souborů neukláda, aspoň tak jsem byl učen
  • " $handle = fopen("zápisnik­.php", "r+");" - To r+ smazalo předchozí text co tam byl, což si nemyslím, že by bylo požadované řešení. a+ ten text dopisuje viz: http://php.net/…on.fopen.php
  • fwrite("$handle", "$text"); / fclose("$handle"); - Zde nemají být uvozovky, taky to dělá paseku :)
  • Ten textový výsledný soubor / text bude nepřehledný co to zkusit ukládat do databáze?
Nahoru Odpovědět
3.10.2015 17:29
Co si člověk neudělá sám to nemá...
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Numero
Verquido:3.10.2015 17:41

Ano je to nepřehledné, ale já to teď jenom zkouším. učím se PHP tak zkouším všechno :D Teď ukládám do souboru pomocí PHP html tagy a pak bych je chtěl vložit na stránku. myslím že je to jednodušší než s databází. a s tím zas tak moc neumím :D

No tak věty máme za sebou a to chápu.. Ale ten můj byť opravený script mi nejde. Dám ho sem a podívej se na to.. Prostě to pořád nefunguje a dělá to paseku. to budou ty HTML značky v tom. Ale nevím ja je "zneutralizovat".

<div class="add-extended-window-content">
   <form method="post">
    Zde vložte adresu videa: <br>
    <input name="video_url" type="text" placeholder="URL"><br>
    <input type="submit" name="submit" value="PŘIDAT">
    </form>

    <?php

     if(isset($POST_['video_url'] && $_POST['odeslat'])){
         $videoUrl = POST_['video_url'];
         $parts = parse_url($videoUrl);
         parse_str($parts['query'], $query);

         $videoImgUrl = 'https://i.ytimg.com/vi/' . $query['v'] . '/maxresdefault.jpg';
         $videoEmbedUrl = 'https://www.youtube.com/embed/' . $query['v'];

         $write_this = '
         <div class="img-wrapper small_wrap">
         <a class="fancybox fancybox.iframe" rel="video-galery" href="$videoEmbedUrl">
         <img src="$videoImgUrl"></a>
         </div>';

         $handle = fopen("content.php", "a+");

         fwrite($handle, $write_this);

         fclose($handle);

         echo "<h3>Video bylo přidáno.</h3>";
     }
    ?>
</div>

Jde o to že tam uživatel zadá adresu videa a pak se do souboru zapíše html kód pro zobrazení videa a miniatury.

 
Nahoru Odpovědět
3.10.2015 17:41
Avatar
Numero
Člen
Avatar
Numero:3.10.2015 18:04

Na první pohled vidím chybu a to, že PHP skript, který to provádí musí být nad formulářem (řádkově), protože logicky když to ta stránka znova vypíše / nastaví tak tím splní podmínku, že to je nastavené a provede to. Takže v první řadě musí jít PHP nahoru :)

Následně tam máš chybu v PHP podmínce. Nemůžeš se ptát, jestli je

if(isset($POST_['video_url'] && $_POST['odeslat']))
        /* Lepší a funkční varianta:
         * Pokud by si se chtěl ptát na to, jestli tam vložil i to URL videa,
         * tak na to bych napsal další podmínku :)*/
if(isset($_POST['odeslat']))

Dále se pak podívej na "POST_", protože se to nepíše takto, ale takto $_POST

Ve formuláři máš pro tlačítko odeslat name="submit" a v PHPku se ptáš, jestli existuje $_POST['odeslat']

Pak máš blbě zapsané proměné: "$videoEmbedUrl" a "$videoImgUrl" sice ano zapíšou se tam, ale budou se brát "jako text" > ale používá se toto "'..'" kde mezi tečky vložíš proměnou :) pak to PHPko vezme jako PHP proměnou a bude s tím tak pracovat :)

Co jsem zkoušel - poslat tam pár videí tak mi je to sice přechrupe, ale obrázek mi to nevrátí. Nevím proč ten kód si někde našel. Popřípadě napsal k tomu někdo víc. :)

Doufám, že jsem ti aspoň trochu pomohl. Zkus si to po sobě projít a opravit si to :) Snad jsem na nic nezapomenul :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
3.10.2015 18:04
Co si člověk neudělá sám to nemá...
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Numero
Verquido:3.10.2015 18:24

Ahoj, určitě si mi pomohl už dost :) musim taky něco zvládnout sám :) Ten kód mi poslal jeden týpek a funguje. Ale v tom PHP se mi aktivují ty url adresy které mám v těch proměných takže když to dám nad ten form tak ten formulář samotný ani nevidím :D a stejně to nějak nefunguje :/ Ale nějak to musim zkusit pořešit :/

Díky moc :)

 
Nahoru Odpovědět
3.10.2015 18:24
Avatar
Numero
Člen
Avatar
Odpovídá na Verquido
Numero:3.10.2015 18:34

Hele ještě jsem tak googlil a našel zkus změnit:

$videoImgUrl = 'https://i.ytimg.com/vi/' . $query['v'] . '/maxresdefault.jpg';

za:

$videoImgUrl = 'https://i.ytimg.com/vi_webp/' . $query['v'] . '/default.webp';

Jestli se ti nezobrazují ty obrázky. A hele ještě myšlenka, jak se jmenuje ten soubor ve kterém to píšeš? Nemá náhodou jinou koncovku než .php, když píšeš, že ti to píše něco jiného? Mám totiž podezření, že tam máš koncovku .html a proto ti to píše ty "blbosti" :) Když si nenapsal žádnou PHP chybu

Editováno 3.10.2015 18:36
Nahoru Odpovědět
3.10.2015 18:34
Co si člověk neudělá sám to nemá...
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Numero
Verquido:3.10.2015 18:38

Tak sem to už rozhýbal, ale musel sem to přecejen dát do jiného .php souboru v tom indexu to nejde, nevím proč.

Když změním to $videoImgUrl jak si psal tak bude ten obrázek ve špatné kvalitě.
když se podíváš nakonec tak je tam '/maxresdefau­lt.jpg' a to znamená že to bude jakože normální obrázek né přesně ta miniatura :)

A psal sem to v touboru index.php a teď v add_video.php takže tam by problém být neměl :)

 
Nahoru Odpovědět
3.10.2015 18:38
Avatar
Tonda Kozák
Člen
Avatar
Tonda Kozák:3.10.2015 20:19

V tom původním kódu vidím trochu jiné chyby, než na které jsi byl upozorněn.

<div class="add-extended-window-content">
   <form method="post">
    Zde vložte adresu videa: <br>
    <input name="video_url" type="text" placeholder="URL"><br>
    <input type="submit" name="submit" value="PŘIDAT">
    </form>

    <?php

     if(isset($POST_['video_url'] && $_POST['odeslat'])){   // Podmínka by se neměla vyhodnotit, protože tato proměnná neexistuje. Asi jsi myslel: $_POST['video_url']
         $videoUrl = POST_['video_url'];                  // Tohle by ti mělo vyhodit chybu, zas tam má být: $_POST['video_url']
         $parts = parse_url($videoUrl);
         parse_str($parts['query'], $query);

         $videoImgUrl = 'https://i.ytimg.com/vi/' . $query['v'] . '/maxresdefault.jpg';
         $videoEmbedUrl = 'https://www.youtube.com/embed/' . $query['v'];
 
Nahoru Odpovědět
3.10.2015 20:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.