Avatar billede ohhelpme Nybegynder
13. marts 2009 - 21:17 Der er 9 kommentarer og
2 løsninger

if...

Hej,
Nogle der kender en if funktion der skal kunne tjekke om feltet url har følgene "http://www.youtube.com/watch?v=" men der skal kunne stå noget bagefter fx. "JsFnIpMp5"

Alt så noget ligne der her:

if (ereg("www.youtube.com/watch?v=[A-z0-9]", $url)) {

$fejl[] = "Ugyldig url";

}

Har fået af vide et andet sted at man kan bruge dette:

if (substr_count($url,"youtube.com/watch?v=")>0) {

men kan ikke rigtigt få det til at du...

Hele creat.php filen ser således ud:

<?php
session_start();

if(!empty($_SESSION['log']))
{
}
else
{
header("location: /");
}
?>
<?
include("top.php");
include("config.php");

    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    $navn = $_POST["navn"];
    $url = $_POST["url"];
    $beskrivelse = $_POST["beskrivelse"];

    if ($navn) {

      if (!ereg("[A-z0-9]", $navn)) {
        $fejl[] = "Navnet er ugyldigt";
          }
    }
    if ($url) {
      if (substr_count($url,"youtube.com/watch?v=")>0) {
        $fejl[] = "Ugyldig url";

      }

      if (mysql_num_rows(mysql_query("SELECT * FROM `film` WHERE `url` = '$url'")) == 1) {
        $fejl[] = "Videoén er alerede oprettet";
            }

      if (is_array($fejl)) {

        echo "Fejl:\n";

        for ($i = 0; $i < count($fejl); $i++) {
          echo "<li>$fejl[$i]</li>\n";
        }

        echo "</ul>";
        exit;

      }

      else {

        $url = str_replace("youtube.com/watch?v=", "", $url);
        mysql_query("INSERT INTO film (ip, navn, url, beskrivelse) VALUES ('$ip', '$navn', '$url', '$beskrivelse')") or die(mysql_error());

    echo "Filmen er nu tilføjet<br/>";
    echo '<meta HTTP-EQUIV="REFRESH" CONTENT="3.5; URL=/login/video/">';

              }

        }

      echo "<form action=\"creat.php\" method=\"post\">";

      echo "<table>";

      echo "<tr>Navn:<br/><input type=\"text\" name=\"navn\"/></tr>";
    echo '<small>Navn på video...</small><br>';

      echo "<tr>URL:<br/><input type=\"text\" name=\"url\"/></tr>";
    echo '<small>Eksempel på URL: <strong>http://www.youtube.com/watch?v=1jN9nGsiCTQ</strong></small><br>';

      echo "<tr>Beskrivelse:<br/><textarea name=\"beskrivelse\" cols=\"50\" rows=\"10\">
Avatar billede nicklasb Nybegynder
13. marts 2009 - 21:30 #1
Prøv med

if (ereg('/' . preg_quote('www.youtube.com/watch?v=') . '.*/i', $url)) { ... }
Avatar billede nicklasb Nybegynder
13. marts 2009 - 21:30 #2
Hov, brug preg_match i stedet:

if (preg_match('/' . preg_quote('www.youtube.com/watch?v=') . '.*/i', $url)) { ... }
Avatar billede Slater Ekspert
13. marts 2009 - 21:34 #3
Og hvis det ikke skal kunne noget mere avanceret, er det meget hurtigere at bruge
if (strpos($url, 'www.youtube.com/watch?v=') !== false)
... eller hvis det kun må stå som det første (og der ikke må være noget foran):
if (strpos($url, 'www.youtube.com/watch?v=') === 0)

Regular expressions bør helst kun bruges hvis de hurtigere funktioner ikke kan gøre det samme :)
Avatar billede ohhelpme Nybegynder
13. marts 2009 - 21:45 #4
Parse error: syntax error, unexpected '.' in E:\hjemmesider\wwwtii\piimpmyartoo.tii.dk\login\video\creat.php on line 29
Avatar billede Slater Ekspert
13. marts 2009 - 21:52 #5
Hvad står der på linje 29 og de nærmeste naboer (28 og 30)?
Avatar billede ohhelpme Nybegynder
13. marts 2009 - 22:02 #6
if ($navn) {


      if (!ereg("[A-z0-9]", $navn)) {

        $fejl[] = "Navnet er ugyldigt";

          }
    }
    if ($url) {

    if (ereg('/' . preg_quote('www.youtube.com/watch?v=') . '.*/i', $url)) { ... }  <-- line 29

      if (mysql_num_rows(mysql_query("SELECT * FROM `film` WHERE `url` = '$url'")) == 1) {

        $fejl[] = "Videoén er alerede oprettet";

            }


      if (is_array($fejl)) {



        echo "Fejl:\n";



        for ($i = 0; $i < count($fejl); $i++) {

          echo "<li>$fejl[$i]</li>\n";

        }



        echo "</ul>";

        exit;



      }



      else {

        $url = str_replace("youtube.com/watch?v=", "", $url);
        mysql_query("INSERT INTO film (ip, navn, url, beskrivelse) VALUES ('$ip', '$navn', '$url', '$beskrivelse')") or die(mysql_error());

    echo "Filmen er nu tilføjet<br/>";
    echo '<meta HTTP-EQUIV="REFRESH" CONTENT="3.5; URL=/login/video/">';



              }



        }


viperine > når jeg prøver med dit eks. : if (strpos($url, 'www.youtube.com/watch?v=') !== false)

går den bare vidre til tilføjet...
Avatar billede Slater Ekspert
13. marts 2009 - 22:19 #7
Det var ikke meningen du skulle kopiere { ... }  med fra nicklasb's eksempel :) Jeg tror både han og jeg gik ud fra du selv kunne det med braces.

Du skal afslutte den linje med { - intet andet.
F.eks.:
if (strpos($url, 'www.youtube.com/watch?v=') !== false) {

Og så skal der være en afsluttende brace ( } ) når den sektion der skal udføres hvis tilstanden er sand, er forbi - den er sandsynligvis placeret rigtigt allerede.
Avatar billede ohhelpme Nybegynder
13. marts 2009 - 22:55 #8
er ved at blive fuldstændig skæv i hovedet...
Har prøvet flere 1000 forskelige metoder, men slår fejl.
jeg har været på de verse forumer, men er ikke lykkedes
ja, har selv kopieret ifér fra andre af mine filer som virker, men de duer heller ikke...

Jeg vil blive så taknemlig, vis der var en der vil lave det for mig...

som sagt er hele creat.php her:

<?php
session_start();

if(!empty($_SESSION['log']))
{
}
else
{
header("location: /");
}
?>
<?
include("top.php");
include("config.php");


    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];

    $navn = $_POST["navn"];

    $url = $_POST["url"];

    $beskrivelse = $_POST["beskrivelse"];



      if (!ereg("[A-z0-9]", $navn)) {

        echo 'Navnet er ugyldigt';

          }

    if (strpos($url, 'www.youtube.com/watch?v=') !== false) {
        echo 'Ugyldig url';
        }



      if (mysql_num_rows(mysql_query("SELECT * FROM `film` WHERE `url` = '$url'")) == 1) {

              echo 'Videoén er alerede oprettet';

        } else {

        $url = str_replace("youtube.com/watch?v=", "", $url);
        mysql_query("INSERT INTO film (ip, navn, url, beskrivelse) VALUES ('$ip', '$navn', '$url', '$beskrivelse')") or die(mysql_error());

    echo "Filmen er nu tilføjet<br/>";
    echo '<meta HTTP-EQUIV="REFRESH" CONTENT="3.5; URL=/login/video/">';



                  }


      echo "<form action=\"creat.php\" method=\"post\">";

      echo "<table>";

      echo "<tr>Navn:<br/><input type=\"text\" name=\"navn\"/></tr>";
    echo '<small>Navn på video...</small><br>';

      echo "<tr>URL:<br/><input type=\"text\" name=\"url\"/></tr>";
    echo '<small>Eksempel på URL: <strong>http://www.youtube.com/watch?v=1jN9nGsiCTQ</strong></small><br>';

      echo "<tr>Beskrivelse:<br/><textarea name=\"beskrivelse\" cols=\"50\" rows=\"10\">
Avatar billede Slater Ekspert
14. marts 2009 - 17:17 #9
Okay, så er vi nødt til at vide præcis HVAD den skal gøre. Nu har jeg lige prøvet at kigge på koden med ordentlig indrykning, og det eneste din if-sætning gør, er at hvis strengen findes, så udskriver den "Ugyldig url" - men den går stadig videre efter det.
- Hvad er det meningen den skal gøre?
Avatar billede ohhelpme Nybegynder
16. marts 2009 - 16:10 #10
Den skal kunne sortere alle ugyldige urlér væk...
det vil sige, at gyldige urlér skal være følgene:
'http://www.youtube.com/watch?v=' efter = tegnet, til sidst i urlén, skal der kunne være tegn fra: a-z 0-9 og _-

altså efter = tegnet... er tegne forskellige hver gang man opretter en video...

desuden skal den også tjekke, at videoen allerede er opretet...
Avatar billede Slater Ekspert
16. marts 2009 - 19:34 #11
Men som det er nu, står der:

if (strpos($url, 'www.youtube.com/watch?v=') !== false) {
  echo 'Ugyldig url';
}

Dvs. if-sætningen stopper efter den har udskrevet "ugyldig url" - men udførelsen stopper ikke. Den går lystigt videre og udfører det der er nedenunder bagefter.

Du skal først stoppe if-sætningen igen (med "}"-tegnet) EFTER alt der, der ikke skal foregå, hvis sætningen er falsk.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester