Gå til innhold

[Løst] Problem når jeg skal legge ting i database


Anbefalte innlegg

Hei.

 

Jeg har denne koden:

<html>
<head>
<title>Lastet opp fil</title>
</head>
<body>
<?php
$temp_fil = $_FILES['filbane']['tmp_name'];
$filnavn = "filmfiler/" . $_FILES['filbane']['name'];
move_uploaded_file($temp_file, $filnavn) or die ("En feil oppstod, prøv igjen senere. Har du prøvd dette for andre gang og fått denne meldingen, send en e-post til [email protected]");
$tilkobling = mysql_connect("localhost","rvgshost_alt","Alex123rider");
mysql_select_db("rvgshost_database",$tilkobling);
$sjekk_antall = mysql_query("SELECT id FROM filmfiler");
$antall_rader = mysql_fetch_arrey($sjekk_antall);
$nyId = $antall_rader['id'] + 1;
mysql_query("INSERT INTO filmfiler (id, navn, filmfil)
VALUES ($nyId,$_POST['navn'],$filnavn)");
echo "Filen er nå lastet opp til nettsiden.<br><br><a href='index.php'>Gå tilbake til forsiden</a>";
?>
</body>
</html>

 

Og når jeg kjører den (med inngangsdata), så får jeg denne feilmeldingen:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/rvgshost/public_html/lastopp.php on line 16

 

Er sikkert noe ganske enkelt, men dette er til en nettside der mine medelever skal laste opp en filmfil de har laget (siden it's learning ikke vil godta filmfiler).

 

Det er viktig at det funker som det skal innen kort tid.

 

Takker for alle svar.

 

 

PS: Linje 16 er der denne koden er:

VALUES ($nyId,$_POST['navn'],$filnavn)");

Lenke til kommentar
Videoannonse
Annonse

Takk for hjelpen, det funket.

 

Men nå har det kommet et nytt problem på en av de andre nettsidene på nettsiden.

Her er koden:

<html>
<head>
<title>Administrer</title>
</head>
<body>
<?php
if (isset($_POST['logginn'])) {
if ($_POST['brukernavn'] == Ingrid && $_POST['passord'] == skoleErTopp) {
echo "<h1>Her er en liste over alle filene som er lastet opp</h1>";
$con = mysql_connect("localhost","rvgshost_alt","Alex123rider");
echo"<p>
if (!$con)
  {
  die('Kunne ikke koble til, prøv igjen senere. Er dette andre gang du prøver dette, og får feilmeldingen, vennligst send en e-post til [email protected] med feilmeldingen under:<br><br>Feilmelding: ' . mysql_error());
  }

mysql_select_db("rvgshost_database", $con);

$result = mysql_query("SELECT * FROM filmfil");

while($row = mysql_fetch_array($result))
  {
  echo "ID: " . $row['id'] . "<br>Navn: " . $row['navn'] . "Tid lastet opp (servertid): " . $row['tid'] . "<br>Lenke til filmfil: <a href='http://rvgs.host.org/" . $row['filmfil'] . "'>Trykk her</a>";
  echo "<br><br>------------<br><br>";
  }

mysql_close($con);
echo "</p>
}
else {
echo "<h1>Beklager, men du har skrevet inn feil brukernavn/passord, vennligst skriv inn riktig</h1>";
echo '<p><form action=""method="post">Brukernavn: <input type="text" name="brukernavn"><br>Passord: <input type="password" name="passord"><br><input type="submit" name="logginn" value="Logg inn"></form></p>';
}
}
else {
?>
<h1>Logg inn her</h1><br><br>
<p>
<form action=""method="post">
Brukernavn: <input type="text" name="brukernavn"><br>
Passord: <input type="password" name="passord"><br>
<input type="submit" name="logginn" value="Logg inn">
</form>
</p>
<?php
}
?>
<p><a href="index.php">Gå tilbake til forsiden</a></p>
</body>
</html>

 

Her er feilmeldingen:

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home/rvgshost/public_html/administrer.php on line 17

 

Håper noen kan hjelpe her også (det burde ikke være feilmelding der, for denne koden kopierte jeg direkte fra w3schools.com, og bare endret på navnene, slik at de stemmer).

 

PS: Linje 17 er, så vidt jeg har fått telt der denne koden står:

mysql_select_db("rvgshost_database", $con);

 

Takker for alle svar.

Lenke til kommentar

Så visst ikke det :)

 

Men nå kommer den med en feilmelding jeg ikke forstår kan komme:

Parse error: syntax error, unexpected '>' in /home/rvgshost/public_html/administrer.php on line 31

 

Og det eneste som er på den linjen nå er jo:

echo "<h1>";

Lenke til kommentar

Kanskje det er linja under:

echo '<p><form action=""method="post">Brukernavn: <input type="text" name="brukernavn"><br>Passord: <input type="password" name="passord"><br><input type="submit" name="logginn" value="Logg inn"></form></p>';

Er det tillatt med ' ' som string literal i PHP?

Bytt de om; bruk " i PHP og ' i HTML.

Lenke til kommentar

Du kan fint bruke på ' og " i PHP for tekst strenger

$text="Heisann";
$text2='Heisann';

 

Problemet er på linje

11: echo "<p>

28: echo "</p>

Du har ikke avsluttet tekst strengen, legg på ";

 

Anbefaler at du bruker en editor med farge koding, f.eks. Notepad++. Da blir det veldig enkelt å oppdage slike feil.

Lenke til kommentar

Du kan fint bruke på ' og " i PHP for tekst strenger

$text="Heisann";
$text2='Heisann';

 

Problemet er på linje

11: echo "<p>

28: echo "</p>

Du har ikke avsluttet tekst strengen, legg på ";

 

Anbefaler at du bruker en editor med farge koding, f.eks. Notepad++. Da blir det veldig enkelt å oppdage slike feil.

 

Takk for tipset, bruker nok notepad++ fra nå av.

 

Nå vil siden vises, men jeg får denne advarselen (og innholdet vil selvfølgelig ikke vises):

 

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/rvgshost/public_html/administrer.php on line 21

 

Hva må jeg gjøre for å unngå dettte?

Lenke til kommentar

Kan ikke se noe feil, men du har ingen kontroll på om databasen faktisk finnes.

Endre koden din til følgende:

if (mysql_select_db("rvgshost_database", $con)) {
 $result = mysql_query("SELECT * FROM filmfil");
 while($row = mysql_fetch_assoc($result)) {
   echo "ID: " . $row['id'] . "<br>Navn: " . $row['navn'] . "Tid lastet opp (servertid): " . $row['tid'] . "<br>Lenke til filmfil: <a href='http://rvgs.host.org/" . $row['filmfil'] . "'>Trykk her</a>";
   echo "<br><br>------------<br><br>";
 }
}
else echo 'Finner ikke databasen';
mysql_close($con);

I stedet for mysql_fetch_array så bruk mysql_fetch_assoc eller mysql_fetch_row. mysql_fetch_array innholder både row og assoc, er ikke nødvendig å ha hvert felt fra select'en dobbelt opp. Siden du bruker $row['id'] så er det mysql_fetch_assoc som er riktig.

Lenke til kommentar

Kan ikke se noe feil, men du har ingen kontroll på om databasen faktisk finnes.

Endre koden din til følgende:

if (mysql_select_db("rvgshost_database", $con)) {
 $result = mysql_query("SELECT * FROM filmfil");
 while($row = mysql_fetch_assoc($result)) {
echo "ID: " . $row['id'] . "<br>Navn: " . $row['navn'] . "Tid lastet opp (servertid): " . $row['tid'] . "<br>Lenke til filmfil: <a href='http://rvgs.host.org/" . $row['filmfil'] . "'>Trykk her</a>";
echo "<br><br>------------<br><br>";
 }
}
else echo 'Finner ikke databasen';
mysql_close($con);

I stedet for mysql_fetch_array så bruk mysql_fetch_assoc eller mysql_fetch_row. mysql_fetch_array innholder både row og assoc, er ikke nødvendig å ha hvert felt fra select'en dobbelt opp. Siden du bruker $row['id'] så er det mysql_fetch_assoc som er riktig.

 

Det hjalp desverre ikke, så nå har jeg endret det sånn at filmen lagres som vanlige filer.

 

Det eneste problemet jeg møter på nå er at den ikke finner navnet på den som har lastet opp filen (og en liten bagatell med at den lister opp to filer som ikke er i mappen, og går viistnok til mappen php skal lete i, og index-siden).

 

Her er koden min:

<!DOCTYPE html>
<html>
<head>
<title>Administrer</title>
</head>
<body>
<?php
if (isset($_POST['logginn'])) {
if ($_POST['brukernavn'] == 'Inger' && $_POST['passord'] == 'skoleErTopp') {
$antall_filer = 0
?>
<h1>Her er en liste over alle filene som er lastet opp</h1>
<?php
$mapperef = opendir("filmfiler/");
while (($filmfil = readdir($mapperef)) !== false) {
  $filmfilbane = $mapperef . $filmfil;
  $tekstfilnavn = str_replace(".", "", $filmfil);
  $tekstfilbane = "filminfo/" . $tekstfilnavn;
  if (file_exists($tekstfilbane)) {
  $navn = file_get_contents($tekstfilbane);
  }
  else {
  $navn = "Navn ikke funnet";
  }
  echo "Navn: " . $navn . "<br>";
  echo "<video width='320' height='240' controls='controls'><source src='filmfiler/" . $filmfil . "'>Din nettleser støtter ikke video-taggen i html5.</video>";
  echo "<br>Last ned filmfil: <a href='filmfiler/" . $filmfil . "'>Trykk her</a><br><br>-----------------<br><br>";
  $antall_filer = $antall_filer + 1;
  }

closedir($mapperef);
echo "Antall filmfiler funnet: " . $antall_filer;
}
else {
echo "Feil brukernavn/passord, logg inn på nytt.<br><br><a href='loggInn.php'>Logg inn på nytt</a>";
}
}
?>
<p><br><br><a href="index.php">Gå tilbake til forsiden</a></p>
</body>
</html>

 

Filene er lagret sånn at en filmfil som heter:

minfilm.mp4
og ligger i mappen filmfiler, heter infofilen (med navnet på hvem som har lastet opp i):
minfilmmp4.txt
og ligger i mappen filminfo.

 

Det som blir resultatet er at det står:

Navn ikke funnet
som er det som skal komme hvis den ikke finner filen.

 

Håper noen finner en løsning nå idag.

Lenke til kommentar

Fint hvis noen har en mulighet til å utelate de to "linkene" som skal utelates, uten å måtte sjekke filformatet, for å være sikker på at filmene også listes opp, selv om de ikke er i det filformatet som oppskriften sier at det skal være i.

Lenke til kommentar

Det hjalp desverre ikke,

Og resultatet ble? Er fremdeles flere ting som kan gjøres for å debugge koden. Litt håpløst å gi opp så fort når du spør om hjelp ...

if (mysql_select_db("rvgshost_database", $con)) {
 $result = mysql_query("SELECT * FROM filmfil");

 echo '<pre>'; // start debugging
 echo var_dump($result); // hvis resources så ok, hvis false så er det ett problem med query'en

 while($row = mysql_fetch_assoc($result)) {
   //echo "ID: " . $row['id'] . "Navn: " . $row['navn'] . "Tid lastet opp (servertid): " . $row['tid'] . "Lenke til filmfil: <a href="http://rvgs.host.org/" . $row[" filmfil']="" .="" "'="">Trykk her</a>";
   //echo "------------";
   print_r($row); // skriv ut innholdet av $row
 }
 echo '</pre>'; // slutt debugging
}
else echo 'Finner ikke databasen';
mysql_close($con);

 

Skal du liste ut filer så ta en titt på glob() funksjonen. Hvis du ikke ønsker å bruke en database, så bør du med en Mod. om å flytte denne tråden til PHP forumet, da dette ikke lenger er database relatert, men ren PHP.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...