insertar el valor de html, seleccione formulario en la base de datos mysql

Quiero insertar el valor de un ‘seleccione’ en mi base de datos mysql.

¿Cómo puedo obtener el valor correcto de esto?

<form action='' method='post'>
 <select name="myselectbox">
  <option name="myoption1" value="myoption1">myoption1</option>
  <option name="myoption2" value="myoption2">myoption2</option>
  <option name="myoption3" value="myoption3">myoption3</option>
  <option name="myoption4" value="myoption4">myoption4</option>
 </select>
<input type='submit' value='submit'/>
</form>

algo como eso? (esto no funciona, obviamente,..)

$sql = "INSERT INTO Entries (myoption1) VALUES ('$_POST[myselectbox]')";
  • Usted tiene que ajustar su <select> en un <form> con POST method atributo. Pero usted debe tener una visión más amplia acerca de cómo web moderno desarrollo de las obras, lugar de jugar con la costumbre y obsoleto PHP/MySQL de código espagueti.
  • soy un principiante.. me puedes dar algunas palabras clave para lo que tengo que buscar para obtener ‘un wieder foto, gracias
  • Uno de mis favoritos lecturas es todavía el symfony HTTP fundamentos, mira para el protocolo HTTP, la separación de preocupaciones, y de enrutamiento.
  • También, se busca «SQL Injection» y «declaraciones Preparadas». La construcción de INSERTAR (o cualquier otra SQL) declaraciones de esta forma es una mala idea, y usted debe aprender a evitar desde el principio.
  • ok gracias. supongo que mi profe es una de las antiguas lol
InformationsquelleAutor Marc Ster | 2014-02-25

4 Kommentare

  1. 5

    usted tiene que ajustar sus seleccione la etiqueta en una etiqueta de formulario .

    <form action='' method='post'>
    <select name="myselectbox">
       <option name="myoption1" value="myoption1">myoption1</option>
       <option name="myoption2" value="myoption2">myoption2</option>
       <option name="myoption3" value="myoption3">myoption3</option>
       <option name="myoption4" value="myoption4">myoption4</option>
    </select>
    <input type='submit' value='submit'/>
    </form>

    una vez enviado el formulario, usted recibirá la variable post como $_POST['myselectbox'] que podría ser añadido en una consulta de mysql como ya se ha hecho. pero de una mejor manera no sólo tiene que añadirlo como eso, pero de verificación que se envía el formulario y post variables están disponibles o no antes de añadir.
    por ejemplo:

    if(!empty($_POST['myselectbox'])){
        /*.. do your query section... */
    }
    • whoops. se me olvidó añadir el código del formulario en mi post.. y por supuesto, mi código es envuelto en un formulario como el que se publicó anteriormente. pero todavía no puedo obtener el valor en mi base de datos mysql :/
    • si ha definido el atributo de método y de acción, como he sugerido, a continuación, debe estar funcionando. y una cosa más , intentar añadir el $sql = «INSERT INTO Entradas (myoption1) VALUES (‘$_POST[myselectbox]’)»; correctamente. dado que el presupuesto antes de la variable post va a hacer problema con la clave de la cadena de ‘post’ de la matriz 🙂 . u puede publicar código completo aquí ?
  2. 1

    tiene error en el comando SQL, $_POST necesidades html nombres a estar envuelto en citas como => $_POST['some_name'] :

    $sql = "INSERT INTO Entries (myoption1) VALUES ('$_POST[myselectbox]')";
    /* ^^ missing quotes here*/

    tratar de esta manera :

    $sql = "INSERT INTO Entries (myoption1) VALUES (".$_POST['myselectbox'].")";
    • Enseñar a un novato para concatenar cadenas en conjunto para generar una instrucción SQL no es una gran idea. Por favor, considere la posibilidad de cambiar el ejemplo para el uso de declaraciones preparadas.
    • si el nuevo usuario no se puede entender la concatenación concepto, piensa usted, él/ella va a captar la idea de prepared statements….??? También, uno debe entender las vulnerabilidades en primer lugar, antes de aprender how-to-prevent-it… 🙂
    • Sí, yo no creo que van a recibirlo. Explicar lo que está mal con el tema específico y, a continuación, educar en cuanto a por qué el enfoque es erróneo. Creo que estamos de acuerdo – sólo tengo más esperanzas!
    • lo voy a dejar en OP para decidir lo que es preferido… 🙂
  3. 1

    Suponiendo que el formulario es correcta y es la publicación de los valores que desea que el script.

    (Tiene roció su código con echo para asegurarse de que este es el caso?)

    El más simple de una forma confiable de envío de los datos en una instrucción SQL y por lo tanto en mysql es el uso de declaraciones preparadas.

    Echar un vistazo aquí: http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

    Básicamente escribir la instrucción SQL sin las variables en él (sustituido con ?) y, a continuación, decirle a mysql para ejecutar las instrucciones con las variables más tarde. Evita la necesidad de escapar de las cadenas y la preocupación acerca de cómo construir cosas.

    Como un ejemplo, usted puede tener:

    //Connect to mysql
    
    $mysqli = new mysqli('where your server is', 'my_user', 'my_password', 'world');
    
    //Build the initial statement - easier to read as you don't have your string concatenation here
    
    $stmt = $mysqli->prepare( "INSERT INTO Entries (myoption1) VALUES (?)" );
    
    //Tell mysql that the '?' should be replaced with the value in your post array
    
    $stmt->bind_param( "s", $POST['myselectbox'] );
    
    //Execute the statement
    
    $stmt->execute()

    Obviamente, usted debe agregar el manejo de errores también, pero la documentación cubre los aspectos básicos de este.

    De Inyección de SQL

    La razón principal por la que el uso de sentencias preparadas es una buena idea, es que evita los ataques de inyección SQL.

    Hay otras maneras de ronda, pero en mi mente esta es la solución más sencilla.

    Los ataques de Inyección SQL son situaciones en las que alguien intenta cambiar la instrucción SQL que se está ejecutando por «inyección» de otro SQL en su declaración.

    El uso de su código como un ejemplo, puede ejecutar esta instrucción:

    $sql = "INSERT INTO Entries (myoption1) VALUES ('". $_POST['myselectbox'] ."')";

    Que recibiría normalmente (vamos a sugerir) algo como myoption1.

    Este sería el resultado en el SQL se:

    INSERT INTO Entries (myoption1) VALUES ('myoption1');

    Si alguien decidió, que podría enviar '='' OR '1'='1

    Este sería el resultado en el SQL se:

    INSERT INTO Entries (myoption1) VALUES (''='' OR '1'='1');

    Que es (obviamente) muy diferentes.

    O, aún peor enviar '=')'; DROP TABLE Entries WHERE (''='

    Este sería el resultado en el SQL se:

    INSERT INTO Entries (myoption1) VALUES (''=''); DROP TABLE Entries WHERE (''='');

    Uso De Declaraciones Preparadas

    Simplemente poner, pero el uso de declaraciones preparadas, usted le dice a mysql que lo que se está enviando es una cadena literal para ser utilizado como un parámetro. Nunca puede ser considerada como parte de la declaración de la misma, y por tanto la de arriba es simplemente no es posible.

    Mucho más seguro.

    Espero que deja más claro. Si desea más información le sugiero que investiguen de forma independiente…

    • Gracias por explicar este principio para mí. Así que esto podría ser más seguro que el estándar de mysql/php cosas? Pero yo todavía no consigue el truco ¿por qué es más seguro si puedo ejecutar las variables declaraciones posteriores. Me refiero a que es el mismo valor que viene de la forma o no?
    • Esto no es más seguro que el estándar de mysql/php – esta ES la norma, que es por qué me irrito cuando otros enseñan concatenación. Voy a añadir una explicación breve en mi respuesta…
  4. 0
    $value = mysql_real_escape_string($_POST['myselectbox']);    
    $sql = "INSERT INTO Entries (myoption1) VALUES ($value)";
    • ahora estoy recibiendo este error: Warning: mysql_real_escape_string(): Access denied for user ‘www-data’@’localhost’ (utilizando password: NO) en «mypath» en la línea 10 Advertencia: mysql_real_escape_string(): Un enlace al servidor no se pudo establecer en «mypath» en la línea 10
    • ¿por qué es mysql_real_escape_string necesita aquí….doesnt como usuario dado de entrada para ser esacped???
    • usted no tiene que agregar un mysql_real_escape_string como supongo que porque mysql ya está en desuso, y los datos de envío de ‘myselectbox’ valor predefinido en el cuadro de selección. así que no necesitamos que preocuparse mucho sobre qué datos traerá. si es necesario use mysqli_real_escape_string
    • yo no uso el real escapar ahora.. pero todavía no está obteniendo el valor de mi formulario
    • Compruebe que el tipo de botón es button o submit
    • Usted necesita para escapar de la cadena de usuario o preparado declaraciones cuando usted toma la entrada del usuario y poner en SQL. Independientemente de lo que el código HTML se dice que es la entrada, cualquier cosa puede ser enviado a cualquier forma – y de forma muy sencilla. Vale la pena aprender a proteger a sus SQL de inyección desde el primer día.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea