script erklärung

09/23/2013 18:03 CeeNeo#1
Hey,

kann mir pls jemand folgendes Script Zeile für Zeile erkären? :)


PHP Code:
// tabellenstruktur für images
// id (primary index, auto increment) | data (varchar) | type (varchar) | country (varchar) | name (varchar)


// funktion
function img_table($country) {
    
$mysqli = @new mysqli('localhost','user','password','datenbank');
    
    
$query $mysqli->query("SELECT * FROM images WHERE country='$country'");
    
    echo 
'<table';
    
    while (
$row $query->fetch_object()){
        
$location './img/tmp.' $row->type;
        
$file fopen($location"a+");
        
fwrite($file$row->data);
        
fclose($file);
        
        echo 
'<tr>
                <td>
                    <img src="' 
$location '">
                </td>
                <td> Sonstige Felder zb. name oder Nutzer ' 
$row->name ' </td>
            </tr>'
;
    }
    echo 
'</table>';


wäre echt sehr nett. :)



Thx+MfG CeeNeo :)
09/23/2013 19:00 dowhile#2
Quote:
// tabellenstruktur für images
Ein Kommentar.

Quote:
// id (primary index, auto increment) | data (varchar) | type (varchar) | country (varchar) | name (varchar)
Ein Kommentar.

Eine Leerzeile.

Quote:
// funktion
Ein Kommentar.

Quote:
function img_table($country) {
Eine Funktion beginnt; Name: img_table, 1 Parameter

Quote:
$mysqli = @new mysqli('localhost','user','password','datenbank');
Ein Objekt der Klasse "mysql" wird angelegt (new Operator) und in der lokalen Variable $mysqli gespeichert. Das @ unterdrückt eventuelle Fehler. Die Klasse mysql baut im Konstruktor, der ausgeführt wird, wenn das Objekt angelegt wird, die Verbindung zu einer MySQL-Datenbank auf. Der erste Paramter ist die Server-Adresse, der zweite der Datenbank-Benutzer, der dritte das Passwort und der vierte die Datenbank.

Es folgt eine Leerzeile.

Quote:
$query = $mysqli->query("SELECT * FROM images WHERE country='$country'");
Über das Objekt wird ein Query ausgeführt, das alle Datensätze aus der Tabelle "images" holt, bei der der Wert der Spalte "country" dem Parameter der Funktion "img_table" entspricht. Das Resultat des Querys wird in $query gespeichert.

Es folgt eine Leerzeile.

Quote:
echo '<table';
"<table" wird ausgegeben.

Es folgt eine Leerzeile.

Quote:
while ($row = $query->fetch_object()){
Solange fetch_object nicht False ist -- das ist, solange noch weitere Datensätze vorhanden sind, wird ein weiterer Datensatz aus der Datenbank geladen und in $row gespeichert.

Quote:
$location = './img/tmp.' . $row->type;
Die lokale Variable $location wird angelegt. Der Wert ist "./img/tmp" und dann dem Wert des aktuellen Datensatzes der Spalte "type".

Quote:
$file = fopen($location, "a+");
Die Datei, die beim Pfad von $location liegt, wird mittels fopen geöffnet. Die Funktion gibt einen FD zurück, der in der neuen lokalen Variable $file gespeichert wird.

Quote:
fwrite($file, $row->data);
Der Wert der Spalte "data" des aktuellen Datensatzes wird an das Ende der Datei angehängt.

Quote:
fclose($file);
Die Datei wird wieder geschlossen.

Es folgt eine Leerzeile.

Quote:
echo '<tr>
<td>
<img src="' . $location . '">
</td>
<td> Sonstige Felder zb. name oder Nutzer ' . $row->name . ' </td>
</tr>';
Ausgabe: <tr> \n <td> \n <img src="[lokale Variable $location]"> \n </td> \n <td> Sonstige Felder zb. name oder Nutzer [Wert der Spalte "name" des aktuellen Datensatzes]</td> \n </tr>

Quote:
}
Ende der Schleife.

Quote:
echo '</table>';
"</table> wird ausgegeben.

Quote:
}
Ende der Funktion.
09/23/2013 19:18 Mikesch01#3
Du solltest dir selber anschauen, was das Script so macht.

Wenn nötig mit Hilfe von [Only registered and activated users can see links. Click Here To Register...]
09/23/2013 19:40 Syntaxfehler#4
PHP Code:
echo '<table'
Ich denke mal, dass das eher so aussehen sollte:
PHP Code:
echo '<table>'

PHP Code:
$query $mysqli->query("SELECT * FROM images WHERE country='$country'");

while (
$row $query->fetch_object()){ 
Diese Zeilen würde ich abändern zu:

PHP Code:
$query "SELECT * FROM images WHERE country = ?";
$query_stmt $mysqli->prepare($query);
$query_stmt->bind_param('i'$country); //falls $country ein String ist: i durch s ersetzen
$query_stmt->execute();
$query_result $query_stmt->get_result();

while (
$row $query_result->fetch_object()){ 

Ungetestet!