2010-06-09 8 views
-1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256"> 
<title>اول اسكربت باذن الله</title> 
</head> 

<body> 
<table width="100%" border="1"> 
<tr> 
    <td>name</td> 
    <td>number</td> 
    <td>math</td> 
    <td>arab</td> 
    <td>history</td> 
    <td>geo</td> 

    </tr> 


<?php 


require_once "conf.php"; 

$sql2=("SELECT * FROM student WHERE snum = $ss"); 
$rs2 = mysql_query($sql2) or die(mysql_error()); 
$num = mysql_num_rows($rs2); 
$ss= $_POST["ss"]; 

if (empty($ss)) 
{ echo "please write your search words";} 
else if ($num < 1) { 
    echo "not found any like "; 

}else { 
$sql=("SELECT * FROM student WHERE snum = $ss "); 
$rs = mysql_query($sql) or die(mysql_error()); 



while($data=mysql_fetch_array($rs)){ 
$name=$data["sname"]; 
$number=$data["snum"]; 
$math=$data["math"]; 
$arab=$data["arab"]; 
$history=$data["history"]; 
$geo=$data["geo"]; 





echo" 
    <tr> 
    <td>$name</td> 
    <td>$number</td> 
    <td>$math</td> 
    <td>$arab</td> 
    <td>$history</td> 
    <td>$geo</td> 
    </tr> 
"; 


} 
}; 
?> 
</table> 
</body> 
</html> 
+0

quel code sql? – hgulyan

Répondre

2

Je pense que $ ss = $ _POST [ "ss"]; devrait aller avant

$ sql2 = ("SELECT * FROM étudiant WHERE snum = $ ss");

+0

Cris vous êtes veryyyyyy homme dieu il est travaille maintenant merci – magy

1

$ss est une chaîne? Si vous avez ceci?

$sql2=("SELECT * FROM student WHERE snum = '$ss'"); 
+0

non c'est le numéro num $ sql2 = ("SELECT * FROM étudiant WHERE snum = $ ss"); – magy

+0

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; - Base de données: 'custom' - Structure de table pour la table' Student' CREATE TABLE SINON EXISTE 'Student' (' id' int (11) NOT NULL auto_increment, 'sname' varchar (100) PAS NULL, 'snum' int (15) NOT NULL, ' math' int (10) NON NULL, 'arab' int (10) NOT NULL, ' history' int (10) NOT NULL, 'geo' int (10) NOT NULL, PRIMARY KEY ('id') ) MOTEUR = CHARGEUR PAR DÉFAUT MyISAM = cp1256 AUTO_INCREMENT = 3; – magy

2

Vous passez non-existante variables $ss à votre requête avant sa sortie:

$sql2=("SELECT * FROM student WHERE snum = $ss"); // <-- problem here 
$rs2 = mysql_query($sql2) or die(mysql_error()); 
$num = mysql_num_rows($rs2); 
$ss= $_POST["ss"]; 

Essayez ceci:

require_once "conf.php"; 

$ss= $_POST["ss"]; 

if (empty($ss)) 
{ echo "please write your search words";} 
else if ($num < 1) { 
    echo "not found any like "; 

}else { 
$sql=("SELECT * FROM student WHERE snum = $ss "); 
$rs = mysql_query($sql) or die(mysql_error()); 

// and more code... 
+0

Avez-vous regardé les caractères dans Windows 1256? – Gumbo

+0

@Gumbo: Modifier ma réponse, je pense que cela supporte aussi l'arabe. Merci – Sarfraz

3

Vous ne pouvez pas utiliser une variable qui n'a pas été initialisé. Dans votre cas, $ss est probablement indéfini lorsque vous l'utilisez pour créer la requête dans $sql2. Cela entraîne une instruction SQL non valide car il n'y a rien après l'opérateur =.

Essayez ceci:

require_once "conf.php"; 
if (!isset($_POST["ss"])) { 
    echo "please write your search words"; 
} else { 
    $ss = $_POST["ss"]; 
    $query = "SELECT * FROM student WHERE snum = '".mysql_real_escape_string($ss)."'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    if (mysql_num_rows($result) == 0) { 
     echo "not found anything like ".htmlspecialchars($ss); 
    } else { 
     while ($data=mysql_fetch_array($result)) { 
      // … 
     } 
    } 
} 
1

Sérieusement?

Première: php est un langage de programmation simple. Il exécute tout ce que vous lui donnez dans l'ordre que vous lui donnez. C'est pourquoi la variable $ ss que vous essayez d'utiliser dans votre requête n'existe pas lorsque vous essayez de l'utiliser. Vous devriez lui attribuer sa valeur avant de l'utiliser.

Maintenant, commençons à être un âne. $_POST['ss'] est fourni par vos visiteurs. Ne fais pas confiance. Ne faites jamais confiance aux commentaires des utilisateurs! Ils veulent prendre le contrôle de votre serveur afin qu'ils puissent vous trouver et vous kidnapper pour demander une rançon. Donc, ne l'utilisez pas dans votre requête sans vérifier sa valeur. Imaginez si votre utilisateur envoie $ _POST ['ss'] = '1 OR 1'; La meilleure façon de traiter ce genre de problème est d'utiliser des requêtes paramétrées avec mysqli ou PDO.

+0

+1 Il est une bête noire de la mienne pour voir le code vulnérable SQL injection. – tangrs

Questions connexes