SQL-Abfrage - Dropdown mit Ausgabe

Hallo, liebe Mitmenschen!

Ist schon einige Zeit her, dass ich irgendwas mit SQL zu tun hatte, daher bitte ich um eure Mithilfe.

Ich versuche genau das gleiche wie auf dieser Seite zu bewerkstelligen:

Cabinet Steinmetz - Notre ambition : assurer votre confiance : Un expert chez vous

Also, Kunde wählt (hier schreibt, ich will wählt) Code Postal oder wählt Stadtnamen, drückt ok, die tage, an denen er da ist, erscheinen.

Nun habe ich bereits angefangen das Dropdown-Menü zu erstellen. dass is ja anhand dieses kleinen Codes ja schon hinzukriegen:

Code:
<?
$sql="Select code_postal from tournee";
$q=mysql_query($sql);
echo "<select name=\"code_postal\">"; 
echo "<option size =30 ></option>";
while($row = mysql_fetch_array($q)) 
{        
echo "<option value='".$row['code_postal']."'>".$row['code_postal']."</option>"; 
}
echo "</select>";
?>

So, nun wie gehts aber weiter?


Und das weiter wäre, wie kann ich meinem Chef die Möglichkeit geben, ohne SQL-Kenntnisse die Einträge selbst zu ändern?

Danke im Voraus
BEn
 
Also, Kunde wählt (hier schreibt, ich will wählt) Code Postal oder wählt Stadtnamen, drückt ok, die tage, an denen er da ist, erscheinen.
Vielleicht gibst Du der bei Deiner Anfrage nochmal etwas mehr Mühe.

Und das weiter wäre, wie kann ich meinem Chef die Möglichkeit geben, ohne SQL-Kenntnisse die Einträge selbst zu ändern?

Man kann ein "Administrationszugang" bauen. D.h. Dein Chef sieht dann eine Seite, wo er diese Einträge ändern kann.
 
hey!

ich nehme an du meinst die Rechtschreibung?^^ Sry, bin seit einem Jahr in Frankreich, da rostet das Deutsch schon mal ein^^.

Also, der Kunde soll seine Postleitzahl aus einer Dropdown-Liste auswählen (im Beispiel schreibt er Sie, ich hätte aber gern, dass er Sie wählt), oder er wählt den Stadtnamen und drückt danach auf ok. Wie Magie sollen dann die Tage erscheinen, an denen mein Chef in der oben benannten Stadt Halt macht.

@ Administrationszugang:

Hättest du da eventuell einen Link, der mir in dem Sinne weiterhelfen könnte?

Danke
Ben
 
@ Administrationszugang:

Hättest du da eventuell einen Link, der mir in dem Sinne weiterhelfen könnte?

Es ist eine "normale" Webseite, entsprechend gesichert. Zb durch htaccess für eine Authentifizierung und SSL für eine (ausreichende) Absicherung der Verbindungsdaten:
Apache: SSL mit dem Apache - HTMLWorld
SELFHTML: Webserver/CGI / Webserver / .htaccess - Server-Reaktionen kontrollieren

Was die Programmierung angeht, so baust du eine PHP Seite, welches die Änderung derjenigen Felder erlaubt, die du da oben angesprochen hast.
 
Also, hab mich jetzt schon ziemlich gespielt, komm aber noch immer zu keinem ergebnis.

Der untenstehende Code soll die Ausgabe sein.

Hat vielleicht einer ne Idee, was das Problem sein könnte?

Code:
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>formular</title>
    </head>
    <body>
        <?php  
$db_host = "localhost"; 
//$db_username = "ben";
//$db_pass = "ben"; 
$db_name = "jeanfran"; 

//mysql_connect("$db_host","$db_username","$db_pass") or die ("could not connect to mysql");
mysql_connect("$db_host") or die ("could not connect to mysql");
mysql_select_db("$db_name") or die ("no database");              
?>
        
<table>

  <form method="post" action="">

        <tr>
            <td> <p>Option:</p></td>
            <td>
  
$sql = "SELECT code_postal FROM tournee";
$q=mysql_query($sql);
<select name="option">;
while($row = mysql_fetch_array($q)) 
{        
echo "<option value='".$row['code_postal']."'>".$row['code_postal']."</option>"; 
}
echo "</select>";
            
            </td>
        </tr>
        <tr>
            <td colspan="2"> //DAS IST EIN BUTTON
            <input type="submit" value="Send" />
            <input type="reset" value="Reset"/>
            <input type="hidden" name="sent" value="1" />
            </td>
        </tr>
    </form>
</table>


if (isset($_POST['sent']) )
{
$option = $_POST['option'];
}


$query ="SELECT*FROM WHERE code_postal = "$option"" 
$result = mysql_query($query); 


$output = '<table border = "1"><tr>';

while($row = mysql_fetch_array($result)) 
{
for($i=0; $i < mysql_num_fields($result); $i++)
    {
    $output .= "<td class = small>".$row[$i]."</td>";
    }
}

    </body>
</html>

lg ben
 
Hallo!

Erstmal danke für die Antwort.

Aber könntest du mir noch einmal genauer sagen, was verursacht, dass ich MSQLi benötige und wie ich das in phpmyadmin aktiviere bzw. ob das überhaupt geht?

danke im voraus
 
Heyho!

Habs hinbekommen! Es funktioniert an sich alles, bis auf die Übergabe des ausgewählten Wertes.

Er gibt mir die ganze Zeit an, dass $option eine undefinierte Variable ist. ich nehme also an, dass er $option keinen Wert hat, da ich sie hier deklariere:


Code:
if (isset($_POST['submit']) )
{
$option = $_POST['code_postal'];
}


Hier der ganze Code:

Code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>formular</title>
</head>
<body>

    
<?php 
$mysqlhost="localhost"; // MySQL-Host angeben 
$mysqluser="root"; // MySQL-User angeben 
$mysqlpwd=""; // Passwort angeben 
$mysqldb="jeanfran"; // Gewuenschte Datenbank angeben 
$connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen"); 

mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
echo "Verbindung zur Datenbank erfolgreich <br>\n <br>\n"; 

echo '<table>';



echo '<tr>';
echo '<td> <p>Option:</p></td>';

echo '<td>';
    


echo '<form action="index.php" method="post">';
    

  //  <form method="po  st" action="">;
    
$query = ("SELECT tournee_id, code_postal, jour FROM tournee");
$q=mysql_query($query);

echo '<select name="code_postal">';

while($row = mysql_fetch_array($q)) 
{ 
   //echo '<option value=$row["tournee_id"]>$row["code_postal"]</option>'; 
    echo "<option value='".$row['code_postal']."'>".$row['code_postal']."</option>"; 
}
echo '<input type="submit" name="submit" value="submit"/>';   
echo '<input type="hidden" name="submitted" value="1">'; 
echo "</select>";

    // $function = $_POST['$q'];

  
echo '</td>';

echo '</tr>';
/*  
echo '<tr>';
echo '<td colspan="2">'; //DAS IST EIN BUTTON
echo '<input type="submit" value="Send" />';
echo '<input type="reset" value="Reset"/>';
echo '<input type="hidden" name="sent" value="1" />';
echo '</td>';
echo '</tr>';
*/
echo "</form>";

echo "</table>";

    
if (isset($_POST['submit']) )
{
$option = $_POST['code_postal'];
}
//name="form" id="form"
//$option = 25000;
$res = ("SELECT * FROM tournee WHERE code_postal = '$option'");

//echo $res['jour'];

$res2 = mysql_query($res)  or die ("MySQL-Error: " . mysql_error());

while($row2 = mysql_fetch_array($res2))
  {
  echo $row2['code_postal'] . " " . $row2['jour'];
  echo "<br />";
  }

mysql_close($connection);
/*
$result = mysql_query($query2) or die (mysql_error());   

$output = '<table border = "1"><tr>';

while($row = mysql_fetch_array($result)) 
{
for($i=0; $i < mysql_num_fields($result); $i++)
{
$output .= "<td class = small>".$row[$i]."</td>";
}
}
*/

?>
</body>
</html>
 
Aber könntest du mir noch einmal genauer sagen, was verursacht, dass ich MSQLi benötige und wie ich das in phpmyadmin aktiviere bzw. ob das überhaupt geht?

danke im voraus

MySQLi ist die verbesserte (das i steht für improved) Erweiterung von PHP zum Zugriff auf MySQL-Datenbanken. Sie ist im Gegensatz zur ursprünglichen Variante objektorientiert, lässt sich aber auch prozedural benutzen. Ein wesentlicher Vorteil ist, dass mithilfe von sogenannten Prepared Statements einfach SQL-Injection-Angriffe abgewehrt werden können.

Abgesehen davon hat das mit PMA rein gar nichts zu tun, dass ist ein PHP-Modul. phpinfo() wird dir verraten, ob dein Webhoster das hat. Haben aber eigentlich alle.


"Danke im Voraus" wird weder gesagt noch geschrieben, btw.
 
Wenn dich meine Gruß-Klausel stört, dann kann ich nichts machen. Ich benutze Sie seit Jahren und sage und schreibe Sie.

Hab jetzt den ganzen Code an sich hinbekommen, die Abfrage funktioniert ohne Probleme mit XAMPP.

Habe Sie daher auf meinen Webserver geladen, was auch ohne Probleme funktioniert bis man auf "Submit" klickt, dann springt er automatisch auf die Start seite der WP-Homepage zurück, was seltsam ist.

Hier zum ansehen:
http://web318.login-11.hoststar.at/ben/jeanfran/?p=7

Hier der fertige Code:

Code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>formular</title>
</head>
<body>

    
<?php 
$mysqlhost="localhost"; // MySQL-Host angeben 
$mysqluser="root"; // MySQL-User angeben 
$mysqlpwd=""; // Passwort angeben 
$mysqldb="jeanfran"; // Gewuenschte Datenbank angeben 
$connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen"); 

mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
echo "Verbindung zur Datenbank erfolgreich <br>\n <br>\n"; 

echo '<table>';



echo '<tr>';
echo '<td> <p>Option:</p></td>';

echo '<td>';
    


echo '<form action="index.php" method="post">';
    
    
$query = ("SELECT tournee_id, code_postal, jour FROM tournee");
$q=mysql_query($query);

echo '<select name="code_postal">';

while($row = mysql_fetch_array($q)) 
{ 

    echo "<option value='".$row['code_postal']."'>".$row['code_postal']."</option>"; 
}
echo '<input type="submit" name="submit" value="submit"/>';   
echo '<input type="hidden" name="submitted" value="1">'; 
echo "</select>";


  
echo '</td>';

echo '</tr>';


echo "</form>";

echo "</table>";

    
if (isset($_POST['submit']) )
{
$option = $_POST['code_postal'];
}


$res = ("SELECT * FROM tournee WHERE code_postal = '$option'");



$res2 = mysql_query($res)  or die ("MySQL-Error: " . mysql_error());

while($row2 = mysql_fetch_array($res2))
  {
  echo $row2['code_postal'] . " " . $row2['jour'];
  echo "<br />";
  }

mysql_close($connection);


?>
    
    
</body>
</html>



"Danke im Nachhinein und Vorhinein und währenddessen"
Fawkes
 
Du hast im zweiten Query übrigens ne tolle Steilvorlage für SQL-Injections

Stichwörter für Mitigation: mysqli prepared statement
 
Du hast im zweiten Query übrigens ne tolle Steilvorlage für SQL-Injections

Stichwörter für Mitigation: mysqli prepared statement


mit anderen worten:

Code:
$option = $_POST['code_postal'];
...
$res = ("SELECT * FROM tournee WHERE code_postal = '$option'");
hauen wir mal ein paar Posts auf deine seite:

jeweils mit code_postal=

' UNION SELECT 1,2 --
' UNION SELECT 1,2,3 --
' UNION SELECT 1,2,3,4 --
' UNION SELECT 1,2,3,4,5 --
' UNION SELECT 1,2,3,4,5,6 --

etc ...

danach wissen wir wieviele spalten deine tournee tabelle hat ... sagen wir mal 4

danach finde ich es höchst interessant mal sowas hier zu Posten...


' UNION SELECT concat_ws( 0x3a, table_schema, table_name, column_name ), 2, 3, 4 FROM information_schema.columns


danach ist bekannt wie die DB aussieht ...

danach zieht man von der DB erstmal einen dump ... könnte ja mal nützlich sein was da ggf. so alles steht ...

danach kann man mal schauen welche rechte dein DB user so alles hat ... SELECT ... INTO OUTFILE soll da gerüchteweise sehr lustig sein ... so in verbindung mit dem webroot und einer php shell zum beispiel ... hab ich gehört ... :thumb_up:
 
Danke für die Info

Habe jetzt den query in das prepared statement eingebunden, aber die Fehlermeldung lautet:

.) Ohne gesendeten Wert "Query is empty"
.) Wenn man einen Wert sendet
MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Lundi, Mardi, Mecredi, Jeudi' at line 1

Wenn du sagst, dass im zweiten und dritten Query eine Sicherheitslücke liegt, bedeutet das, dass ich sie an sich auch schließen kann indem ich statt * einen Wert eingebe?

Also statt:

Code:
SELECT * FROM tournee WHERE ville =$optionville"

eher das

Code:
SELECT jour FROM tournee WHERE ville =$optionville"

lg

Code:
$mysqli = new mysqli('$mysqlhost', '$mysqluser', $mysqlpwd, $mysqldb);


if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT jour FROM tournee WHERE ville =$optionville")) 
    {

    /* bind parameters for markers */
    //$stmt->bind_param("s", $optionville);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($resville);

    /* fetch value */
    $stmt->fetch();
    
$res2ville = mysql_query($resville)  or die ("MySQL-Error: " . mysql_error());

   while($rowville = mysql_fetch_array($res2ville))
  {
  echo " On est á " . $rowville['ville'] . " le(s) jour(s) " . $rowville['jour'];
  echo "<br />";
  }

    /* close statement */
    $stmt->close();
    
}
$mysqli->close();
 
Nö, der Stern hat damit gar nichts zu tun.

PHP: Prepared Statements - Manual

Die Erklärung da ist zwar kacke, aber grob gesagt machst du es fast richtig...

Code:
$mysqli = new mysqli($mysqlhost, $mysqluser, $mysqlpwd, $mysqldb);

snip

if ($stmt = $mysqli->prepare("SELECT * FROM tournee WHERE ville = (?)")) 
    {

    /* bind parameters for markers */
    $stmt->bind_param("s", $optionville);
Die Anführungszeichen bei new mysqli willst du nicht...
 
Zurück
Oben