2016-10-05 3 views
0

Ich versuche, PHP zu lernen, und ich versuche, einen URL-Verkürzer zu erstellen. Momentan können Sie derzeit einen Link eingeben und diesen in die Datenbank eingeben. Es wird nicht zufällig die Zeichenfolge, aber ich werde das nachher tun. (Ich habe sie selbst geändert, um Probleme zu vermeiden).Ergreifung von Daten aus einer Abfrage

Hier ist meine Tabelle zur Zeit (Meine Tabelle 'Urls' genannt wird):

Table

Dann, wenn Sie zu gehen (für mich localhost)/somepath leitet es automatisch /process.php?id = SomePath

In process.php überprüft es, ob der angegebene Pfad (somepath) in der Datenbank vorhanden ist und erhält dann seinen ursprünglichen Wert. Das Problem, das ich habe, ist, den ursprünglichen Wert zu bekommen. Auch hier bin ich neu in PHP und habe Probleme zu verstehen, wie die Abfrage funktioniert.

$query = "SELECT original FROM urls WHERE new = '$new'"; 
$result = $conn->query($query); 

Wie greife ich Informationen aus $ Ergebnis? Oder soll ich es von $ query nach $ ergebnis bekommen, weil das im Grunde nur läuft?

Bitte erklären Sie, warum Sie was verwenden, ich verstehe das nicht.

Danke, tut mir leid, wenn das eine wirklich dumme Frage ist.

+0

** WARNUNG **: Bei der Verwendung von 'mysqli' Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) verwendet werden soll, und [ 'bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Anfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

0

Verwenden fetch_assoc() Daten aus Ihrer Tabelle Objektorientiertes in MySQLi zu greifen.

Versuchen Sie folgendes:

$query = "SELECT original FROM urls WHERE new = '$new'"; 
$result = $conn->query($query); 
if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
} 
} else { 
    echo "0 results"; 
} 

Sie können auch das Ergebnis in einer HTML-Tabelle setzen:

if ($result->num_rows > 0) { 
    echo "<table><tr><th>ID</th><th>Name</th></tr>"; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>"; 
    } 
    echo "</table>"; 
} else { 
    echo "0 results"; 
} 
0
$query = "SELECT original FROM urls WHERE new = '$new'"; 
$result = $conn->query($query);  
$rows = mysql_fetch_array($result); 
foreach($rows as $row){ 

    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
} 

können Sie verwenden entweder mysql_fetch_array oder mysql_fetch_assoc für Zupacken Ergebnisse

1

In diesem Code benutzte ich die object oriented approach für eine prepared statement oder wenn Sie noch in procedural style Du kannst das immer noch benutzen.

prüfen Sie diesen Link: http://php.net/manual/en/mysqli.prepare.php

Also im Grunde, was in diesem Code geschieht, ist, dass die Abfrage dann binden Sie den Parameter verwendet werden, vorbereitet wird (dieser Stil ist eine Möglichkeit, SQL-Injektionen zu vermeiden, da Eingaben automatisch sind entkam). Das Ergebnis wird zuerst in der Variablen $original gespeichert, dann zählte ich, wie viele Zeilen die Abfrage zurückgegeben hat. Wenn es mehr als 1 ist, bedeutet das, dass es eine Übereinstimmung gibt, und wenn 0, keine Übereinstimmung.

Wenn eine Übereinstimmung vorliegt, wird der Wert der Variablen $original zurückgegeben.

<?php 

    $stmt = $conn -> prepare("SELECT original FROM urls WHERE new = ?"); 
    $stmt -> bind_param('s',$new); 
    $stmt -> execute(); 
    $stmt -> bind_result($original); 
    $stmt -> fetch(); 
    $stmt -> store_result(); 

    $res = $stmt -> num_rows(); 

    $stmt -> close(); 

    if($res > 0){ 
    echo $original; 
    } 
    else{ 
    //not found 
    } 

?> 
Verwandte Themen