• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[PHP] Div erstellen mit Verlinkung

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hallo zusammen

Bei meiner Website soll nach einem drücken auf ein Upload Button ein div erstellt werden.Das div sollte aus einem Bild das aus der DB ausgelesen wird und einem titel bestehen. Sobald man auf das div drauf drückt, soll man auf eine watch.php umgeleitet werden, somit sollte auch noch die video_id ausgegeben werden.

Weiß jemand wie ich das am besten tun kann?
Gibt es einfachere Möglichkeiten?

Vielen Dank für eure Unterstützung
Kebab
 

vcr80

Gestreifter Böhmischer Borsdorfer
Registriert
06.11.08
Beiträge
3.396
Das hat weniger mit PHP als mit JS zu tun...
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Ja, zum Teil auch, aber ich denke nur eher um das div zu erstellen, Der Rest eher nicht,
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, die BIlder liegen in einer DB, oder nur die Verlinkungen zu einem Bild in einem Verzeichnis? Und welches DB-System?
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Die Bilder selbst, werden auf dem Server abgespeichert und den Pfad in der DB eingefügt.
Ich benütze Php MyAdmin 3!
 

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Abgesehen davon, dass PHPMyAdmin keine Datenbank ist, habe ich trotz dreimaligem Lesen des Ursprungsbeitrags nicht verstanden, was dein Kernproblem ist.
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Ja, also ich benutze eine mysql Datenbank welche ich mit phpmyadmin bearbeite.
Ich bräuchte Hilfe bei einem Code der sollte dazu dienen:
Wenn man auf einen Button drückt sollte ein div erstellt werden.
Im inneren des div's sollte ein Thumbnail und einen Titel sein, welcher aus der DB ausgelesen werden sollte.
Wenn man auf das div drückt sollte es auf eine andere Seite weiterleiten, dazu sollte es die Video_id aus der Datenbank ausgeben.

Ich hoffe das war etwas verständlicher

Vielen Dank
Kebab
 
Zuletzt bearbeitet:

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, verstanden habe ich das schon, aber wo ist denn dein Versuch, dein Code? Am besten dann mit Beschreiobung an welcher Stelle es hakt. Oder hat du selber gar nichts gecoded?
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Leider bin ich zeitlich noch nicht zum programmieren gekommen, da ich noch einen wichtigen Fehler zu beheben habe. Vielleicht könnt ihr mir dabei helfen...

Wenn man auf Upload klickt sollte man zuerst seinen Channel mit einem Radio Button auswählen.

1.) Ich bringe den Radio Button nicht vor die Channels...

Upload:

PHP:
<?php
include ('./includes/header.php');

if (isset($_FILES['video'])) {
  $title = $_POST['video_title'];
  $desc = $_POST['video_description'];
  $keywords = $_POST['video_keywords'];
  $privacy = @$_POST['privacy'];
  if (!empty($title) || ($desc) || ($keywords) || ($privacy)) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
   $video_id = substr(str_shuffle($chars), 0, 15);
   $video_id = md5($video_id);
  }
  else
  {
   die('empty fields');
  }
   if (($_FILES['video']['type']=='video/mp4')) {
   $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
   $random_directory = substr(str_shuffle($chars), 0, 15);

   if (file_exists('data/users/videos/' . $random_directory . ''.$_FILES['video']['name'])) {
     echo 'video exists';
   }
   else
   {

   move_uploaded_file($_FILES['video']['tmp_name'],'data/users/videos/' . $random_directory . ''.$_FILES['video']['name']);
   $img_name = $_FILES['video']['name'];
   $filename = "data/users/videos/".$random_directory.$_FILES['video']['name'];
   $md5_file = md5_file($filename);
   $check_md5 = mysql_query("SELECT file_md5 FROM videos WHERE file_md5='$md5_file'");
   if (mysql_num_rows($check_md5) != 0 && $deleted='no') {
     unlink($filename);
    die("This is a duplicate upload");
   }else {
     $date = date("F j, Y");
   $insert = mysql_query("INSERT INTO videos VALUES ('','$title','$desc','$keywords','$user','$privacy','$date','0','$video_id','','$filename','images/thumbnail.png','no')");
   mysql_query("UPDATE videos SET file_md5='$md5_file' WHERE video_id='$video_id'");
   die('The video was uploaded successfully <a href="my_videos.php">Don\'t forget to add your thumbnail</a>');
   }
   }
   }
}
?>
<h2>Upload a Video</h2>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
Video Title: <input type='text' name='video_title' value='' /><br />
Video Description:<br />
<textarea rows='10' cols='40' name='video_description'></textarea><br />
Video Keywords: <input type='text' name='video_keywords' value='' /><br />
Privacy: <input type='radio' name='privacy' value='Public' /> Public &nbsp;&nbsp; <input type='radio' name='privacy' value='Private' /> Private<br />
Choose your Channel: <br />
<?php
$channel_check = mysql_query("SELECT channel_name FROM channels WHERE created_by='$user'");
$numrows_cc = mysql_num_rows($channel_check);
  if ($numrows_cc == 0) {
'You havent made any channels yet, click the button to make one.';
}
else
{
while($row = mysql_fetch_assoc($channel_check)) {
  $channel_name = $row['channel_name'];
  echo "<b>$channel_name</b> - <a href='channel.php?c=$channel_name'>View Channel</a> | <a href='channel_settings.php?c=$channel_name'>Channel Settings</a><p />";
}
} ?>
                     <input type='radio' name='channel1' value='Channel1' /> <?php if ($numrows_cc == 0) echo'You havent created a Channel yet!'; else echo $row; ?> <br />
                     <input type='radio' name='channel2' value='Channel2' /> <?php if ($numrows_cc == 0) echo'You havent created a Channel yet!'; else echo $row; ?> <br />
                     <input type='radio' name='channel3' value='Channel3' /> <?php if ($numrows_cc == 0) echo'You havent created a Channel yet!'; else echo $row; ?> <br />
                     <input type='radio' name='channel4' value='Channel4' /> <?php if ($numrows_cc == 0) echo'You havent created a Channel yet!'; else echo $row; ?> <br />
                     <input type='radio' name='channel5' value='Channel5' /> <?php if ($numrows_cc == 0) echo'You havent created a Channel yet!'; else echo $row; ?> <br />
<input type='file' name='video' value='Upload Your Video'>
<input type='submit' name='submit' value='Upload'>

</form>

2.) Falls der Channel dann ausgewählt wird mit dem Radio Button, sollte auf dem Channel dann ein div erstellt werden mit dem Thumbnail, Titel und $video_id für die Weiterleitung. Und wie schaffe ich das es auch wirkliche diesen Channel auswählt oben hatte dies mit View Channel sehr gut geklappt. Wie funktioniert das mit dem Radio Buttons?

Kann mir jemand bei den 2 Punkten helfen?

Wäre euch unendlich dankbar!
Vielen Dank für eure Bemühungen
Kebab
 
Zuletzt bearbeitet:

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Oder hat du selber gar nichts gecoded?
@hillepille
Hier ist mein kläglicher Versuch...
Ja, das div habe ich noch nicht versucht zu erstellen.
Respektiv werde ich es so versuchen zu erstellen.
Code:
var newDiv = document.createElement("div");
  var newContent = document.createTextNode(""); // Hier sollte das Bild rein
  newDiv.appendChild(newContent); //hier der Titel

Oben siehst du den Upload Code!

Bin gespannt ob das so klappen wird.
Das Weiterleiten kommt dann noch.
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, die Channels erscheinen nicht, weil du die unterschiedlich benannt hast, ich habs hier geändert. Aber an der Stelle hast du keinen Zugriff mehr auf das $row-Array aus deiner while-Schleife, daher wird echo $row nicht funktionieren.

PHP:
    <input type='radio' name='channel' value='Channel1' /> <?php if ($numrows_cc == 0) echo 'You havent created a Channel yet!'; else echo $row; ?> <br />
    <input type='radio' name='channel' value='Channel2' /> <?php if ($numrows_cc == 0) echo 'You havent created a Channel yet!'; else echo $row; ?> <br />
    <input type='radio' name='channel' value='Channel3' /> <?php if ($numrows_cc == 0) echo 'You havent created a Channel yet!'; else echo $row; ?> <br />
    <input type='radio' name='channel' value='Channel4' /> <?php if ($numrows_cc == 0) echo 'You havent created a Channel yet!'; else echo $row; ?> <br />
    <input type='radio' name='channel' value='Channel5' /> <?php if ($numrows_cc == 0) echo 'You havent created a Channel yet!'; else echo $row; ?> <br />

Wenn ich das richtig verstahnen habe, kann man das eleganter lösen:

Ich gehe jetzt davon aus, dass die Channels sich aus der SQL-Abfrage direkt darüber ergeben. Dann würde ich zu allererst mal statt mysql_query, ... auf mysqli_query,... umstellen. Jetzt zur Abfrage:

Ich durchlaufe die Datenbank und speichere mir die Channels temporär in einer Variablen um sie dann weiter unten nutzen zu können. Alternativ könntest du auch das $row-Array selber in einer $varArray abspeichern, um dann unter der Abfrage mit einer foreach-Schleife die Radio-Button ausgeben zu können. Als Value für die Radiobox würde ich auch nicht den Namen des Channels nutzen sondern die zugehörige ID, sofern es zu jedem Eintrag in deiner Channels-Tabelle auch eine ID geben sollte. Sonst gibt das u.U. Probleme wenn ein Channelname Leerzeichen enthält.

PHP:
<form action='upload.php' method='POST' enctype='multipart/form-data'>
    Video Title: <input type='text' name='video_title' value='' /><br />
    Video Description:<br />
    <textarea rows='10' cols='40' name='video_description'></textarea><br />
    Video Keywords: <input type='text' name='video_keywords' value='' /><br />
    Privacy: <input type='radio' name='privacy' value='Public' /> Public &nbsp;&nbsp; <input type='radio' name='privacy' value='Private' /> Private<br />
    Choose your Channel: <br />
    <?php
    $channel_check = mysqli_query("SELECT channel_name FROM channels WHERE created_by='".$user."'");
    $numrows_cc = mysqli_num_rows($channel_check);
    if ($numrows_cc == 0) {
//Wenn kein Channel erstellt wurde, dann fängst du das ja hier schon ab, daher brauchst du bei der Channelerstellung eigentlich keine If-Else-Verzweigung um zu chekcken, ob es überhaupt einen Channel gibt.
        'You havent made any channels yet, click the button to make one.';
    }
    else
    {
        $varChannel = "";
        while(FALSE !== ($row = mysqli_fetch_assoc($channel_check))) {
            $channel_name = $row['channel_name'];
            //Hier durchläufst du die Schleife mit den Channels, dann müssen hier auch die Radio-Buttons erstellt werden
            echo "<b>$channel_name</b> - <a href='channel.php?c=$channel_name'>View Channel</a> | <a href='channel_settings.php?c=$channel_name'>Channel Settings</a><p />";
            $varChannel .= "<input type='radio' name='channel' value='".$row['channel_name']."' /> ".$row['channel_name']." <br />";
            unset($row);
        }
        echo $varChannel;
    }
    ?>
    <input type='file' name='video' value='Upload Your Video'><br/>
    <input type='submit' name='submit' value='Upload'>

</form>
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Kebab

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Dann noch zu den ersten Zeilen im Code von Dir. Das hier kann so nicht funktionieren, bzw. dann kannst du dir die If-Abfrage sparen:

PHP:
//Die Abfrage lässt ja alles durch, wenn nur einer der Werte ausser Title gefüllt wäre
    if (!empty($title) || ($desc) || ($keywords) || ($privacy)) {

}
//Ich denke du willst abfragen, ob alle Werte gefüllt sind
    if (!empty($title) && !empty($desc) && !empty($keywords) && !empty($privacy)) {

}
 
  • Like
Reaktionen: Kebab

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hallo @hillepille

Vielen Dank für deine Hilfe. Ich habe deinen überarbeiteten Code gleich mal ausgetestet. Leider bekomme ich 2 Fehler zurück und die Channels werden nicht ausgegeben.

Warning: mysqli_query() expects at least 2 parameters, 1 given in /srv/disk11/1807619/www/blblblb/upload.php on line 55

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /srv/disk11/1807619/www/blbllblb/upload.php on line 56

Das sind die zwei Zeilen:

PHP:
$channel_check = mysqli_query("SELECT channel_name FROM channels WHERE created_by='$user'");
$numrows_cc = mysqli_num_rows($channel_check);

An was kann das liegen?
Diese Zeilen sollten ja stimmen also denke ich es hat mit etwas anderem zu tun.

Vielen Dank
Kebab
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Dann noch zu den ersten Zeilen im Code von Dir. Das hier kann so nicht funktionieren, bzw. dann kannst du dir die If-Abfrage sparen:

PHP:
//Die Abfrage lässt ja alles durch, wenn nur einer der Werte ausser Title gefüllt wäre
    if (!empty($title) || ($desc) || ($keywords) || ($privacy)) {

}
//Ich denke du willst abfragen, ob alle Werte gefüllt sind
    if (!empty($title) && !empty($desc) && !empty($keywords) && !empty($privacy)) {

}

Ja, klar habe ich falsch geschrieben.

Vielen Dank
Kebab
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, ich bin leider unterwegs. Dann nimm zum testen mysql_..., wahrscheinlich unterscheiden sich die mysqli_... Abfragen von mysql_... Abfragen. Ich nutze immer PostgreSQL, das muss ich nachschlagen. Ich schau mir das morgen Abend mal an schaffe ich vorher nicht.
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hi, ich bin leider unterwegs. Dann nimm zum testen mysql_..., wahrscheinlich unterscheiden sich die mysqli_... Abfragen von mysql_... Abfragen. Ich nutze immer PostgreSQL, das muss ich nachschlagen. Ich schau mir das morgen Abend mal an schaffe ich vorher nicht.

Hey @hillepille

Vielen Dank für deine Hilfe. An zu wenig Arbeit liegt es bei mir nicht.;)
Wenn du morgen Abend dazu kommen würdest, wäre ich dir trotzdem dankbar.
Ich hatte die gleichen Gedanken wie du und habe die mysqli Abfragen mit mysql ausgetauscht.
Da bekam ich eine Seite, welche ich noch nie hatte, egal bei welchen Fehler:

Error 500: Script Execution Failure
Description: The server encountered an internal error or misconfiguration and was unable to complete your request.

Most common reasons for returning this error message are:

File Upload Mode
When you upload Perl, CGI scripts via FTP you should use always ASCII mode. If you get "Error 500: Script Execution Failure" you should check whether your FTP client uses ASCII mode when uploading your scripts, because if it uses BINARY mode to upload your scripts they won't work on the server. The problem caused by wrong upload mode is associated with the way different operating systems handle the "end of line" character. Unix system uses a "line-feed" (LF), Windows uses a "carriage-return" (CR) and "line-feed" (LF) pair. That's why it is very important that you set the uploading mode to ASCII.

File Permissions
When you upload scripts via FTP the file permissions are set by default to 755. If you get "Error 500: Script Execution Failure" you should check whether your scripts have 755 permissions. Otherwise your scripts have lower level of permissions and does not support execution upon request. The octal representation of the 755 permission is equal to the following textual format: -rwxr-xr-x
Most FTP clients support the CHMOD command which is used for setting file permissions. In case you have set improper permissions to your scripts, use your FTP client and set "Read, Write, Execute" permissions for the owner, "Read, Execute" permissions for the group and everyone else.

Script Errors
This is the third well known reason for getting "Error 500: Script Execution Failure" upon execution of your scripts. Check your scripts for any obvious syntax or programming errors to make sure your code is not broken.


Remember: When you get a "Error 500: Script Execution Failure", you should always check for any file uploading problems (ASCII/BINARY) and the executable permission settings. Once those are checked and verified, it looks like there is a syntax error or some other problem in the script.
So habe ich die Abfragen wieder zu mysqli abgeändert.

Vielen Dank
Kebab
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, ich habs mal zusammengefasst.


mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE])
link

Nur bei prozeduralem Aufruf: Ein von mysqli_connect() oder mysqli_init() zurückgegebenes Verbindungsobjekt.

Hi, du musst bei Verwendung von mysqli_query als ersten Parameter Das Verbindungsobjekt deiner DB-Verbindung eintragen und den SQLQuery als zweiten Parameter. mysqli_num_rows funktioniert dann problemlos, der entstandene Fehler kommt daher, dass es aufgrund des fehlerhaften mysqli_query-Aufrufs kein Ergebnis gibt.

Hier mal Beispiellcode dazu:

PHP:
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql="SELECT Lastname,Age FROM Persons ORDER BY Lastname";

if ($result=mysqli_query($con,$sql))
  {
  // Return the number of rows in result set
  $rowcount=mysqli_num_rows($result);
  printf("Result set has %d rows.\n",$rowcount);
  // Free result set
  mysqli_free_result($result);
  }

mysqli_close($con);
?>


Die anderen Fehler, keine Ahnung. Wie sieht denn die inkludierte Header.php aus?
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Kebab

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hey @hillepille

Vielen Dank für deine großartige Hilfe. Ich befürchte ich kapierte nicht so ganz wie es funktioniert.
Ich habe mal verschiedene Dinge ausprobiert. Mein Code ist zurzeit:
HTML:
<h2>Upload a Video</h2>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
    Video Title: <input type='text' name='video_title' value='' /><br />
    Video Description:<br />
    <textarea rows='10' cols='40' name='video_description'></textarea><br />
    Video Keywords: <input type='text' name='video_keywords' value='' /><br />
    Privacy: <input type='radio' name='privacy' value='Public' /> Public &nbsp;&nbsp; <input type='radio' name='privacy' value='Private' /> Private<br />
    Choose your Channel: <br />
    <?php
    $sql = mysqli_connect("hoster","dbname","password");
    $channel_check = mysqli_query("SELECT channel_name FROM channels WHERE created_by=$user");
    $numrows_cc = mysqli_num_rows($channel_check);

Leider bekomme ich nun wieder die anderen 2 Fehlermeldungen:
Warning: mysqli_query() expects at least 2 parameters, 1 given in /srv/disk11/1807619/www/mixtube.dx.am/upload.php on line 56

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /srv/disk11/1807619/www/mixtube.dx.am/upload.php on line 57

Kannst du mir dabei helfen den Code richtig zustellen?

Vielen Dank
Kebab
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, ja kann ich:

Dein Code:
PHP:
$sql = mysqli_connect("hoster","dbname","password");
Korrekt:
PHP:
$db_connection = mysqli_connect("DB-Server-IP","DB-User","DB-Password","DB-Name");
Und nenn die Verbindung am besten nicht $sql, das impliziert, dass das die SQL-Abfrage ist. Wenn du $con oder $db_connection nimmst, wäre für Fremde die das lesen direkt klar, weöchen Inhalt die Variable hat.

Dein Code:
PHP:
$channel_check = mysqli_query("SELECT channel_name FROM channels WHERE created_by=$user");
Korrekt:
PHP:
$channel_check = mysqli_query($db_connection, "SELECT channel_name FROM channels WHERE created_by=$user");
Hier würde ich vielleicht auch eine andere Bezeich nung nehmen. Die jetzt $channel_check bezeichnete Variable ist ja das Ergebnis der Abfrage. Ich würde das statt $channel_check $erg_channels oder so nennen. Man sollte beim Coden verstaendliche Variablennamen nehmen damt man später bei Anpassungen/Änderungen den Code schnell versteht. Kannst du aber auch so lassen, ist nur meine ganz persönliche Meinung.


Der Teil hier ist schon korrekt:
PHP:
$numrows_cc = mysqli_num_rows($channel_check);
Dann schau mal ob das so klappt, dann können wir danach die Erstellung der Divs angehen.
 
Zuletzt bearbeitet: