Diskuze: Nefunkční formulář
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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>
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.
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.
<?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:
Ano je to nepřehledné, ale já to teď jenom zkouším. učím se PHP tak zkouším všechno 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
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.
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
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 a stejně to nějak nefunguje :/ Ale nějak to musim zkusit pořešit :/
Díky moc
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
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 '/maxresdefault.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
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'];
Zobrazeno 11 zpráv z 11.