Programación Web y Scripting > PHP
Insertar Sentencias Sql Completas Desde Php
RadicalEd:
Hola chicos de SoloCodigo, como siempre estoy con dudas...
Tengo que hacer una inserción de datos desde un textarea a una tabla en MySQL, pero el textarea puede tener las sentencias INSERT INTO que quieran, osea, algo así:
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]INSERT[/color] INTO `colegio` VALUES (1, 'guillo');
[color=blue;font-weight]INSERT[/color] INTO `colegio` VALUES (2, 'daniel');
[color=blue;font-weight]INSERT[/color] INTO `colegio` VALUES (3, 'adfas');
[color=blue;font-weight]INSERT[/color] INTO `colegio` VALUES (4, 'asdsdg'); <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
Y este por medio del mysql_query de php anexarlo a la tabla; estos son los scripts que tengo:
<!--html--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>HTML </td></tr><tr><td id='CODE'><!--html1--><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>SQL Injection</title>
</head>
<body>
<form method="post" action="injectsql.php" name="sqlinjection">
<div align="left"><textarea cols="100" rows="10" name="sqlinfo"></textarea><br>
<br>
<input name="submit" value="Enviar" type="submit">
</div>
</form>
</body>
</html>
<!--html2--></td></tr></table><div class='postcolor'><!--html3-->
--- Código: Text ---<?php$sql = $_POST['sqlinfo'];echo $sql;$link=mysql_connect("localhost", "user", "pass");mysql_select_db("database",$link);$result = mysql_query("$sql",$link) or die ("<br><br><br>No se pudo ejecutar la accion".mysql_error());?> Y este es el error que saca:
--- Citar ---No se pudo ejecutar la accion You have an error in your SQL syntax near '\'guillo\'); INSERT INTO colegio VALUES (2, \'daniel\'); INSERT INTO colegio V' at line 1
--- Fin de la cita ---
No se si me hice entender, pero si algo pregunten.
Gracias Chao.
ibito:
Intenta ésto:
--- Código: Text --- <html><body><?phpif(isset($_POST['sqlinfo'])) { echo '$_POST[\'sqlinfo\']: '.$_POST['sqlinfo']."<br><br>"; echo 'stripslashes($_POST[\'sqlinfo\']): '.stripslashes($_POST['sqlinfo']); echo "<br><br>";}?><form method="post" action="" name="form1"><textarea name="sqlinfo" id="sqlinfo" rows="3" cols="80">INSERT INTO `colegio` VALUES (1, 'guillo');INSERT INTO `colegio` VALUES (2, 'daniel');INSERT INTO `colegio` VALUES (3, 'adfas');INSERT INTO `colegio` VALUES (4, 'asdsdg');</textarea><br><input type="submit" value="Enviar" /></form></body></html>
El problema radica es que, los TEXTAREA envían la información (por lo menos las comillas simples, las dobles no las intenté) como caracteres de escape, es decir:
una comilla:
--- Código: Text --- \'
La función que ayuda aquí es stripslashes()
RadicalEd:
mmm gracias ibito, no sabia lo del \ del textarea; bueno la función stripslashes me funciono a la perfección, pero si sigo queriendo insertar los datos en la tabla me vuelve a mostrar el mismo error. :(
Que podra ser?
--- Citar ---You have an error in your SQL syntax near 'INSERT INTO colegio (id,nombre) VALUES (2,'daniel') INSERT INTO colegio (id,nom' at line 2
--- Fin de la cita ---
ibito:
Eso ahora si es error de la consulta SQL
No se si se permita hacer varias sentencias delimitadas por ";" pero cuando yo inserto varios registros, lo hago así:
--- Código: Text --- INSERT INTO tabla (cmp1, cmp2)VALUES('1', 'A'),('2', 'B'),('3', 'C')
RadicalEd:
Muy buena tu respuesta ibito y lo mejor es que funciona, pero :( , lo que pasa es que la insercción debe ser de esa manera, ya que quienes van ha hacerlo exportaran los datos de la forma que lo hace el phpMyAdmin y pues si me pongo a enseñarles que deben quitar el INSERT INTO `colegio` VALUES, a mas de 1000 registros, lo primero que van ha hacer es arrearme la madre.
mmmm aunque estoy pensando.... (uy que raro :blink: )
Qué tal si hacen un reemplazar con el notepad?????
Gracias ibito, vamos a ver si por ese lado funciona, sino me va a tocar que joderme con estos locos. :D :D
Navegación
[#] Página Siguiente
Ir a la versión completa